[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/custom/protocol/common/atci/include/at_custom_cmd_op01.h b/mcu/custom/protocol/common/atci/include/at_custom_cmd_op01.h
new file mode 100644
index 0000000..ab500e6
--- /dev/null
+++ b/mcu/custom/protocol/common/atci/include/at_custom_cmd_op01.h
@@ -0,0 +1,119 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * at_custom_cmd_op01.def
+ *
+ * Project:
+ * --------
+ *   MT6208
+ *
+ * Description:
+ * ------------
+ *   This file is intends for ....
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+/********************************************************************************
+*  Copyright Statement:
+*  --------------------
+*
+*  This product has been developed using a protocol stack
+*  developed by Sasken Communication Technologies Limited.
+*
+********************************************************************************/
+
+/* Please add EXTEND_CMD() in the following*/
+EXTEND_CMD("scpbr", 119040566, 0, "", RMMI_CMD_ATSCPBR, rmmi_cpbr_hdlr)
+EXTEND_CMD("scpbw", 119040571, 0, "", RMMI_CMD_ATSCPBW, rmmi_cpbw_hdlr)
+
+EXTEND_CMD("dsci", 79482215, 0, "^DSCI: (0,1)", RMMI_CMD_ATDSCI, rmmi_dsci_hdlr)
+EXTEND_CMD("mtv", 79254722, 0, "", RMMI_CMD_ATMTV, rmmi_mtv_hdlr)
+EXTEND_CMD("sysinfo", 120252344, 243, "", RMMI_CMD_ATSYSINFO, rmmi_sysinfo_hdlr)
+EXTEND_CMD("sysconfig", 120252117, 777221, "", RMMI_CMD_ATSYSCONFIG, rmmi_sysconfig_hdlr)
+EXTEND_CMD("cardmode", 85571605, 21817, "^CARDMODE: (0,1)", RMMI_CMD_ATCARDMODE, rmmi_cardmode_hdlr)
+EXTEND_CMD("rfsw", 80232273, 0, "", RMMI_CMD_ATRFSW, rmmi_rfsw_hdlr)
+EXTEND_CMD("spn", 79263226, 0, "^SPN: (0,1)", RMMI_CMD_ATSPN, rmmi_spn_hdlr)
+EXTEND_CMD("hver", 79706120, 0, "", RMMI_CMD_ATHVER, rmmi_hver_hdlr)
+EXTEND_CMD("cmdver", 86210529, 18, "", RMMI_CMD_ATCMDVER, rmmi_cmdver_hdlr)
+EXTEND_CMD("off", 21894, 0, "", RMMI_CMD_ATOFF, rmmi_off_hdlr)
+
+/* Please add CMD_ENUM() in the following and do not wrap with compile option*/
+CMD_ENUM(RMMI_CMD_ATSCPBR)
+CMD_ENUM(RMMI_CMD_ATSCPBW)
+CMD_ENUM(RMMI_CMD_ATDSCI)
+CMD_ENUM(RMMI_CMD_ATMTV)
+CMD_ENUM(RMMI_CMD_ATSYSINFO)
+CMD_ENUM(RMMI_CMD_ATSYSCONFIG)
+CMD_ENUM(RMMI_CMD_ATCARDMODE)
+CMD_ENUM(RMMI_CMD_ATRFSW)
+CMD_ENUM(RMMI_CMD_ATSPN)
+CMD_ENUM(RMMI_CMD_ATHVER)
+CMD_ENUM(RMMI_CMD_ATCMDVER)
+CMD_ENUM(RMMI_CMD_ATOFF)
+
diff --git a/mcu/custom/protocol/common/atci/include/at_custom_cmd_tc01.h b/mcu/custom/protocol/common/atci/include/at_custom_cmd_tc01.h
new file mode 100644
index 0000000..b707a52
--- /dev/null
+++ b/mcu/custom/protocol/common/atci/include/at_custom_cmd_tc01.h
@@ -0,0 +1,201 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * AT_CUSTOM_CMD.DEF
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *   This file is intends for implementing custom commands for some customers
+ *   which should not be released to other customers
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifdef __TC01__
+CUSTOM_CMD("custom", 7435931, 13, "+CUSTOM: This is a sample", RMMI_CMD_ATCUSTOM, rmmi_custom_hdlr)
+
+CUSTOM_CMD("sltype",        40305894,          5, "", RMMI_CMD_SLTYPE,         rmmi_sltype_hdlr        )
+CUSTOM_CMD("vslt3",         46933678,          0, "", RMMI_CMD_VSLT3,          rmmi_vslt3_hdlr         )
+CUSTOM_CMD("vslt2",         46933677,          0, "", RMMI_CMD_VSLT2,          rmmi_vslt2_hdlr         )
+CUSTOM_CMD("vslt",           1235096,          0, "", RMMI_CMD_VSLT,           rmmi_vslt_hdlr          )
+CUSTOM_CMD("simimsi",       40130559,        731, "", RMMI_CMD_SIMIMSI,        rmmi_simimsi_hdlr       )
+CUSTOM_CMD("rfdevchk",      37867668,       4647, "", RMMI_CMD_RFDEVCHK,       rmmi_rfdevchk_hdlr      )
+CUSTOM_CMD("sbp",			   27528,		   0, "", RMMI_CMD_SBP, 		   rmmi_sbp_hdlr		   )
+CUSTOM_CMD("pgcheck",       33750921,        125, "", RMMI_CMD_PGCHECK,        rmmi_pgcheck_hdlr       )
+CUSTOM_CMD("pgcheckext",    33750921,    6867152, "", RMMI_CMD_PGCHECKEXT,     rmmi_pgcheckext_hdlr    )
+CUSTOM_CMD("cgatt", 		     6641736,		   0, "", RMMI_CMD_LGCGATT, 	   rmmi_lgcgatt_hdlr	   )
+CUSTOM_CMD("detach",		     8643825,		   8, "", RMMI_CMD_DETACH,		   rmmi_detach_hdlr 	   )
+CUSTOM_CMD("ltecall",       26126407,        468, "", RMMI_CMD_LTECALL,        rmmi_ltecall_hdlr       )
+CUSTOM_CMD("datastatic",     8424353,   41786817, "", RMMI_CMD_DATASTATIC,     rmmi_dataStatic_hdlr    )
+CUSTOM_CMD("mimoantcheck",	27619959, 1151171433, "", RMMI_CMD_MIMOANTCHECK,   rmmi_mimoantcheck_hdlr  )
+CUSTOM_CMD("rxmrd", 		    38868836,		   0, "", RMMI_CMD_RXMRD,          rmmi_rxmrd_hdlr         )
+CUSTOM_CMD("simtray",       40130982,         63, "", RMMI_CMD_SIMTRAY,        rmmi_simtray_hdlr       )
+CUSTOM_CMD("inisim",        19548159,         13, "", RMMI_CMD_INISIM,         rmmi_inisim_hdlr        )
+CUSTOM_CMD("issim",         19836583,          0, "", RMMI_CMD_ISSIM,          rmmi_issim_hdlr         )
+CUSTOM_CMD("simid",         40130550,          0, "", RMMI_CMD_SIMID,          rmmi_simid_hdlr         )
+CUSTOM_CMD("bndi",            130121,          0, "", RMMI_CMD_BNDI,           rmmi_bndi_hdlr          )
+CUSTOM_CMD("ecall",         10592208,          0, "", RMMI_CMD_ECALL,          rmmi_ecall_hdlr         )
+CUSTOM_CMD("flight",        13182550,         20, "", RMMI_CMD_FLIGHT,         rmmi_flight_hdlr        )
+#ifdef __VSIM__
+CUSTOM_CMD("simoff",        40130780,          6, "", RMMI_CMD_SIMOFF,         rmmi_simoff_hdlr        )
+#endif
+CUSTOM_CMD("campreq",       6329678,         207, "", RMMI_CMD_CAMPREQ,        rmmi_campreq_hdlr       )
+CUSTOM_CMD("camp",          166570,            0, "", RMMI_CMD_CAMP,           rmmi_camp_hdlr          )
+CUSTOM_CMD("lbcall",        25135758,         12, "", RMMI_CMD_LBCALL,          rmmi_lbcall_hdlr       )
+#endif
diff --git a/mcu/custom/protocol/common/atci/include/mtcdef.h b/mcu/custom/protocol/common/atci/include/mtcdef.h
new file mode 100644
index 0000000..bd03d03
--- /dev/null
+++ b/mcu/custom/protocol/common/atci/include/mtcdef.h
@@ -0,0 +1,549 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * MTCDEF.H
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *   This file is intends for implementing custom commands for some customers
+ *   which should not be released to other customers
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifdef __MTK_TARGET__  /* Only support ATS test on target , not support in simulator */
+#ifndef MTCDEF_H
+#define MTCDEF_H
+
+#include "lcd_sw_inc.h"
+#include "lcd_sw.h"
+
+/*===============================================================*/
+#define MTC_CMD_CODE 0xF0
+
+
+/******************************************************************************
+  *																																						*
+  *					Integrate RFWS library - ia_raw.h																				*
+  *																																						*
+  ******************************************************************************/
+#define RGB565_REDMASK		(0xf800)
+#define RGB565_REDSHIFT		(11)
+#define RGB565_GREENMASK	(0x07e0)
+#define RGB565_GREENSHIFT	(5)
+#define RGB565_BLUEMASK	(0x001f)
+#define RGB565_BLUESHIFT	(0)
+
+#define RGB_PLANE_RED		(1)
+#define RGB_PLANE_GREEN	(2)
+#define RGB_PLANE_BLUE		(3)
+
+
+/******************************************************************************
+  *																																						*
+  *					Integrate RFWS library - ia_simple_dpcm.h																	*
+  *																																						*
+  ******************************************************************************/
+#define DPCM_MINIMAL_QUANTIZER	(1)
+#define DPCM_MAXIMAL_QUANTIZER	(7)
+
+#define DPCM_INITIAL_PREDICTION	(128)
+
+
+typedef enum 
+{
+	MTC_SCREEN_INFO_REQ_CMD = 0x00, 	/* Screen Info Request */
+	MTC_CAPTURE_REQ_CMD  = 0x01,		/* Screen Capture Request */
+	MTC_KEY_LOG_MASK_CMD = 0x07,
+	MTC_KEY_LOG_DATA_IND = 0x08,
+	MTC_PHONE_RESTART_REQ_CMD = 0x10,	/* Phone Restart Request */
+	MTC_PHONE_FACTORY_RST_CMD = 0x11,	/* Phone Factory Reset Request*/
+	MTC_PHONE_REPORT_REQ_CMD = 0x20,	/* Phone Report request */
+	MTC_PHONE_STATE_REQ_CMD = 0x21,		/* Phone status request*/
+	MTC_DATA_TRANSFER_SETUP_CMD = 0x22,	/* Request to setup data transfer parameters*/	
+	MTC_KEY_REPORT_EN_REQ_CMD = 0x30, 	/* Enable/Disable key press notification*/
+	MTC_KEY_EVENT_REQ_CMD  = 0x33,		/* Key Event notification or key press emulation */
+	MTC_FAST_KEY_EVENT_REQ_CMD = 0x35,  /* Fast key event request cmd */
+	MTC_MEMORY_DUMP_REQ_CMD = 0x40,		/* Memory Dump Request*/
+	MTC_BATTERY_LEVEL_REQ_CMD = 0x41,	/* Battery Level Request*/
+	MTC_BACKLIGHT_REQ_CMD = 0x42,		/* Backlight State Request*/
+	MTC_FLEX_DATA_REQ_CMD = 0x50,
+	MTC_ERROR_CMD = 0x7F,
+	MTC_CURRENT_CELL_REQ_CMD = 0x80		/*Current cell, codec and data transfer quality information*/
+}mtc_sub_cmd_type;
+
+typedef enum
+{
+	MTC_MAIN_LCD = 0,
+	MTC_SUB_LCD,
+	MTC_LCD_PADDING = 0x7F
+}mtc_scrn_id_type;
+
+
+typedef struct                                     
+{
+    kal_uint8      sw_ver[45];
+    kal_uint8      hw_ver[16];
+    kal_uint8      sw_sub_ver;
+} mtcVersion_type;
+
+/*================================================================*/
+typedef __packed struct 
+{
+	kal_uint8 cmd_code;
+	kal_uint8 sub_cmd;
+}mtc_req_hdr_type;
+
+typedef __packed struct
+{
+	mtc_req_hdr_type hdr;
+	mtc_scrn_id_type screen_id;
+}mtc_info_req_type;
+
+/*=================================================================*/
+typedef __packed struct
+{
+	mtc_req_hdr_type hdr;
+	mtc_scrn_id_type screen_id;
+	kal_uint16 left;	/* Upper left X-Coord */
+	kal_uint16 top;	/* Upper left Y-Coord */
+	kal_uint16 width;  /* Width of the capture screen */
+	kal_uint16 height;  /* Height of the capture screen */
+}mtc_capture_req_type;
+
+/*=================================================================*/
+
+typedef __packed struct
+{
+	kal_uint16 left;	/* Upper left X-Coord */
+	kal_uint16 top;	/* Upper left Y-Coord */
+	kal_uint16 width;  /* Width of the area */
+	kal_uint16 height;  /* Height of the area */
+} mtc_ats_capture_rect_type;
+
+
+typedef __packed struct
+{
+	kal_uint8 mask_type;
+	mtc_ats_capture_rect_type rect; /* masked area */
+}mtc_ats_capture_mask_req_type;
+
+#define MTC_ATS_NMASK_MAX (5)
+
+typedef __packed struct
+{
+	mtc_req_hdr_type hdr;
+	mtc_scrn_id_type screen_id;
+	mtc_ats_capture_rect_type base_area;
+	kal_uint8 refresh;
+	kal_uint8 data_type;
+	kal_uint8 pack_type;
+	kal_uint8 quantizer;
+	kal_uint8 threshold;
+	mtc_ats_capture_mask_req_type masks[MTC_ATS_NMASK_MAX];
+}mtc_ats_capture_req_type;
+
+typedef  __packed struct
+{
+	mtc_req_hdr_type hdr;
+	kal_uint8 request_area;
+	kal_uint8 value;
+}mtc_ats_key_report_en_req_type;
+
+#if 1 /* LGE_L1_NUGUYU_20091119 */
+typedef  __packed struct
+{
+	mtc_req_hdr_type hdr;
+	kal_uint32 log_mask;
+}mtc_ats_key_log_mask_req_type;
+#endif
+
+typedef  __packed struct
+{
+	mtc_req_hdr_type hdr;
+	kal_uint32 address;
+	kal_uint32 reserved;
+	kal_uint8 size;
+}mtc_ats_memory_req_type;
+
+typedef  __packed struct
+{
+	mtc_req_hdr_type hdr;
+}mtc_ats_battery_req_type;
+
+typedef  __packed struct
+{
+	mtc_req_hdr_type hdr;
+	kal_uint8 request_area;
+}mtc_ats_backlight_req_type;
+
+typedef __packed struct
+{
+	mtc_req_hdr_type hdr;
+	kal_uint8 request_cell;
+}mtc_ats_cell_req_type;
+
+typedef __packed struct
+{
+	mtc_req_hdr_type hdr;
+	kal_uint16 packet_size;
+	kal_uint16 transfer_delay;
+}mtc_ats_transfer_setup_req_type;
+
+typedef __packed struct
+{
+	mtc_req_hdr_type hdr;
+	kal_uint8 KeyHoldType; /* Press or Depress */
+	kal_uint8 KeyCode;		/* Virtual key Code */
+}mtc_key_event_req_type;
+
+typedef __packed struct
+{
+	mtc_req_hdr_type hdr;
+	kal_uint8 KeyCode;		/* Virtual key Code */
+	kal_uint16 Delay;		/* delay measured in 1\10 of a second  */
+}mtc_fast_key_event_req_type;
+
+typedef __packed union
+{
+	mtc_info_req_type info;
+	mtc_capture_req_type capture;
+	mtc_ats_capture_req_type ats_capture;
+	mtc_ats_key_report_en_req_type ats_key_report_en;
+	mtc_ats_key_log_mask_req_type ats_key_log_mask;
+	mtc_ats_memory_req_type ats_dump;
+	mtc_ats_battery_req_type ats_battery;
+	mtc_ats_backlight_req_type ats_backlight;
+	mtc_ats_cell_req_type ats_cell_info;
+	mtc_ats_transfer_setup_req_type ats_setup;
+	mtc_key_event_req_type keyevent;
+	mtc_fast_key_event_req_type fastkeyevent;
+}mtc_req_type;
+
+typedef  __packed union
+{
+	mtc_req_hdr_type hdr;
+	mtc_req_type mtc_req;
+}diag_mtc_req_type;
+
+/*==============================================================*/
+
+#define MTC_262K_CMASK_RED				0x0000FC00
+#define MTC_262K_CMASK_GREEN				0x000003F0
+#define MTC_262K_CMASK_BLUE				0xC000000F
+
+#define MTC_65K_CMASK_RED					0xF800
+#define MTC_65K_CMASK_GREEN				0x07E0
+#define MTC_65K_CMASK_BLUE				0x001F
+
+typedef enum
+{
+	MTC_BIT_UNDEF			=	0,
+	MTC_BIT_MONO			=	1,
+	MTC_BIT_4				=	2,
+	MTC_BIT_16				=	4,
+	MTC_BIT_256			=	8,
+	MTC_BIT_65K			=	16,
+	MTC_BIT_262K			=	18,
+	MTC_BIT_RGB24			=	24,
+	MTC_BIT_RGB_32		=	32,
+	MTC_BIT_PADDING		=	0x7F
+}mtc_bits_pixel_type;
+
+typedef unsigned long		mtc_pixel_18_type;	/* 4 kal_uint8 */
+typedef unsigned short		mtc_pixel_16_type;  /* 2 kal_uint8 */
+
+/*	
+	We have to make sure that MTC_SCRN_BUF_SIZE_MAX is set correctly in various project .
+	The only thing we can confirm is that bpp of MAIN_LCD_16BIT_MODE is displayed 2 bytes length,
+	the other cases MTC_SCRN_BUF_SIZE_MAX is set to maximum size
+	It may be revised in later projects	
+*/
+#if defined (MAIN_LCD_16BIT_MODE)
+	#define MTC_SCRN_BUF_SIZE_MAX	(LCD_WIDTH*LCD_HEIGHT*(sizeof(mtc_pixel_16_type)))
+#else
+	#define MTC_SCRN_BUF_SIZE_MAX	(LCD_WIDTH*LCD_HEIGHT*(sizeof(mtc_pixel_18_type)))
+#endif
+
+
+/*=========================================================*/
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+typedef mtc_req_hdr_type mtc_rsp_hdr_type;
+
+typedef  __packed struct
+{
+	mtc_rsp_hdr_type	hdr;
+	mtc_scrn_id_type	scrn_id;
+	kal_uint16	scrn_width;					/* Screen Width in Pixels */
+	kal_uint16	scrn_height;					/* Screen Height in Pixcels */
+	mtc_bits_pixel_type	bits_pixel;		/* Color bits for each Pixel */ 
+}mtc_screen_info_rsp_type;
+
+typedef  __packed struct
+{
+	kal_uint32	blue;
+	kal_uint32	green;
+	kal_uint32	red;
+}mtc_mask_type;
+
+typedef  __packed struct
+{
+	mtc_rsp_hdr_type	hdr;
+	mtc_scrn_id_type	scrn_id;
+	kal_uint16	bmp_width;	                  /* Width of the BMP */
+	kal_uint16	bmp_height;	                  /* Height of the BMP */
+	mtc_bits_pixel_type	bits_pixel; /* Color bits for each pixel */
+	mtc_mask_type	mask;
+////	kal_uint8 bmp_data[MTC_SCRN_BUF_SIZE_MAX];
+//mtk01616_091217: we output data directly ,without keeping all bmp_data in a buffer first.
+}mtc_capture_rsp_type;
+
+typedef  __packed struct
+{
+	mtc_rsp_hdr_type hdr;
+	mtc_scrn_id_type scrn_id;
+	kal_uint16 bmp_width;	                  		/* Width of the BMP */
+	kal_uint16 bmp_height;	                  	/* Height of the BMP */
+	mtc_bits_pixel_type bits_pixel;  	/* must be zero */
+	kal_uint8 data_type;
+	kal_uint8 pack_type;
+	kal_uint8 quantizer;
+	kal_uint8 threshold;
+	kal_uint32 bmp_size;
+////	kal_uint8 bmp_data[ MTC_SCRN_BUF_SIZE_MAX ];
+//mtk01616_091217: we output data directly ,without keeping all bmp_data in a buffer first.
+}mtc_ats_capture_rsp_type;
+
+typedef __packed struct
+{
+	mtc_rsp_hdr_type hdr;
+	kal_uint8 keyState;
+	kal_uint8 keyCode;
+}mtc_ats_key_report_type;
+
+typedef __packed struct
+{
+	mtc_req_hdr_type hdr;
+	kal_uint8 model_name[10]; 
+	kal_uint32 release_date;
+	kal_uint8 software_ver[40];
+	kal_uint8 IMEI[15];
+	kal_uint8 phone_num[15];
+	kal_uint16 enabled_functions;
+}mtc_ats_phone_report_rsp_type;
+
+typedef __packed struct
+{
+	mtc_req_hdr_type hdr;
+	kal_uint16 phone_state;
+}mtc_ats_phone_state_rsp_type;
+
+typedef  __packed struct
+{
+	mtc_req_hdr_type hdr;
+	kal_uint8 request_area;
+	kal_uint8 value;
+}mtc_ats_key_report_en_rsp_type;
+
+typedef  __packed struct
+{
+	mtc_req_hdr_type hdr;
+	kal_uint32 log_mask;
+}mtc_ats_key_log_mask_rsp_type;
+
+typedef  __packed struct
+{
+	mtc_req_hdr_type hdr;
+	kal_uint32 *reserved;
+	kal_uint32 *address;
+	kal_uint8 size;
+	kal_uint8 data[64];
+}mtc_ats_memory_rsp_type;
+
+typedef  __packed struct
+{
+	mtc_req_hdr_type hdr;
+	kal_uint8 isCharging;
+	kal_uint8 capacity;
+}mtc_ats_battery_rsp_type;
+
+typedef  __packed struct
+{
+	mtc_req_hdr_type hdr;
+	kal_uint8 value;
+}mtc_ats_backlight_rsp_type;
+
+typedef __packed struct
+{
+	mtc_req_hdr_type hdr;
+	kal_uint16 packet_size;
+	kal_uint16 transfer_delay;
+}mtc_ats_transfer_setup_rsp_type;
+
+ 
+/*==========================================================*/
+
+typedef __packed struct
+{
+	mtc_rsp_hdr_type hdr;
+	kal_uint8 KeyHoldType;     /* Press or Release */
+	kal_uint8 KeyCode;		/* Virtual key Code */
+}mtc_key_event_rsp_type;
+
+typedef mtc_key_event_rsp_type mtc_key_event_ind_type;
+
+typedef __packed struct
+{
+	mtc_rsp_hdr_type hdr;
+	kal_uint8 log_id;     /* Press or Release */
+	kal_uint16 log_len;		/* Virtual key Code */
+	kal_uint64 time;
+	kal_uint8 press;
+	kal_uint8 key_code;
+	kal_uint64 active_UIID;
+}mtc_ats_key_log_event_rsp_type;
+
+typedef mtc_ats_key_log_event_rsp_type mtc_ats_key_log_event_ind_type;
+
+typedef __packed struct
+{
+	mtc_rsp_hdr_type hdr;
+	kal_uint8 KeyCode;		/* Virtual key Code */
+	short Delay;		/* delay measured in 1\10 of a second  */
+}mtc_fast_key_event_resp;
+
+/*==========================================================*/
+
+typedef __packed union
+{
+	mtc_screen_info_rsp_type info;
+	mtc_capture_rsp_type capture;
+	mtc_ats_capture_rsp_type ats_capture;  
+	mtc_ats_memory_rsp_type ats_dump;
+	mtc_ats_battery_rsp_type ats_battery;
+	mtc_ats_backlight_rsp_type ats_backlight;
+	mtc_ats_transfer_setup_rsp_type ats_setup;
+	mtc_key_event_rsp_type keyevent;
+	mtc_ats_key_log_event_rsp_type ats_keylogevent;
+	mtc_fast_key_event_resp fastkeyevent;
+}mtc_rsp_type;
+
+typedef __packed union 
+{
+	mtc_rsp_hdr_type hdr;
+	mtc_rsp_type mtc_rsp;
+}diag_mtc_rsp_type;
+
+/*============================================================*/
+
+typedef struct 
+{
+	mtc_scrn_id_type id;		       /* lcd id: MAIN, SUB */
+	int width_max;				/* max width in current rotation mode */
+	int height_max;				/* max height in current rotation mode */
+	int degrees;				       /* LCD degrees of rotation: 0, 90, 180 */
+	mtc_bits_pixel_type bits_pixel;  /* Color Bit: 16, 18 */
+	mtc_mask_type mask;			/* Color mask: R, G, B */
+}mtc_lcd_info_type;
+
+typedef struct 
+{
+	int start_x;                   /* Start X-Coord for capture area */
+	int start_y;                   /* Start Y- Coord for capture area */
+	int width;                     /* Width of the capture area */
+	int height;                   /* Height of the capture area */
+}mtc_capture_type;
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+/*=================================================*/
+
+#endif
+#endif /* __MTK_TARGET__ */
+
diff --git a/mcu/custom/protocol/common/atci/include/rmmi_custom_inc.h b/mcu/custom/protocol/common/atci/include/rmmi_custom_inc.h
new file mode 100644
index 0000000..017469d
--- /dev/null
+++ b/mcu/custom/protocol/common/atci/include/rmmi_custom_inc.h
@@ -0,0 +1,186 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *  RMMI_CUSTOM_INC.H
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#if defined(__TC01__) /* at%ltecall */
+#include "l4c2rac_struct.h"
+#endif
+
+#if defined(__MTK_TARGET__)  
+#include "kal_general_types.h"
+#include "rmmi_context.h"
+
+
+/* l1audio driver function is only built on target load */
+extern kal_bool AcousticLoopbackStatus(void);
+extern void AcousticLoopbackOn(void);
+extern void AcousticLoopbackOff(void);
+extern void AcousticLoopbackLength (kal_uint32 u4Length);
+#else 
+/* Dummy functions for simulator */
+#define  AcousticLoopbackStatus(void) NULL
+#define  AcousticLoopbackOn(void) NULL
+#define  AcousticLoopbackOff(void) NULL
+#define  AcousticLoopbackLength(u4Length) NULL
+#endif
+
+#ifdef __TC01__
+//AT_FRST
+typedef enum{
+    RMMI_CUSTOM_FRST_NONE,
+	RMMI_CUSTOM_FRST_FROM_MTC,
+	RMMI_CUSTOM_FRST_FROM_FRST
+} rmmi_custom_frst_cmd_enum;
+extern kal_uint16 rmmi_fast_string_print_custom(kal_uint8 * buff_ptr, kal_uint8 * fmt, void * arg_list [ ], kal_uint8 nos_arg);
+/* AT%LTECALL */
+extern custom_factory_band_context_struct *cust_fac_ptr_global;
+extern rat_enum l4c_get_factory_rat_mode(void);
+/* AT%LTECALL */
+#endif
+
+extern void ws_key_event_notification(kal_uint8 key_code ,kal_uint8 key_type,kal_uint32 time_stamp);
+extern void ws_output_screen_capture_info(kal_uint8* screen_capture_buf,kal_uint32 length);
+
+extern void rmmi_mtc_hdlr(rmmi_string_struct *source_string_ptr);
+extern void rmmi_bt_test_mode_req(kal_uint8 mode,kal_uint8* bd_addr);
+extern void rmmi_ecall_result_rrsp(kal_uint8 src_id,kal_bool result); //mtk01616_100317
+extern void rmmi_bttm_result_rrsp(kal_uint8 src_id,kal_bool result);
+
+#define rmmi_output_screen_capture_info ws_output_screen_capture_info
+
+extern kal_uint8 * get_LCD_buffer(kal_uint8 screen_id);
+
diff --git a/mcu/custom/protocol/common/atci/include/rmmi_msgbased_at.h b/mcu/custom/protocol/common/atci/include/rmmi_msgbased_at.h
new file mode 100644
index 0000000..d4b0864
--- /dev/null
+++ b/mcu/custom/protocol/common/atci/include/rmmi_msgbased_at.h
@@ -0,0 +1,105 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * RMMI_MSGBASED_AT.C
+ *
+ * Project:
+ * --------
+ *   
+ *
+ * Description:
+ * ------------
+ *   This file is intended to handle the message based AT APIs
+ *
+ * Author:
+ * -------
+ * -------
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!! 
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!! 
+ *==============================================================================
+ *****************************************************************************/
+
+#ifndef _RMMI_MSGBASED_AT_C_
+#define _RMMI_MSGBASED_AT_C_
+#if defined(__MESSAGE_BASED_AT_SUPPORT__)
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "kal_public_defs.h" //MSBB change #include "stack_msgs.h"
+#include "kal_public_defs.h" //MSBB change #include "stack_config.h"
+#include "sysconf_statistics.h"
+
+
+//mtk02514_zte
+
+
+extern kal_uint8 rmmi_msgbased_cid_2_srcid(kal_uint8 cid);
+extern kal_uint8 rmmi_msgbased_srcid_2_cid(kal_uint8 src_id);
+extern kal_uint8 rmmi_msgbased_cid_2_port(kal_uint8 cid);
+extern kal_uint8 rmmi_msgbased_port_2_cid(kal_uint8 port);
+
+extern kal_bool rmmi_msgbased_is_valid_src(kal_uint8 src_id);
+
+extern void rmmi_msgbased_write_urc(kal_uint8 *buffer, kal_uint16 length, kal_bool stuff);
+extern void rmmi_msgbased_write_response(kal_uint8 *buffer, kal_uint16 length, kal_bool stuff, kal_uint8 src_id);
+
+
+#endif /* __MESSAGE_BASED_AT_SUPPORT__ */
+#endif /*_RMMI_MSGBASED_AT_C_*/
+
diff --git a/mcu/custom/protocol/common/atci/src/rmmi_msgbased_at.c b/mcu/custom/protocol/common/atci/src/rmmi_msgbased_at.c
new file mode 100644
index 0000000..fca7ee5
--- /dev/null
+++ b/mcu/custom/protocol/common/atci/src/rmmi_msgbased_at.c
@@ -0,0 +1,1010 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * RMMI_MSGBASED_AT.C
+ *
+ * Project:
+ * --------
+ *   
+ *
+ * Description:
+ * ------------
+ *   This file is intended to handle the message based AT APIs
+ *
+ * Author:
+ * -------
+ * -------
+ *****************************************************************************/
+//mtk02514_zte
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "kal_public_defs.h" //MSBB change #include "stack_common.h"
+#include "kal_public_api.h"
+#include "sysconf_statistics.h"
+#include "task_config.h"
+#include "kal_trace.h"
+#include "ps_public_l4_msgid.h"
+#include "tst_sap.h"
+
+#if defined(__MESSAGE_BASED_AT_SUPPORT__) 
+
+#include "rmmi_common_enum.h"
+#include "l4c_common_enum.h"
+
+#include "rmmi_msghdlr.h"
+#include "rmmi_utility.h"
+#include "rmmi_struct.h"
+#include "tst_msgid.h"
+
+#include "rmmi_msgbased_at.h"
+
+#define TP_PS_NDEBUG 1
+
+#if TP_PS_NDEBUG
+#define kal_prompt_trace(...)
+#endif
+
+// ATCI messge based AT command relative definition
+#define RMMI_MSG_BASED_CUSTOM_AT_CHANNEL   20   // This value could not exceed 20
+#define RMMI_MSG_BASED_URC_CHANNEL     0
+#define RMMI_MSG_BASED_PORT_BEGIN   100
+#define RMMI_MSG_BASED_REQUEST_MODULE   MOD_MMI
+#define RMMI_MSG_BASED_HANDLER_MODULE   MOD_ATCI
+#define RMMI_MSG_BASED_CHANNEL_OFFSET   10
+
+#define RMMI_MSGBASED_CR  0x0d
+#define RMMI_MSGBASED_LF  0x0a
+#define RMMI_MSGBASED_ESC  0x1b
+#define RMMI_MSGBASED_CTRLZ  0x1a
+
+typedef enum
+{
+    RMMI_MSGBASED_RESPONSE,
+    RMMI_MSGBASED_URC
+} rmmi_msgbased_ind_type;
+
+
+kal_uint8 rmmi_msgbased_port[RMMI_MSG_BASED_CUSTOM_AT_CHANNEL];
+kal_uint8 rmmi_msgbased_src[RMMI_MSG_BASED_CUSTOM_AT_CHANNEL];
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_msgbased_send_ilm
+ * DESCRIPTION
+ *  This function is used to send ILM to dest_id using the msg_id with data local_param_ptr and peer_buf_ptr
+ *
+ * PARAMETERS
+ *  dest_id             [IN]
+ *  msg_id              [IN]
+ *  local_param_ptr  [IN]
+ *  peer_buf_ptr        [IN]
+ *
+ * RETURNS
+ *  void
+ *****************************************************************************/
+static void rmmi_msgbased_send_ilm(module_type dest_id, kal_uint16 msg_id, void *local_param_ptr, void *peer_buf_ptr)
+{
+    module_type module = stack_get_active_module_id();
+    
+
+    msg_send6(module, dest_id, ATCI_SAP, (msg_type)msg_id, (local_para_struct *) local_param_ptr, (peer_buff_struct*) peer_buf_ptr);
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_msgbased_write_data
+ * DESCRIPTION
+ *  This function is used to send AT data back to the task who register channels
+ *
+ * PARAMETERS
+ *  buffer             [IN]         output data
+ *  length             [IN]         the length of output data
+ *  stuff               [IN]        if we need to add <CR><LF> to the header and tailer or not
+ *  src_id              [IN]        the output source ID
+ *  type                [IN]        output is URC or response
+ *
+ * RETURNS
+ *  void
+ *****************************************************************************/
+static void rmmi_msgbased_write_data(kal_uint8 *buffer, kal_uint16 length, kal_bool stuff, kal_uint8 src_id, rmmi_msgbased_ind_type type)
+{
+    kal_uint16 pdu_len, tmp_len;
+    peer_buff_struct *peer_ptr;
+    kal_uint8 *data, offset, port;
+    rmmi_response_at_ind_struct *resposne_ptr;
+    rmmi_urc_at_ind_struct *urc_ptr;
+    void *local_ptr;
+    msg_type msg;
+
+    peer_ptr = (peer_buff_struct*) construct_peer_buff(length+5, 0, 0, TD_RESET); // +5: <CR>*2,<LF>*2,'\0'*1
+    data = (kal_uint8 *)get_peer_buff_pdu(peer_ptr, &pdu_len);
+    port = rmmi_msgbased_cid_2_port(rmmi_msgbased_srcid_2_cid(src_id));
+
+    tmp_len = length;
+    if (stuff == KAL_TRUE)
+    {
+        offset = 2;
+        data[0] = RMMI_MSGBASED_CR;
+        data[1] = RMMI_MSGBASED_LF;
+        data[length+offset] = RMMI_MSGBASED_CR;
+        data[length+offset+1] = RMMI_MSGBASED_LF;
+        data[length+offset+2] = '\0';
+
+        length += 4;
+    }
+    else
+    {
+        offset = 0;
+        data[length] = '\0';
+    }
+    kal_mem_cpy(data+offset, buffer, tmp_len);
+
+    if (type == RMMI_MSGBASED_RESPONSE)
+    {
+        resposne_ptr = (rmmi_response_at_ind_struct*)
+                construct_local_para((kal_uint16) sizeof(rmmi_response_at_ind_struct), TD_RESET);
+        resposne_ptr->length = length;
+        resposne_ptr->port_id = port;
+
+        local_ptr = resposne_ptr;
+        msg = MSG_ID_RMMI_RESPONSE_AT_IND;
+    }
+    else
+    {
+        urc_ptr = (rmmi_urc_at_ind_struct*)
+                construct_local_para((kal_uint16) sizeof(rmmi_urc_at_ind_struct), TD_RESET);
+        urc_ptr->length = length;
+
+        local_ptr = urc_ptr;
+        msg = MSG_ID_RMMI_URC_AT_IND;
+    }
+
+    rmmi_msgbased_send_ilm(
+            RMMI_MSG_BASED_REQUEST_MODULE, 
+            msg, local_ptr, peer_ptr);
+    
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_msgbased_write_urc
+ * DESCRIPTION
+ *  This function is used to send AT URC back to the task who register channels
+ *
+ * PARAMETERS
+ *  buffer             [IN]         output data
+ *  length             [IN]         the length of output data
+ *  stuff               [IN]        if we need to add <CR><LF> to the header and tailer or not
+ *
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_msgbased_write_urc(kal_uint8 *buffer, kal_uint16 length, kal_bool stuff)
+{
+    rmmi_msgbased_write_data(buffer, length, stuff, 0xff, RMMI_MSGBASED_URC);
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_msgbased_write_response
+ * DESCRIPTION
+ *  This function is used to send AT response back to the task who register channels
+ *
+ * PARAMETERS
+ *  buffer             [IN]         output data
+ *  length             [IN]         the length of output data
+ *  stuff               [IN]        if we need to add <CR><LF> to the header and tailer or not
+ *  src_id              [IN]        the output source ID
+ *
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_msgbased_write_response(kal_uint8 *buffer, kal_uint16 length, kal_bool stuff, kal_uint8 src_id)
+{
+    rmmi_msgbased_write_data(buffer, length, stuff, src_id, RMMI_MSGBASED_RESPONSE);
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_msgbased_cid_2_srcid
+ * DESCRIPTION
+ *  This function is used to transfer from channel ID to source ID by table lookup
+ *  The source ID begins from RMMI_MSG_AT_SRC
+ *  If we could not find the source ID, we will return INVALID_SRC
+ * PARAMETERS
+ *  cid     [IN]        
+ * RETURNS
+ *  source ID
+ *****************************************************************************/
+kal_uint8 rmmi_msgbased_cid_2_srcid(kal_uint8 cid)
+{
+    cid -= RMMI_MSG_BASED_CHANNEL_OFFSET;
+    if (cid >= RMMI_MSG_BASED_CUSTOM_AT_CHANNEL)
+        return INVALID_SRC;
+    else
+        return rmmi_msgbased_src[cid];
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_msgbased_srcid_2_cid
+ * DESCRIPTION
+ * This function is used to transfer source id to channel id
+ * The channel ID is begin from RMMI_MSG_BASED_CHANNEL_OFFSET
+ * If we could not find the channel ID, we will return 0xff
+ * PARAMETERS
+ *  src_id      [IN]        
+ * RETURNS
+ *  channel ID
+ *****************************************************************************/
+kal_uint8 rmmi_msgbased_srcid_2_cid(kal_uint8 src_id)
+{
+    kal_uint8 cid;
+
+    for (cid = 0; cid < RMMI_MSG_BASED_CUSTOM_AT_CHANNEL; cid++)
+    {
+        if (rmmi_msgbased_src[cid] == src_id)
+        {
+            return cid+RMMI_MSG_BASED_CHANNEL_OFFSET;
+        }
+    }
+    return 0xff;
+    
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_msgbased_cid_2_port
+ * DESCRIPTION
+ *  This function is used to transfer from channel ID to port ID by table lookup
+ *  The port ID begins from RMMI_MSG_BASED_PORT_BEGIN
+ *  If we could not find the port ID, we will return uart_port_null
+ * PARAMETERS
+ *  cid     [IN]        
+ * RETURNS
+ *  port ID
+ *****************************************************************************/
+kal_uint8 rmmi_msgbased_cid_2_port(kal_uint8 cid)
+{
+    cid-=RMMI_MSG_BASED_CHANNEL_OFFSET;
+    if (cid >= RMMI_MSG_BASED_CUSTOM_AT_CHANNEL)
+        return uart_port_null;
+    else
+        return rmmi_msgbased_port[cid];
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_msgbased_port_2_cid
+ * DESCRIPTION
+ *   This function is used to transfer port id to channel id
+ *   The channel ID is begin from RMMI_MSG_BASED_CHANNEL_OFFSET
+ *   If we could not find the channel ID, we will return 0xff
+ * PARAMETERS
+ *  port        [IN]        
+ * RETURNS
+ *  channel ID
+ *****************************************************************************/
+kal_uint8 rmmi_msgbased_port_2_cid(kal_uint8 port)
+{
+    kal_uint8 cid;
+
+    for (cid = 0; cid < RMMI_MSG_BASED_CUSTOM_AT_CHANNEL; cid++)
+    {
+        if (rmmi_msgbased_port[cid] == port)
+        {
+            return cid+RMMI_MSG_BASED_CHANNEL_OFFSET;
+        }
+    }
+    return 0xff;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_msgbased_is_valid_src
+ * DESCRIPTION
+ *   This function is used to judge if the input src_id is a valid ID for "message based AT ocmmand" or not
+ * PARAMETERS
+ *  src_id        [IN]        
+ * RETURNS
+ *  KAL_TRUE or KAL_FALSE
+ *****************************************************************************/
+kal_bool rmmi_msgbased_is_valid_src(kal_uint8 src_id)
+{
+    kal_uint8 cid;
+
+    cid = rmmi_msgbased_srcid_2_cid(src_id);
+    return cid == 0xff ? KAL_FALSE : KAL_TRUE;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_msgbased_register_channel
+ * DESCRIPTION
+ *   This function is used to init source/port mapping accroding the ch_num
+ * PARAMETERS
+ *  ch_num        [IN]        
+ * RETURNS
+ *  RMMI_MSG_BASED_PORT_BEGIN
+ *****************************************************************************/
+kal_uint8 rmmi_msgbased_register_channel(kal_uint8 ch_num)
+{
+    kal_uint8 i, src;
+    
+    src = RMMI_MSG_AT_SRC;
+    for (i=0; i<ch_num; i++)
+    {
+        kal_prompt_trace(
+            stack_get_active_module_id(), 
+            "[Reg] Register channel(%d): source: %d, port: %d",
+            i, src, RMMI_MSG_BASED_PORT_BEGIN+i);
+
+        rmmi_msgbased_port[i] = RMMI_MSG_BASED_PORT_BEGIN + i;
+        rmmi_msgbased_src[i] = src++;
+    }
+
+    return RMMI_MSG_BASED_PORT_BEGIN;
+}
+
+/*****************
+* The following is for ZTE
+******************/
+
+#define MAX_TP_QUEUE_LENGTH     2048
+#define MAX_TP_URC_BUFFER_LENGTH    2048
+
+typedef kal_int32 (*PS_CALLBACK) (kal_uint8  channelId, kal_char *buf, kal_uint16 iDataLen, kal_uint8  iFlag);
+
+typedef struct
+{
+    kal_uint16 length;
+    kal_char data[MAX_TP_QUEUE_LENGTH];
+    kal_bool is_sms_cmd;
+} tp_queue_struct;
+
+typedef enum
+{
+    TP_ERROR = -1,
+    TP_SUCCESS
+} tp_result;
+
+/* If you want to modify the number of channels,
+    Please modify the constant RMMI_MSG_BASED_CUSTOM_AT_CHANNEL
+    But our modem could only support max 20 channels
+*/
+tp_queue_struct tp_buffer[RMMI_MSG_BASED_CUSTOM_AT_CHANNEL];
+
+PS_CALLBACK tp_callback = NULL;
+
+kal_int32 tp_port_begin = -1;
+kal_int8 tp_channelNum = 0;
+
+kal_char tp_urc_buffer[MAX_TP_URC_BUFFER_LENGTH];
+kal_uint16 tp_urc_buffer_len = 0;
+
+/*****************************************************************************
+ * FUNCTION
+ *  tp_ps_start
+ * DESCRIPTION
+ *  This function is used to start message based AT command mechanism by customer
+ *
+ * PARAMETERS
+ *  buffer             [IN]         output data
+ *
+ * RETURNS
+ *  TP_SUCCESS or TP_ERROR
+ *****************************************************************************/
+kal_int32 tp_ps_start(kal_int8 channelNum) 
+{
+    kal_uint8 i;
+    rmmi_register_channel_req_struct *req_ptr;
+    
+    if(channelNum > RMMI_MSG_BASED_CUSTOM_AT_CHANNEL)
+    {
+        kal_prompt_trace(
+            stack_get_active_module_id(), 
+            "[Start] Register channel number(%d) is larger than the maximum supported number: %d",
+            channelNum, RMMI_MSG_BASED_CUSTOM_AT_CHANNEL);
+        return TP_ERROR;
+    }
+    else if (tp_channelNum != 0)
+    {
+        kal_prompt_trace(
+            stack_get_active_module_id(), 
+            "[Start] We have already been started");
+        return TP_ERROR;
+    }
+
+    tp_channelNum = channelNum;
+
+    //init buffers
+    for(i=0; i<channelNum; i++)
+    {
+        tp_buffer[i].length = 0;
+        tp_buffer[i].data[0] = '\0';
+        tp_buffer[i].is_sms_cmd = KAL_FALSE;
+    }
+
+    //send MSG_ID_ATCI_REGISTER_CHANNEL_REQ
+    req_ptr =  (rmmi_register_channel_req_struct*)
+            construct_local_para((kal_uint16) sizeof(rmmi_register_channel_req_struct), TD_RESET);
+
+    req_ptr->ch_num = channelNum;
+
+    rmmi_msgbased_send_ilm(
+            RMMI_MSG_BASED_HANDLER_MODULE, 
+            MSG_ID_RMMI_REGISTER_CHANNEL_REQ, 
+            req_ptr, NULL);
+
+    return TP_SUCCESS;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  tp_ps_reg_callback
+ * DESCRIPTION
+ *  This function is used to callback function which is used to send AT data back to register
+ *
+ * PARAMETERS
+ *  callback_func             [IN]         
+ *
+ * RETURNS
+ *  TP_SUCCESS or TP_ERROR
+ *****************************************************************************/
+kal_int32 tp_ps_reg_callback(PS_CALLBACK callback_func)
+{
+    tp_callback = callback_func;
+
+    if ( !(tp_callback == NULL || tp_port_begin == -1))
+    {
+        if (tp_urc_buffer_len > 0)
+        {
+            tp_callback(
+                    RMMI_MSG_BASED_URC_CHANNEL, 
+                    tp_urc_buffer, 
+                    tp_urc_buffer_len, 1);
+        }
+    }
+
+    return TP_SUCCESS;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  tp_ps_Send
+ * DESCRIPTION
+ *  This function is used to send AT command to MOD_ATCI
+ *  Return success means that the command is sent, not the command is executed successfully
+ * PARAMETERS
+ *  iFlag             [IN]              always be 1
+ *  channelId             [IN]       
+ *  pDataPtr             [IN]          
+ *  iDataLen             [IN]          
+ *
+ * RETURNS
+ *  TP_SUCCESS or TP_ERROR
+ *****************************************************************************/
+kal_int32 tp_ps_Send(kal_uint8 iFlag, kal_uint8  channelId, kal_uint8 *pDataPtr, kal_uint16 iDataLen) 
+{
+    kal_uint16 i;
+    kal_int32 result = TP_ERROR;
+    module_type type;
+    tp_queue_struct *buffer;
+    rmmi_exe_at_req_struct *req_ptr;
+    peer_buff_struct *peer_ptr;
+    kal_uint8 *data_ptr;
+    kal_uint8 cmd_string[10];
+    kal_char input_hint_string[] = "\r\n> ";
+
+    type = stack_get_active_module_id();
+    if (iFlag != 1)
+    {
+        kal_prompt_trace(
+                type,
+                "[Send] Warning: iFlag shoulbe be 1: %d", iFlag);
+    }
+
+    if (tp_port_begin == -1)
+    {
+        kal_prompt_trace(
+                type,
+                "[Send] ERROR: havn't start PS, please call tp_ps_start first");
+    }
+    else if(pDataPtr == NULL)
+    {
+        kal_prompt_trace(
+                type,
+                "[Send] ERROR: input data pointer is NULL!!!");
+    }        
+    else if (tp_callback == NULL)
+    {
+        kal_prompt_trace(
+                type,
+                "[Send] ERROR: havn't register TP callback function");
+    }
+    else if(channelId >= tp_channelNum)
+    {
+        kal_prompt_trace(
+                type,
+                "[Send] ERROR: invalid channelID: ch:%d, max:%d ", channelId, tp_channelNum);
+    }
+    else
+    {
+        buffer = &tp_buffer[channelId];
+
+        if ( (buffer->length + iDataLen) > MAX_TP_QUEUE_LENGTH)
+        {
+            kal_prompt_trace(
+                    type,
+                    "[Send] ERROR: buffer[%d] is full, clean the buffer!!! Org:%d, New:%d, Max: %d", 
+                    channelId, buffer->length, iDataLen, 
+                    MAX_TP_QUEUE_LENGTH);
+            buffer->length = 0;
+            buffer->is_sms_cmd = KAL_FALSE;
+        }
+        else
+        {
+            result = TP_SUCCESS;
+            
+            //Put the data into the buffer
+            kal_mem_cpy(buffer->data+buffer->length, pDataPtr, iDataLen);
+
+            //Update buffer length
+            buffer->length += iDataLen;
+
+            //check if the data is a complete command according to the <CR><LF>
+            for(i=0; i<buffer->length;i++)
+            {
+                if (buffer->is_sms_cmd == KAL_FALSE &&
+                    (buffer->data[i] == RMMI_MSGBASED_CR || buffer->data[i] == RMMI_MSGBASED_LF) )
+                {
+                    kal_mem_cpy(cmd_string, buffer->data, 10);
+                    toUpper(cmd_string);
+                    if (is_sms_command(cmd_string, 10) == KAL_TRUE)
+                    {
+                        buffer->is_sms_cmd = KAL_TRUE;
+
+                        // send hint string
+                        tp_callback(channelId, input_hint_string, strlen(input_hint_string), 1);
+                        buffer->data[i] = RMMI_MSGBASED_LF;
+
+                        kal_prompt_trace(
+                            type,
+                            "[Send] INFO: Enter SMS input mode");
+                    }
+                    break;
+                }
+                else if (buffer->is_sms_cmd == KAL_TRUE &&
+                    (buffer->data[i] == RMMI_MSGBASED_CTRLZ || buffer->data[i] == RMMI_MSGBASED_ESC) )
+                {
+                    kal_prompt_trace(
+                            type,
+                            "[Send] INFO: Leave SMS input mode");
+
+                    buffer->is_sms_cmd = KAL_FALSE;
+
+                    if (buffer->data[i] == RMMI_MSGBASED_ESC)
+                    {
+                        tp_callback(channelId, "\r\nOK\r\n", 6, 1);
+                        //clean the buffer
+                        buffer->length = 0;
+                        return;
+                    }
+                    break;
+                }
+            }
+
+            
+            if (i != buffer->length)
+            {
+                if (buffer->is_sms_cmd == KAL_TRUE)
+                {
+                    kal_prompt_trace(
+                        type,
+                        "[Send] INFO: in SMS input mode, length: %d", 
+                        buffer->length);
+                }
+                else
+                {
+                    // send the command
+                    req_ptr = (rmmi_exe_at_req_struct*)
+                            construct_local_para((kal_uint16) sizeof(rmmi_exe_at_req_struct), TD_RESET);
+                    peer_ptr = (peer_buff_struct*) construct_peer_buff(buffer->length, 0, 0, TD_RESET);
+                    data_ptr= (kal_uint8 *)get_peer_buff_pdu(peer_ptr, &i);
+
+                    req_ptr->length = buffer->length;
+                    req_ptr->port_id = channelId + tp_port_begin;
+
+                    kal_mem_cpy(data_ptr, buffer->data, buffer->length);
+
+                    rmmi_msgbased_send_ilm(
+                            RMMI_MSG_BASED_HANDLER_MODULE, 
+                            MSG_ID_RMMI_EXE_AT_REQ,
+                            req_ptr, peer_ptr);
+
+                    //clean the buffer
+                    buffer->length = 0;
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  tp_ps_test_callback
+ * DESCRIPTION
+ *  This function is the test purpose callback function for testing
+ *
+ * PARAMETERS
+ *  channelId             [IN]              always be 1
+ *  buf             [IN]       
+ *  iDataLen             [IN]          
+ *  iFlag             [IN]          
+ *
+ * RETURNS
+ *  TP_SUCCESS or TP_ERROR
+ *****************************************************************************/
+static kal_int32 tp_ps_test_callback(kal_uint8  channelId, kal_char *buf, kal_uint16 iDataLen, kal_uint8  iFlag)
+{
+    /*This function is used to test the tp ps functions*/
+    module_type type;
+
+    type = stack_get_active_module_id();
+    
+    kal_prompt_trace(
+            type, 
+            "[Callback] Ch: %d, length: %d, flag: %d, buf:%s", 
+            channelId, iDataLen, iFlag, buf);
+
+    return 0;
+}
+
+/******************************************
+* the following is used to handle the primitives from ATCI *
+*******************************************/
+/*****************************************************************************
+ * FUNCTION
+ *  tp_ps_register_channel_cnf_hdlr
+ * DESCRIPTION
+ *  This function is used to handle the message MSG_ID_RMMI_REGISTER_CHANNEL_CNF
+ *
+ * PARAMETERS
+ *  local_para_ptr             [IN]              
+ *  peer_buff_ptr             [IN]       
+ *
+ * RETURNS
+ * void
+ *****************************************************************************/
+static void tp_ps_register_channel_cnf_hdlr(local_para_struct *local_para_ptr, peer_buff_struct *peer_buff_ptr)
+{
+    rmmi_register_channel_cnf_struct *cnf_ptr;
+
+    cnf_ptr = (rmmi_register_channel_cnf_struct*) local_para_ptr;
+    tp_port_begin = cnf_ptr->begin_port_id;
+    
+    kal_prompt_trace(
+            stack_get_active_module_id(),
+            "[Hdlr] Receive register channel confirm, result:%d, begin_port:%d", 
+            cnf_ptr->result, tp_port_begin);
+
+    if ( !(tp_callback == NULL || tp_port_begin == -1))
+    {
+        if (tp_urc_buffer_len > 0)
+        {
+            tp_callback(
+                    RMMI_MSG_BASED_URC_CHANNEL, 
+                    tp_urc_buffer, 
+                    tp_urc_buffer_len, 1);
+        }
+    }
+
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  tp_ps_exe_at_cnf_hdlr
+ * DESCRIPTION
+ *  This function is used to handle the message MSG_ID_RMMI_EXE_AT_CNF
+ *
+ * PARAMETERS
+ *  local_para_ptr             [IN]              
+ *  peer_buff_ptr             [IN]       
+ *
+ * RETURNS
+ * void
+ *****************************************************************************/
+static void tp_ps_exe_at_cnf_hdlr(local_para_struct *local_para_ptr, peer_buff_struct *peer_buff_ptr)
+{
+    rmmi_exe_at_cnf_struct *cnf_ptr;
+    
+    cnf_ptr = (rmmi_exe_at_cnf_struct*) local_para_ptr;
+    
+    kal_prompt_trace(
+            stack_get_active_module_id(),
+            "[Hdlr] ATCI has received the request, result:%d, from port:%d", 
+            cnf_ptr->result, cnf_ptr->port_id);
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  tp_ps_handling_at_indication
+ * DESCRIPTION
+ *  This function is used to handle the response/URC data from MOD_ATCI
+ *
+ * PARAMETERS
+ *  channelId             [IN]              
+ *  buf             [IN]       
+ *  iDataLen        [IN]       
+ *
+ * RETURNS
+ * void
+ *****************************************************************************/
+static void tp_ps_handling_at_indication(kal_uint8  channelId, kal_char *buf, kal_uint16 iDataLen)
+{
+    kal_char *data;
+    
+    if (tp_callback == NULL || tp_port_begin == -1)
+    {
+        if (tp_callback == NULL)
+        {
+            kal_prompt_trace(
+                    stack_get_active_module_id(),
+                    "[Hdlr] ERROR: havn't register TP callback function");
+        }
+        else if (tp_port_begin == -1)
+        {
+            kal_prompt_trace(
+                    stack_get_active_module_id(),
+                    "[Hdlr] ERROR: havn't start PS, please call tp_ps_start first");
+        }
+
+        // buffer the URC
+        if (channelId == RMMI_MSG_BASED_URC_CHANNEL)
+        {
+            kal_prompt_trace(
+                    stack_get_active_module_id(),
+                    "[Hdlr] Buffer the URC: %s", buf);
+            if ( (tp_urc_buffer_len + iDataLen) > MAX_TP_URC_BUFFER_LENGTH)
+            {
+                kal_prompt_trace(
+                    stack_get_active_module_id(),
+                    "[Hdlr] URC buffer is full, clean the buffer", buf);
+
+                tp_urc_buffer_len = 0;
+            }
+            
+            if (iDataLen > MAX_TP_URC_BUFFER_LENGTH)
+            {
+               kal_prompt_trace(
+                    stack_get_active_module_id(),
+                    "[Hdlr] ERROR: the URC is too large, please increase the URC buffer");
+            }
+            else
+            {
+                kal_mem_cpy(tp_urc_buffer+tp_urc_buffer_len, buf, iDataLen);
+                tp_urc_buffer_len += iDataLen;
+            }
+        }
+    }
+    else
+    {
+
+        data = get_ctrl_buffer(iDataLen);
+        kal_mem_cpy(data, buf, iDataLen);
+        
+        tp_callback(channelId, data, iDataLen, 1);
+        
+        free_ctrl_buffer(data);
+    }
+
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  tp_ps_response_at_ind_hdlr
+ * DESCRIPTION
+ *  This function is used to handle the message MSG_ID_RMMI_RESPONSE_AT_IND
+ *
+ * PARAMETERS
+ *  local_para_ptr             [IN]              
+ *  peer_buff_ptr             [IN]       
+ *
+ * RETURNS
+ * void
+ *****************************************************************************/
+static void tp_ps_response_at_ind_hdlr(local_para_struct *local_para_ptr, peer_buff_struct *peer_buff_ptr)
+{
+    rmmi_response_at_ind_struct *cnf_ptr;
+    kal_uint16 data_length;
+    kal_char *pdu_ptr;
+    
+    cnf_ptr = (rmmi_response_at_ind_struct*) local_para_ptr;
+    pdu_ptr = (kal_char*) get_peer_buff_pdu(peer_buff_ptr, &data_length);
+
+    tp_ps_handling_at_indication(
+        cnf_ptr->port_id - tp_port_begin, 
+        pdu_ptr, 
+        cnf_ptr->length);
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  tp_ps_urc_at_ind_hdlr
+ * DESCRIPTION
+ *  This function is used to handle the message MSG_ID_RMMI_URC_AT_IND
+ *
+ * PARAMETERS
+ *  local_para_ptr             [IN]              
+ *  peer_buff_ptr             [IN]       
+ *
+ * RETURNS
+ * void
+ *****************************************************************************/
+static void tp_ps_urc_at_ind_hdlr(local_para_struct *local_para_ptr, peer_buff_struct *peer_buff_ptr)
+{
+    rmmi_urc_at_ind_struct *cnf_ptr;
+    kal_uint16 data_length;
+    kal_char *pdu_ptr;
+    
+    cnf_ptr = (rmmi_urc_at_ind_struct*) local_para_ptr;
+    pdu_ptr = (kal_char*) get_peer_buff_pdu(peer_buff_ptr, &data_length);
+
+    tp_ps_handling_at_indication(
+        RMMI_MSG_BASED_URC_CHANNEL, 
+        pdu_ptr, 
+        cnf_ptr->length);
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  tp_ps_urc_at_ind_hdlr
+ * DESCRIPTION
+ *  This function is used to handle the message relative to message based AT command mechanism
+ *
+ * PARAMETERS
+ *  ilm_ptr             [IN]              
+ *
+ * RETURNS
+ * void
+ *****************************************************************************/
+void tp_ps_message_handler(ilm_struct *ilm_ptr)
+{
+    kal_prompt_trace(MOD_ATCI, "Enter TP Handler");
+    if (ilm_ptr->msg_id == MSG_ID_RMMI_REGISTER_CHANNEL_CNF)
+    {
+        tp_ps_register_channel_cnf_hdlr(ilm_ptr->local_para_ptr, ilm_ptr->peer_buff_ptr);
+    }
+    else if (ilm_ptr->msg_id == MSG_ID_RMMI_EXE_AT_CNF)
+    {
+        tp_ps_exe_at_cnf_hdlr(ilm_ptr->local_para_ptr, ilm_ptr->peer_buff_ptr);
+    }
+    else if (ilm_ptr->msg_id == MSG_ID_RMMI_RESPONSE_AT_IND)
+    {
+        tp_ps_response_at_ind_hdlr(ilm_ptr->local_para_ptr, ilm_ptr->peer_buff_ptr);
+    }
+    else if (ilm_ptr->msg_id == MSG_ID_RMMI_URC_AT_IND)
+    {
+        tp_ps_urc_at_ind_hdlr(ilm_ptr->local_para_ptr, ilm_ptr->peer_buff_ptr);
+    }
+    #ifdef TP_PS_NDEBUG
+
+    else if (ilm_ptr->msg_id == MSG_ID_TST_INJECT_STRING)
+    {
+        kal_int8 num;
+        tst_module_string_inject_struct *msg_ptr;
+        msg_ptr = (tst_module_string_inject_struct*) ilm_ptr->local_para_ptr;
+
+
+        switch(msg_ptr->index)
+        {
+            case 0: //reg_callback
+                tp_ps_reg_callback(tp_ps_test_callback);
+                break;
+            case 1: //start
+                num = atoi((kal_char *)msg_ptr->string);
+                kal_prompt_trace(stack_get_active_module_id(), "NUM: %d", num);
+                tp_ps_start(num);
+                break;
+            case 2: // send
+                tp_ps_Send(1, 0, msg_ptr->string, strlen((kal_char*)msg_ptr->string));
+                break;
+            case 3: // send <CR>
+                tp_ps_Send(1, 0, "\r", 1);
+                break;
+            case 4: // send <CTRL+Z>
+                num = RMMI_MSGBASED_CTRLZ;
+                tp_ps_Send(1, 0, (kal_uint8*) &num, 1);
+                break;
+            case 5: // send <ESC>
+                num = RMMI_MSGBASED_ESC;
+                tp_ps_Send(1, 0, (kal_uint8*) &num, 1);
+                break;
+            case 6: // send with invalid iFlag
+                tp_ps_Send(0, 0, msg_ptr->string, strlen((kal_char*)msg_ptr->string));
+                break;
+            case 7: // send with invalid channel
+                tp_ps_Send(1, 25, msg_ptr->string, strlen((kal_char*)msg_ptr->string));
+                break;
+            case 8: // send with invalid pointer
+                tp_ps_Send(1, 0, NULL, strlen((kal_char*)msg_ptr->string));
+                break;
+            case 9: // send to max channel
+                tp_ps_Send(1, RMMI_MSG_BASED_CUSTOM_AT_CHANNEL-1, msg_ptr->string, strlen((kal_char*)msg_ptr->string));
+                break;
+            case 10: // send <CR>
+                tp_ps_Send(1, RMMI_MSG_BASED_CUSTOM_AT_CHANNEL-1, "\r", 1);
+                break;
+            case 11: // send <CTRL+Z>
+                num = RMMI_MSGBASED_CTRLZ;
+                tp_ps_Send(1, RMMI_MSG_BASED_CUSTOM_AT_CHANNEL-1, (kal_uint8*) &num, 1);
+                break;
+            case 12: // send <ESC>
+                num = RMMI_MSGBASED_ESC;
+                tp_ps_Send(1, RMMI_MSG_BASED_CUSTOM_AT_CHANNEL-1, (kal_uint8*) &num, 1);
+                break;
+            case 13: // send <ESC>
+                tp_ps_Send(1, 0, msg_ptr->string, strlen((kal_char*)msg_ptr->string));
+                tp_ps_Send(1, 0, "\r", 1);
+                break;
+            case 14: // send <ESC>
+                tp_ps_Send(1, RMMI_MSG_BASED_CUSTOM_AT_CHANNEL-1, msg_ptr->string, strlen((kal_char*)msg_ptr->string));
+                tp_ps_Send(1, RMMI_MSG_BASED_CUSTOM_AT_CHANNEL-1, "\r", 1);
+                break;
+
+
+            default:
+                break;
+        }
+        
+    }
+    #endif
+
+}
+
+#endif
+
diff --git a/mcu/custom/protocol/common/atci/src/rmmi_validator_custom_op01.c b/mcu/custom/protocol/common/atci/src/rmmi_validator_custom_op01.c
new file mode 100644
index 0000000..e02b862
--- /dev/null
+++ b/mcu/custom/protocol/common/atci/src/rmmi_validator_custom_op01.c
@@ -0,0 +1,983 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * RMMI_VALIDATOR_CUSTOM_OP01.C
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *   This file is intends for implementing custom commands for some customers
+ *   which should not be released to other customers
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ ****************************************************************************/
+
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include <stdio.h>
+#include <string.h>
+#include "kal_public_api.h" //MSBB change #include "kal_release.h"
+
+#if (!defined(__L1_STANDALONE__) && !defined(__MAUI_BASIC__))
+#include "kal_public_defs.h" //MSBB change #include "stack_msgs.h"
+#include "syscomp_config.h"
+#include "task_config.h"
+#include "stacklib.h"   /* Basic type for dll, evshed, stacktimer */
+
+#include "l4c_common_enum.h"
+
+#ifdef __MOD_SMU__
+#include "sim_common_enums.h"
+#endif /* __MOD_SMU__ */
+#include "rmmi_common_enum.h"
+#include "rmmi_context.h"
+#include "l4c_context.h"
+#include "l3_inc_enums.h"
+#include "l4c_utility.h"
+#include "l4_trc.h"
+#include "l4c_sim_cmd.h"
+#include "ps_public_utility.h"
+#include "gmss_public.h"
+#include "mml1_nvram_def.h"
+
+extern kal_uint16 rmmi_fast_string_print(kal_uint8 *buff_ptr, kal_uint8 *fmt, void *arg_list[], kal_uint8 nos_arg);
+extern kal_uint32 rmmi_int_validator_range_check(
+                    kal_uint8 *error_cause, 
+                    rmmi_string_struct *source_string_ptr, 
+                    kal_uint8 delimiter, 
+                    kal_uint32 max);
+extern void rmmi_final_rsp_generator(kal_uint8 src_id, kal_bool ret_val, kal_uint8 *buffer, kal_uint16 string_length);
+extern kal_bool l4c_nw_get_attach_status_req(kal_uint8 src_id, kal_uint8 type, kal_uint8 *status);
+extern kal_bool l4c_nw_get_class_req(kal_uint8 src_id, kal_uint8 *type);
+extern kal_bool l4c_nw_get_romaing_status_req(kal_uint8 src_id, kal_bool* is_on_hplmn);
+extern kal_bool is_sim_verified(void);
+extern kal_bool l4c_nw_get_rat_mode_req(kal_uint8 src_id, kal_uint8 *rat_mode);
+extern kal_bool l4c_nw_get_prefer_rat_req(kal_uint8 *prefer_rat);
+extern kal_bool l4c_nw_get_romaing_mode_req(kal_uint8 src_id, kal_bool* support_roaming);
+extern kal_bool l4c_nw_set_sysconfig_req(kal_uint8 src_id, 
+                                         kal_uint8 rat_mode, 
+                                         kal_uint8 prefer_rat, 
+                                         kal_bool support_roaming, 
+                                         kal_uint8 mobile_class);
+extern kal_bool l4c_nw_cfun_state_req(kal_uint8 src_id, kal_uint8 cfun_state);
+extern module_type rmmi_current_mod_id;
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_dsci_hdlr
+ * DESCRIPTION
+ *  This function handles the AT^DSCI input String
+ * PARAMETERS
+ *  source_string_ptr       [IN]        At cmd string
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_dsci_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_bool ret_val = KAL_FALSE;
+    kal_uint8 buffer[RMMI_SHORT_RSP_LEN];
+    kal_uint16 string_length = 0;
+
+    if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_OP01_AT_SUPPORT, (rmmi_current_mod_id - MOD_ATCI)))
+    {
+        switch (source_string_ptr->cmd_mode)
+        {
+            case RMMI_READ_MODE: /* AT^DSCI? */
+            {
+                RMMI_PTR->arg_list[0] = (void*)&(RMMI_PTR->op01_report_mode.dsci);
+                string_length = rmmi_fast_string_print(buffer, (kal_uint8*) "^DSCI: %d", RMMI_PTR->arg_list, 1);
+                ret_val = KAL_TRUE;
+                break;
+            }
+            case RMMI_SET_OR_EXECUTE_MODE: /* AT^DSCI=<1 or 0> */
+            {
+                kal_uint8 mode;
+
+                mode = (kal_uint8) rmmi_int_validator_range_check(NULL, 
+                                                                  source_string_ptr, 
+                                                                  (kal_uint8) RMMI_PTR->s_reg.s3,
+                                                                  1);
+                if (mode != RMMI_VALIDATOR_ERROR)
+                {
+                    ret_val = KAL_TRUE;
+                    RMMI_PTR->op01_report_mode.dsci = mode;
+                }
+                break;
+            }
+            default:
+                break;
+        }
+    }
+    rmmi_final_rsp_generator(source_string_ptr->src_id, ret_val, buffer, string_length);
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_mtv_hdlr
+ * DESCRIPTION
+ *  This function handles the AT^MTV input String
+ * PARAMETERS
+ *  source_string_ptr       [IN]        At cmd string
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_mtv_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_bool ret_val = KAL_FALSE;
+    kal_uint8 buffer[RMMI_SHORT_RSP_LEN];
+    kal_uint16 string_length = 0;
+#ifdef __CMMB_SUPPORT__
+    const kal_uint8 mtv_func = 1;
+#else
+    const kal_uint8 mtv_func = 0;
+#endif
+#ifdef __CMMB_CAS_MBBMS_SUPPORT__
+    const kal_uint8 mbbms_func = 1;
+#else
+    const kal_uint8 mbbms_func = 0;
+#endif
+
+    if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_OP01_AT_SUPPORT, (rmmi_current_mod_id - MOD_ATCI)))
+    {
+        switch (source_string_ptr->cmd_mode)
+        {
+            case RMMI_READ_MODE: /* AT^MTV? */
+            {
+    	        RMMI_PTR->arg_list[0] = (void*)&(mtv_func);
+                RMMI_PTR->arg_list[1] = (void*)&(mbbms_func);
+                string_length = rmmi_fast_string_print(buffer, (kal_uint8*) "^MTV: %d, %d", RMMI_PTR->arg_list, 2);
+                ret_val = KAL_TRUE;
+                break;
+            }
+            default:
+                break;
+        }
+    }
+    rmmi_final_rsp_generator(source_string_ptr->src_id, ret_val, buffer, string_length);
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_sysinfo_hdlr
+ * DESCRIPTION
+ * PARAMETERS
+ *  source_string_ptr       [IN]        At cmd string
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_sysinfo_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_bool ret_val = KAL_FALSE;
+    kal_uint8 const *rsp_str = NULL;
+    kal_uint8 buffer[RMMI_SHORT_RSP_LEN];
+    kal_uint16 string_length = 0;    
+	l4c_context_struct *l4c_ptr = L4C_PTR;
+
+    if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_OP01_AT_SUPPORT, (rmmi_current_mod_id - MOD_ATCI)))
+    {
+        switch (source_string_ptr->cmd_mode)
+        {  
+            case RMMI_ACTIVE_MODE:
+            {
+                kal_uint8 cs_service, mobile_class;
+                kal_uint8 srv_status=0, srv_domain=0, roam_status=0, sys_mode=0, sim_state=0,sys_submode=0;
+                kal_bool is_on_hplmn;
+
+                // srv_status
+                l4c_nw_get_attach_status_req(source_string_ptr->src_id, RAC_CS, &cs_service);
+                if (l4c_check_state_is_registered(cs_service) != KAL_TRUE)
+                {
+                    srv_status = 1;
+                }
+                else
+                {
+                    srv_status = 2;            
+                }
+
+                if (l4c_get_cfun_state() != 1)
+                {
+                    srv_status = 0;
+                }
+
+                // srv_domain
+                l4c_nw_get_class_req(source_string_ptr->src_id, &mobile_class);
+                if (mobile_class == 0 || mobile_class == 1) // A , B
+                {
+                    srv_domain = 3;  // CS+PS
+                }
+                else if (mobile_class == 2) // CG
+                {
+                    srv_domain = 2;  // PS only
+                }
+                else if (mobile_class == 3) // CC
+                {
+                    srv_domain = 1;  // CS only
+                }            
+
+                // roam_status
+                l4c_nw_get_romaing_status_req(source_string_ptr->src_id, &is_on_hplmn);
+                roam_status= (is_on_hplmn?0:1);
+
+                // sys_mode
+                switch(RMMI_PTR->cs_register_status.act)
+                {
+                    case 0:
+                    case 1:
+                    case 3:
+                        sys_mode = 3;
+                        break;
+                    case 2:
+                    case 4:
+                    case 5:
+                    case 6:
+                        if(KAL_TRUE == gmss_is_tdscdma_mode_activated(l4c_ptr->cur_sim_slot_id))
+                        {
+                            sys_mode = 15;
+                        }
+                        else
+                        {
+                            sys_mode = 5;
+                        }                
+                        break;
+                    default:
+                        sys_mode = 0;    // keep it as default value
+                        break;
+                }
+
+                // sim_state
+                if (l4c_get_sim_status() == L4C_SIM_INSERTED)
+                {
+                    if (is_sim_verified() == KAL_FALSE)
+                    {
+                        sim_state = 255;
+                    }
+                    else
+                    {
+                        if (srv_status == 2)
+                        {
+                            sim_state = 1;
+                        }
+                        else
+                        {
+                            sim_state = 0;
+                        }
+                    }
+                }
+                else
+                {
+                    sim_state = 255;
+                    roam_status = 0;
+                }
+
+                // sys_submode
+                switch(RMMI_PTR->cs_register_status.act)
+                {
+                    case 0:
+                    case 1:
+                        sys_submode = 2;
+                        break;
+                    case 3:
+                        sys_submode = 3;
+                        break;
+                    case 2:
+                        sys_submode = 4;
+                        break;
+                    case 4:
+                    case 5:
+                    case 6:
+                        if(KAL_TRUE == gmss_is_tdscdma_mode_activated(l4c_ptr->cur_sim_slot_id))
+                        {
+                            sys_submode = 8;
+                        }
+                        else
+                        {
+                            if(RMMI_PTR->cs_register_status.act == 4)
+                            {
+                                sys_submode = 5;
+                            }
+                            else if(RMMI_PTR->cs_register_status.act == 5)
+                            {
+                                sys_submode = 6;
+                            }
+                            else
+                            {
+                                sys_submode = 7;
+                            }
+                        }
+                        break;
+                    default:
+                        break;
+                }
+
+                if (srv_status != 2)
+                {
+                    srv_domain = 0;
+                    roam_status= 0;
+                    sys_mode = 0;
+                    sys_submode = 0;
+                }
+
+                RMMI_PTR->arg_list[0] = (void*)&srv_status;
+                RMMI_PTR->arg_list[1] = (void*)&srv_domain;
+                RMMI_PTR->arg_list[2] = (void*)&roam_status;
+                RMMI_PTR->arg_list[3] = (void*)&sys_mode;
+                RMMI_PTR->arg_list[4] = (void*)&sim_state;
+                RMMI_PTR->arg_list[5] = (void*)&sys_submode;
+                string_length = rmmi_fast_string_print(buffer, (kal_uint8*) "^SYSINFO:%d,%d,%d,%d,%d,,%d", RMMI_PTR->arg_list, 6);
+
+                ret_val = KAL_TRUE;
+                break;
+            }
+            default:
+                break;
+        }
+    }    
+    rsp_str = &buffer[0];    
+    rmmi_final_rsp_generator(source_string_ptr->src_id, ret_val, (kal_uint8*) rsp_str, string_length);
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_sysconfig_hdlr
+ * DESCRIPTION
+ * PARAMETERS
+ *  source_string_ptr       [IN]        At cmd string
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_sysconfig_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_bool ret_val = KAL_FALSE;
+    kal_uint8 error_cause;
+    kal_uint8 const *rsp_str = NULL;
+    kal_uint8 buffer[RMMI_SHORT_RSP_LEN];
+    kal_uint16 string_length = 0;    
+	l4c_context_struct *l4c_ptr = L4C_PTR;
+
+    if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_OP01_AT_SUPPORT, (rmmi_current_mod_id - MOD_ATCI)))
+    {
+        switch (source_string_ptr->cmd_mode)
+        {
+            case RMMI_READ_MODE:
+            {
+                kal_uint8 mode, acqorder, roam, srv_domain;
+                kal_uint8 rat_mode, prefer_rat, mobile_class;
+                kal_bool support_roaming;
+
+                // mode
+                ret_val = l4c_nw_get_rat_mode_req(source_string_ptr->src_id, &rat_mode);
+                if (rat_mode == RAT_GSM)
+                {
+                    mode = 13;
+                }
+                else if (rat_mode == RAT_UMTS)
+                {
+                    if(KAL_TRUE == gmss_is_tdscdma_mode_activated(l4c_ptr->cur_sim_slot_id))
+                    {
+                        mode = 15;
+                    }
+                    else
+                    {
+                        mode = 14;
+                    }
+                }
+                else
+                {
+                    mode = 2;
+                }
+
+                // acqorder
+                ret_val = l4c_nw_get_prefer_rat_req(&prefer_rat);
+                if (prefer_rat == RAT_GSM)
+                {
+                    acqorder = 1;
+                }
+                else if (prefer_rat == RAT_UMTS)
+                {
+                    acqorder = 2;
+                }
+                else
+                {
+                    acqorder = 0;
+                }
+
+                // roam
+                ret_val = l4c_nw_get_romaing_mode_req(source_string_ptr->src_id, &support_roaming);
+                if (support_roaming == KAL_TRUE)
+                {
+                    roam = 1;
+                }
+                else
+                {
+                    roam = 0;
+                }
+
+                // srvdomain
+                ret_val = l4c_nw_get_class_req(source_string_ptr->src_id, &mobile_class);
+                if (mobile_class == 0 || mobile_class == 1) // A , B
+                {
+                    srv_domain = 2;  // CS+PS
+                }
+                else if (mobile_class == 2) // CG
+                {
+                    srv_domain = 1;  // PS only
+                }
+                else if (mobile_class == 3) // CC
+                {
+                    srv_domain = 0;  // CS only
+                }
+                else
+                {
+                    srv_domain = 3; // Any
+                }
+
+                RMMI_PTR->arg_list[0] = (void*)&mode;
+                RMMI_PTR->arg_list[1] = (void*)&acqorder;
+                RMMI_PTR->arg_list[2] = (void*)&roam;
+                RMMI_PTR->arg_list[3] = (void*)&srv_domain;
+                string_length = rmmi_fast_string_print(buffer, (kal_uint8*) "^SYSCONFIG:%d,%d,%d,%d", RMMI_PTR->arg_list, 4);
+
+                ret_val = KAL_TRUE;
+                break;
+            }
+            case RMMI_SET_OR_EXECUTE_MODE:
+            {
+                kal_uint8 mode, acqorder, roam, srv_domain;
+                kal_uint8 rat_mode, prefer_rat, mobile_class;
+                kal_bool support_roaming=KAL_TRUE;
+
+                mode = rmmi_int_validator_range_check(
+                                        &error_cause,
+                                        source_string_ptr,
+                                        (kal_uint8) RMMI_COMMA,
+                                        0xff);
+
+    	        if (error_cause != RMMI_PARSE_OK)
+    	        {
+    		        if (error_cause == RMMI_PARSE_NOT_FOUND)
+    		        {
+    			        mode = 16; // unchanged
+    		        }
+    		        else
+    		        {
+    		  	        break;		  
+    		        }
+    	        }
+                else
+                {
+                    if ((mode == 14)&&(KAL_TRUE == gmss_is_tdscdma_mode_activated(l4c_ptr->cur_sim_slot_id)))
+                    {
+                        break;
+                    }
+                }
+            
+                acqorder = (kal_uint8)rmmi_int_validator_range_check(
+                                        &error_cause,
+                                        source_string_ptr,
+                                        (kal_uint8) RMMI_COMMA,
+                                        3);
+
+    	     if (error_cause != RMMI_PARSE_OK)
+    	     {
+    		  if (error_cause == RMMI_PARSE_NOT_FOUND)
+    		  {
+    			acqorder = 3; // unchanged
+    		  }
+    		  else
+    		  {
+    		  	break;		  
+    		  }
+    	     }
+
+                roam = (kal_uint8)rmmi_int_validator_range_check(
+                                        &error_cause,
+                                        source_string_ptr,
+                                        (kal_uint8) RMMI_COMMA,
+                                        2);
+
+    	     if (error_cause != RMMI_PARSE_OK)
+    	     {
+    		  if (error_cause == RMMI_PARSE_NOT_FOUND)
+    		  {
+    			roam = 2; // unchanged
+    		  }
+    		  else
+    		  {
+    		  	break;		  
+    		  }
+    	     }
+
+                srv_domain = (kal_uint8)rmmi_int_validator_range_check(
+                                        &error_cause,
+                                        source_string_ptr,
+                                        (kal_uint8) RMMI_COMMA,
+                                        4);
+
+    	     if (error_cause != RMMI_PARSE_OK)
+    	     {
+    		  if (error_cause == RMMI_PARSE_NOT_FOUND)
+    		  {
+    			srv_domain = 4; // unchanged
+    		  }
+    		  else
+    		  {
+    		  	break;		  
+    		  }
+    	     }
+
+                // Do nothing if totally unchaged
+                if (mode == 16 && acqorder == 3 && roam ==2 && srv_domain == 4)  
+                {
+                    ret_val = KAL_TRUE;
+                    break;
+                }
+
+                // rat_mode
+                if (mode == 13)
+                {
+                    rat_mode = RAT_GSM;
+                }
+                else if (mode == 14 || mode == 15)
+                {
+                    rat_mode = RAT_UMTS;
+                }
+                else if (mode == 16)
+                {
+                    l4c_nw_get_rat_mode_req(source_string_ptr->src_id, &rat_mode); // unchange
+                }
+                else 
+                {
+                    rat_mode = RAT_GSM_UMTS;
+                }
+
+                // prefer_rat
+                if (acqorder == 1)
+                {
+                    prefer_rat = RAT_GSM;
+                }
+                else if (acqorder == 2)
+                {
+                    prefer_rat = RAT_UMTS;
+                }
+                else if (acqorder == 3)
+                {
+                    l4c_nw_get_prefer_rat_req(&prefer_rat); // do not change
+                }
+                else
+                {
+                    prefer_rat = RAT_GSM_UMTS;
+                }
+
+                // support_roaming
+                if (roam == 0)
+                {
+                    support_roaming = KAL_FALSE;
+                }
+                else if (roam == 1)
+                {
+                    support_roaming = KAL_TRUE;
+                }
+                else
+                {
+                    l4c_nw_get_romaing_mode_req(source_string_ptr->src_id, &support_roaming);  // do not change
+                }
+
+                // mobile_class
+                if (srv_domain == 0)
+                {
+                    mobile_class = 3; // CS only
+                }
+                else if (srv_domain == 1)
+                {          
+                    mobile_class = 2; // PS only
+                }
+                else if (srv_domain == 4)
+                {
+                    l4c_nw_get_class_req(source_string_ptr->src_id, &mobile_class); // unchange
+                }
+                else if (srv_domain >= 2)
+                {
+                    mobile_class = 1; // CS_PS
+                }
+
+                ret_val = l4c_nw_set_sysconfig_req(source_string_ptr->src_id, rat_mode, prefer_rat, support_roaming, mobile_class);
+                if (ret_val ==KAL_TRUE)
+                {
+                    return;
+                }
+            }
+            default:
+                break;
+        }
+    }
+    rsp_str = &buffer[0];        
+    rmmi_final_rsp_generator(source_string_ptr->src_id, ret_val, (kal_uint8*) rsp_str, string_length);
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_cardmode_hdlr
+ * DESCRIPTION
+ * PARAMETERS
+ *  source_string_ptr       [IN]        At cmd string
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_cardmode_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_bool ret_val = KAL_FALSE;
+    kal_uint8 const *rsp_str = NULL;
+    kal_uint8 buffer[RMMI_SHORT_RSP_LEN];
+    kal_uint16 string_length = 0;  
+
+    if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_OP01_AT_SUPPORT, (rmmi_current_mod_id - MOD_ATCI)))
+    {
+        switch (source_string_ptr->cmd_mode)
+        {
+            case RMMI_READ_MODE:
+            {
+                int sim_state=0;
+
+                if (is_sim_verified() == KAL_FALSE)
+                {
+                    sim_state = 255;
+                }
+                else
+                {
+                    if (check_is_usim() == KAL_TRUE)
+                    {
+                        sim_state = 2;
+                    }
+                    else
+                    {
+                        sim_state = 1;
+                    }
+                }
+
+                RMMI_PTR->arg_list[0] = (void*)&sim_state;            
+                string_length = rmmi_fast_string_print(buffer, (kal_uint8*) "^CARDMODE: %d", RMMI_PTR->arg_list, 1);
+                ret_val = KAL_TRUE;
+                break;
+            }
+            case RMMI_SET_OR_EXECUTE_MODE:
+            {
+                kal_uint8 mode, error_cause;
+
+                mode = (kal_uint8) rmmi_int_validator_range_check(&error_cause, source_string_ptr, RMMI_PTR->s_reg.s3, 1);
+                if (error_cause != RMMI_PARSE_OK)
+                {
+                    break;
+                }
+
+                RMMI_PTR->op01_report_mode.cardmode = mode;
+                ret_val = KAL_TRUE;
+                break;
+            }
+            default:
+                break;
+        }
+    }    
+    rsp_str = &buffer[0];      
+    rmmi_final_rsp_generator(source_string_ptr->src_id, ret_val, (kal_uint8*) rsp_str, string_length);
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_rfsw_hdlr
+ * DESCRIPTION
+ * PARAMETERS
+ *  source_string_ptr       [IN]        At cmd string
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_rfsw_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_bool ret_val = KAL_FALSE;
+    kal_uint8 const *rsp_str = NULL;
+    kal_uint8 buffer[RMMI_SHORT_RSP_LEN];
+    kal_uint16 string_length = 0;  
+
+    if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_OP01_AT_SUPPORT, (rmmi_current_mod_id - MOD_ATCI)))
+    {
+        switch (source_string_ptr->cmd_mode)
+        {
+            case RMMI_READ_MODE:
+            {
+                int state;
+
+                if (l4c_get_cfun_state() != 1)
+                {
+                    state = 0;
+                }
+                else
+                {
+                    state = 1;
+                }
+                
+                RMMI_PTR->arg_list[0] = (void*)&state;            
+                string_length = rmmi_fast_string_print(buffer, (kal_uint8*) "^RFSW: %d", RMMI_PTR->arg_list, 1);
+                ret_val = KAL_TRUE;              
+                break;
+            }
+            case RMMI_SET_OR_EXECUTE_MODE:
+            {
+                kal_uint8 value, error_cause;
+
+                value = (kal_uint8) rmmi_int_validator_range_check(&error_cause, source_string_ptr, RMMI_PTR->s_reg.s3, 1);
+                if (error_cause != RMMI_PARSE_OK)
+                {
+                    break;
+                }
+
+                RMMI_PTR->op01_report_mode.rfsw = value;
+                ret_val = KAL_TRUE;
+                break;
+            }
+            default:
+                break;
+        }
+    }    
+    rsp_str = &buffer[0];      
+    rmmi_final_rsp_generator(source_string_ptr->src_id, ret_val, (kal_uint8*) rsp_str, string_length);
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_spn_hdlr
+ * DESCRIPTION
+ * PARAMETERS
+ *  source_string_ptr       [IN]        At cmd string
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_spn_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_bool ret_val = KAL_FALSE;
+    kal_uint8 error_cause;
+    kal_uint8 const *rsp_str = NULL;
+    kal_uint8 buffer[RMMI_SHORT_RSP_LEN];
+    kal_uint16 string_length = 0;  
+
+    if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_OP01_AT_SUPPORT, (rmmi_current_mod_id - MOD_ATCI)))
+    {
+        switch (source_string_ptr->cmd_mode)
+        { 
+            case RMMI_SET_OR_EXECUTE_MODE:
+            {
+                kal_uint8 spn_type;
+                kal_uint8 PATH_SPN[6] = {0x7F,0x20,0x6F,0x46,0x00,0x00};
+                kal_uint8 PATH_U_SPN[6] = {0x7F,0xFF,0x6F,0x46,0x00,0x00};
+
+                spn_type = (kal_uint8) rmmi_int_validator_range_check(&error_cause, source_string_ptr, RMMI_PTR->s_reg.s3, 1);
+                if (error_cause != RMMI_PARSE_OK)
+                {
+                    break;
+                }
+
+                if (spn_type == 0)
+                {   // Read SIM SPN
+                    ret_val = l4c_smu_read_file_info_req(source_string_ptr->src_id, FILE_NONE, PATH_SPN, 0);
+                }
+                else
+                {   // Read USIM SPN
+                    ret_val = l4c_smu_read_file_info_req(source_string_ptr->src_id, FILE_NONE, PATH_U_SPN, 1);            
+                }
+
+                if (ret_val == KAL_TRUE)
+                {
+                    return;
+                }
+                break;
+            }
+            default:
+                break;
+        }
+    }    
+    rsp_str = &buffer[0];      
+    rmmi_final_rsp_generator(source_string_ptr->src_id, ret_val, (kal_uint8*) rsp_str, string_length);
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_hver_hdlr
+ * DESCRIPTION
+ *  This command is for CMCC test, and used to get hardware version.
+ * PARAMETERS
+ *  source_string_ptr       [IN]        At cmd string
+ * RETURNS
+ *  void
+ *****************************************************************************/
+ void rmmi_hver_hdlr(rmmi_string_struct *source_string_prt)
+{
+    kal_bool ret_val = KAL_FALSE;
+    kal_uint16 string_length = 0;
+    kal_uint8 const *rsp_str = NULL;
+    kal_uint8 eq_id[NVRAM_EF_BARCODE_NUM_SIZE + 1];
+    kal_uint8 buffer[MAX_UART_LENGTH];
+    
+    //kal_trace(TRACE_FUNC, FUNC_RMMI_HVER_HDLR_ENTRY);//change to kal_brief_trace?
+    if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_OP01_AT_SUPPORT, (rmmi_current_mod_id - MOD_ATCI)))
+    {
+        switch(source_string_prt->cmd_mode)
+        {
+            case RMMI_ACTIVE_MODE:
+            {
+                /* Get Base band chip version, same as AT+EGMR=0,0 */
+                ret_val = get_ms_revision(0, (kal_uint8*)eq_id);
+                if(ret_val == KAL_TRUE)
+                {
+                    RMMI_PTR->arg_list[0] = (void*)eq_id;
+                    string_length = rmmi_fast_string_print(buffer,
+                                                           (kal_uint8*) "^HVER: \"%s\"",
+                                                           RMMI_PTR->arg_list,
+                                                           1);
+                    rsp_str = &buffer[0];
+                }
+                break;
+            }
+            default:
+            {
+                /* Unrecognized command format */
+                break;
+            }
+            
+        }
+    }
+    rmmi_final_rsp_generator(source_string_prt->src_id, ret_val, (kal_uint8*)rsp_str, string_length);
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_cmdver_hdlr
+ * DESCRIPTION
+ *  This command is for CMCC test, and used to get AT CMD version.
+ * PARAMETERS
+ *  source_string_ptr       [IN]        At cmd string
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_cmdver_hdlr(rmmi_string_struct *source_string_prt)
+{
+    kal_uint8 main_ver = CMCC_AT_CMD_MAIN_VER;
+    kal_uint8 major_ver = CMCC_AT_CMD_MAJOR_VER;
+    kal_uint8 minor_ver = CMCC_AT_CMD_MINOR_VER;
+    kal_bool ret_val = KAL_FALSE;
+    kal_uint16 string_length = 0;
+    kal_uint8 const *rsp_str = NULL;
+    kal_uint8 buffer[MAX_UART_LENGTH];
+    
+    //kal_trace(TRACE_FUNC, FUNC_RMMI_CMDVER_HDLR_ENTRY);//change to brief trace?
+    if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_OP01_AT_SUPPORT, (rmmi_current_mod_id - MOD_ATCI)))
+    {
+        switch(source_string_prt->cmd_mode)
+        {
+            case RMMI_ACTIVE_MODE:
+            {
+                RMMI_PTR->arg_list[0] = (void*)&main_ver;
+                RMMI_PTR->arg_list[1] = (void*)&major_ver;
+                RMMI_PTR->arg_list[2] = (void*)&minor_ver;
+                string_length = rmmi_fast_string_print(buffer,
+                                                       (kal_uint8*) "^CMDVER: %d,%d,%d",
+                                                       RMMI_PTR->arg_list,
+                                                       3);
+                rsp_str = &buffer[0];
+                ret_val = KAL_TRUE;
+                break;
+            }
+             
+            default:
+            {
+                /* Unrecognized command format */
+                break;
+            }
+            
+        }
+    }
+    rmmi_final_rsp_generator(source_string_prt->src_id, ret_val, (kal_uint8*)rsp_str, string_length);
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_off_hdlr
+ * DESCRIPTION
+ * PARAMETERS
+ *  source_string_ptr       [IN]        At cmd string
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_off_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_bool ret_val = KAL_FALSE;
+    kal_uint8 const *rsp_str = NULL;
+    kal_uint8 buffer[RMMI_SHORT_RSP_LEN];
+    kal_uint16 string_length = 0;  
+
+    if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_OP01_AT_SUPPORT, (rmmi_current_mod_id - MOD_ATCI)))
+    {
+        switch (source_string_ptr->cmd_mode)
+        {
+            case RMMI_ACTIVE_MODE:
+            {
+                ret_val = l4c_nw_cfun_state_req(source_string_ptr->src_id, 4);
+                if (ret_val == KAL_TRUE)
+                {
+                    return;
+                }
+                break;
+            }
+            default:
+                break;
+        }
+    }    
+    rsp_str = &buffer[0];      
+    rmmi_final_rsp_generator(source_string_ptr->src_id, ret_val, (kal_uint8*) rsp_str, string_length);
+}
+
+#endif /* !__L1_STANDALONE__ && !__MAUI_BASIC__*/
+
diff --git a/mcu/custom/protocol/common/atci/src/rmmi_validator_custom_tc01.c b/mcu/custom/protocol/common/atci/src/rmmi_validator_custom_tc01.c
new file mode 100644
index 0000000..7611756
--- /dev/null
+++ b/mcu/custom/protocol/common/atci/src/rmmi_validator_custom_tc01.c
@@ -0,0 +1,6473 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * RMMI_VALIDATOR_CUSTOM.C
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *   This file is intends for implementing custom commands for some customers
+ *   which should not be released to other customers
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ ****************************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include "kal_public_api.h" //MSBB change #include "kal_release.h"
+#include "kal_public_defs.h" //MSBB change #include "stack_common.h"
+
+#ifdef __TC01__
+
+#include "uem_utility.h"
+#include "l4c_context.h"
+
+#include "rmmi_utility.h"
+#include "rmmi_msghdlr.h"
+
+/* Basic include */
+#include "rmmi_context.h"
+#include "rmmi_rspfmttr.h"
+#include "rmmi_custom_parser.h"
+/* AT%SBP RFDEVCHK */
+//#include "l4c_utility.h"
+#include "nvram_data_items.h"
+#include "nvram_struct.h"
+#include "nvram_msgid.h"
+#include "nvram_interface.h"
+//#include "ps_public_utility.h"
+//#include "l4c_sendmsg.h"
+//#include "l4c_em.h"
+#include "rmmi_rsp.h"
+/* AT%SBP RFDEVCHK */
+#if defined(__TC01__) && defined(LGE_FW_COMMON)
+#include "lge_fw_factory_data.h"
+#endif
+
+/* AT%LTECALL */ /*AT_CAMPREQ MOLY00303967*/
+#include "l4c2rac_struct.h"
+#include "nvram_interface.h"
+#include "sbp_public_utility.h" // __TC01_CUST_SBP__
+#include "l4c_sendmsg.h"
+#include "rmmi_parser.h"
+#include "l4c_utility.h"
+#include "rmmi_msghdlr.h"
+#include "rmmi_utility.h"
+/* AT%LTECALL */
+
+/* Specific Cell-search */
+#ifdef __AS_SPECIFIC_CHANNEL_SRCH__
+#include "custom_gas_config.h"
+#include "custom_cise_config.h"
+#include "custom_eas_config.h"
+#include "rmmi_common_enum.h"
+#include "mrs_common_capability.h" // at%ltecall
+#endif
+
+/*AT+DATASTATIC */
+#include "upcm.h"
+#include "l4c_context.h"
+#include "l4c_utility.h"
+/*AT+DATASTATIC */
+
+#include "l4c_nw_cmd.h"
+
+/* AT%MIMOANTCHECK */
+#include "custom_em.h"
+#include "l4c_em.h"
+
+/* AT%ECALL */
+#include "l4c_cc_cmd.h"
+#include "l4crac_func.h"
+#include "l4crac_enums.h"
+#include "custom_ecc.h"
+/* AT%ECALL */
+
+/* AT%FLIGHT */
+#include "kal_trace.h"
+/* AT%FLIGHT */
+
+/* AT%SIMID */
+#include "custom_nvram_extra.h"
+#if defined (__MOD_SMU__)
+#define RMMI_CUST_GET_NVRAM_ICCID_INT(PS_ID_EXT, ICCID) \
+{ \
+    kal_uint8 ps_id = PS_ID_EXT; \
+    nvram_ef_ms_security_struct *pSmuSecurityInfo = smu_get_ms_security_ptr(ps_id); \
+    if (pSmuSecurityInfo->query_a == NULL) \
+        kal_mem_set(ICCID, 0xFF, sizeof(ICCID)); \
+    else \
+        (*pSmuSecurityInfo->query_a)(SMU_ICCID_A, ICCID, NUM_OF_BYTE_ICCID, ps_id); \
+}
+
+#if defined (__GEMINI__)
+#define RMMI_CUST_GET_NVRAM_ICCID(CURR_MOD_ID, ICCID) RMMI_CUST_GET_NVRAM_ICCID_INT((CURR_MOD_ID == MOD_L4C ? SIM1 : SIM2), ICCID)
+#else
+#define RMMI_CUST_GET_NVRAM_ICCID(CURR_MOD_ID, ICCID) RMMI_CUST_GET_NVRAM_ICCID_INT(SIM1, ICCID)
+#endif /* __GEMINI__ */
+#endif /*__MOD_SMU__ */
+
+/* AT%SIMOFF */
+#include "l4c_sim_cmd.h"
+
+/*****************************************************************************
+*   Declareation of variables
+*****************************************************************************/
+kal_uint32 const rmmi_custom_cmd_table[RMMI_MAX_CUSTOM_CMD_NUM][2] =
+{
+#define CUSTOM_CMD(AT_NAME, HASH1, HASH2, TEST_STRING, ENUM, FUNC) {HASH1, HASH2},
+    #include "at_custom_cmd_tc01.h"
+#undef CUSTOM_CMD
+};
+
+const kal_char *const rmmi_custom_test_mode_string_table[ /* RMMI_MAX_CMD_NUM */ ] =
+{
+#define CUSTOM_CMD(AT_NAME, HASH1, HASH2, TEST_STRING, ENUM, FUNC) TEST_STRING,
+    #include "at_custom_cmd_tc01.h"
+#undef CUSTOM_CMD
+};
+
+/* AT%SIMOFF */
+#if defined(__VSIM__) && !defined(__FEATURE_TC01_SIMOFF_EXTENTION__)
+kal_uint8 switch_on = 0;    // For AT%SIMOFF / 1:switch_on / 0:switch_off
+#endif
+
+/* AT%ECALL */
+kal_uint8 ecall_action = 0xff; //0xff: no ecall action  0: ecall hangup call onging  , 1:ecall dial call  ongoing
+kal_uint8 ecall_when_no_service = KAL_FALSE; //MAUI_02610201: this flag is used to prevent ecall setup for a long time
+/* AT%ECALL */
+
+/* AT%FLIGHT */
+kal_bool rmmi_custom_flight_state = KAL_FALSE;
+kal_bool rmmi_customCfun_state = KAL_FALSE;
+/* AT%FLIGHT */
+
+/*****************************************************************************
+ *   Definition of type
+ *****************************************************************************/
+
+typedef enum {
+
+RMMI_CUST_NO_RSP,
+RMMI_CUST_RSP_ONLY,
+RMMI_CUST_RSP_WITH_OK,
+RMMI_CUST_RSP_ERROR,
+RMMI_CUST_RSP_MAX,
+RMMI_CUST_RSP_INVLAID = RMMI_CUST_RSP_MAX
+}rmmi_cust_rsp_enum;
+
+static rmmi_cust_rsp_enum resp_type = RMMI_CUST_RSP_INVLAID;
+
+#define RMMI_CUST_SET_RSP_TYPE( RSP_TYPE ) resp_type = RSP_TYPE
+#define RMMI_CUST_MAX_RSP_STR_LEN 512
+
+/* AT%LTECALL */
+custom_factory_band_context_struct cust_fac_band;
+custom_factory_band_context_struct * cust_fac_ptr_global = &cust_fac_band;
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#if !defined(__TC01_SIM_LOCK_OFF__) && defined(LGE_FW_COMMON)
+
+typedef int BOOL;
+
+/* Virtual SIM Lock Test */
+typedef enum {
+    LGOEM_VSLT_NONE         = 0x00,
+    LGOEM_VSLT_SIM_CHECKING,
+    LGOEM_VSLT_SIM_LOCK,
+    LGOEM_VSLT_SIM_UNLOCK,
+    LGOEM_VSLT_SIM_ERROR,
+    LGOEM_VSLT_SIM_MAX      = 0xff,
+}lgoem_at_vslt_sim_type;
+
+#define VSLT_SIM_3                  (3)
+#define VSLT_MAX_NUM_3              (10)
+#define VSLT_MAX_LEN_3              (31*VSLT_SIM_3+10)
+
+#define VSLT_SIM_2                  (2)
+#define VSLT_MAX_NUM_2              (20)
+#define VSLT_MAX_LEN_2              (31*VSLT_SIM_2+10)
+
+#define VSLT_SIM_1                  (1)
+#define VSLT_MAX_NUM_1              (40)
+#define VSLT_MAX_LEN_1              (31*VSLT_SIM_1+10)
+
+#define TC01_SML_SIZE_OF_CAT_N  (LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN)
+#define TC01_SML_SIZE_OF_CAT_SP (LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN +LGE_FAC_NC_GID1_LEN)
+#define TC01_SML_SIZE_OF_CAT_NS (LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN +LGE_FAC_NC_SUBSET_LEN)
+#define TC01_SML_SIZE_OF_CAT_C  (LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN +LGE_FAC_NC_GID1_LEN+LGE_FAC_NC_GID2_LEN)
+  /* Virtual SIM Lock Test */
+#endif /* #if !defined(__TC01_SIM_LOCK_OFF__) && defined(LGE_FW_COMMON) */
+
+#define __RMMI_CUSTOM_DEBUG_INFO__
+
+#ifdef __RMMI_CUSTOM_DEBUG_INFO__
+#define rmmi_custom_dbg_trace(x) kal_prompt_trace(rmmi_current_mod_id, x)
+#define rmmi_custom_dbg_trace_int(x,i) kal_prompt_trace(rmmi_current_mod_id, x, i)
+#else
+#define rmmi_custom_dbg_trace(x) {}
+#define rmmi_custom_dbg_trace_int(x,i) {}
+#endif
+
+/* AT%ECALL */
+#define RMMI_ECALL_NO_ACTION	0xff
+#define RMMI_ECALL_SETUP 1
+#define RMMI_ECALL_CLEAR 0
+#define RMMI_SET_ECALL_ACTION( ACT ) ecall_action = ACT
+#define RMMI_GET_ECALL_ACTION_STATE() ecall_action
+#define RMMI_ECALL_SET_NO_SRV_STATE( STATE ) ecall_when_no_service  = STATE
+#define RMMI_CUST_ECC_INVOKE 1
+#define RMMI_CUST_ECC_HUP 0
+#define RMMI_INVALID_SIM_ID 0xff
+#define RMMI_L4CID_MAP2_SIMID(L4CID)  (L4CID-MOD_L4C)
+#define RMMI_SIMID_MAP2_L4CID(SIMID)  (SIMID + MOD_L4C)
+#define RMMI_IS_CALL_EXIST( SIMID ) (&l4c_cntxt_g[SIMID])->call_exist
+#define RMMI_IS_RAC_ACTIVATED( SIMID ) l4c_comm_ptr_g->rac_activated
+#define RMMI_CUST_SET_CMEE(ERR) RMMI_PTR->cmee_err = ERR
+#define RMMI_CUST_SET_RSP_TYPE( RSP_TYPE ) resp_type = RSP_TYPE
+/* AT%ECALL */
+
+static kal_uint8 rmmi_rsp_buf[RMMI_CUST_MAX_RSP_STR_LEN];
+/*****************************************************************************
+ *	 Definition of Macro
+ *****************************************************************************/
+#define RMMI_CUST_BAND_EGSM             0x02
+#define RMMI_CUST_BAND_DCS             0x08
+#define RMMI_CUST_BAND_PCS             0x10
+#define RMMI_CUST_BAND_GSM850         0x80
+#define RMMI_CUST_BNAD_NOT_SUPPORT     0
+
+#define RMMI_CUST_BNDI_PARAM_PCS 3
+#define RMMI_CUST_BNDI_PARAM_DCS 4
+#define RMMI_CUST_BNDI_PARAM_DUAL_EXT 6
+#define RMMI_CUST_BNDI_PARAM_DUAL_US 8
+
+#define RMMI_CUST_STX                     0x02
+#define RMMI_CUST_ETX                     0x03
+#define RMMI_CUST_PERSENT                 '%'
+
+#define GSM_BAND_PRESENT_BITMAP 1
+#define UMTS_BAND_PRESENT_BITMAP 2
+#define LTE_BAND_PRESENT_BITMAP 4
+#define NR_BAND_PRESENT_BITMAP 8 /* at%ltecall */
+
+#define MAX_SUPPORTED_LTE_BAND (8)
+#define MAX_SUPPORTED_NR_BAND (MRS_NR_BAND_BITMASK_SIZE / 4)
+#define CUSTOM_UMTS_BAND_OFFSET (5)
+#define CUSTOM_LTE_BAND_OFFSET (17)
+#define MAX_CAMPREQ_BAND 45
+
+//AT_CAMPREQ MOLY00303967
+#define LGE_FAC_CHAR_STX 0x02
+#define LGE_FAC_CHAR_ETX 0x03
+
+typedef struct{
+	kal_uint8 band_present_bitmap;
+	kal_uint8	gsm_band;
+	kal_uint32 umts_band;
+	kal_uint32 lte_band[MAX_SUPPORTED_LTE_BAND];
+	kal_uint32 nr_band[MAX_SUPPORTED_NR_BAND]; /* at%ltecall */
+}rmmi_band_T;
+
+/*****************************************************************************
+ *   Declareation of functions
+ *****************************************************************************/
+
+/* AT%SBP RFDEVCHK */
+extern nvram_ef_sbp_modem_config_struct sbp_config;
+extern nvram_ef_sbp_modem_config_struct cust_sbp_config;
+/* AT%SBP RFDEVCHK */
+
+kal_uint16 rmmi_fast_string_print_custom(kal_uint8 * buff_ptr, kal_uint8 * fmt, void * arg_list [ ], kal_uint8 nos_arg);
+static void rmmi_cust_final_rsp_generator(	kal_uint8 src_id, kal_uint8 *buffer_ptr,kal_uint16 string_length);
+/* For MOLY00165083 */
+
+static void rmmi_band_init( rmmi_band_T * band );
+static kal_uint16 rmmi_construct_band_value_and_string(	kal_uint8 *rspstr_ptr,
+														kal_uint8 custom_band_value,
+														rmmi_band_T * band_ptr,
+														kal_uint32 supported_gsm_band,
+														kal_uint32 supported_umts_fdd_band,
+														kal_uint32 * supported_lte_band,
+														kal_uint32 * supported_nr_band );
+
+void set_factory_rat_mode( kal_uint8 rat_band_bitmap );
+
+static kal_uint8 rmmi_cust_band_map( kal_uint8 opcode ); /* MOLY00303943 */
+
+#ifdef __AS_SPECIFIC_CHANNEL_SRCH__
+kal_bool rmmi_initial_campreq_with_set_rft_mode( void );
+#endif
+
+ /* AT%ECALL */
+static kal_uint8 rmmi_get_simid_call_exist( void );
+static kal_bool rmmi_is_ecc_ongoing( void );
+static void rmmi_cust_invoke_ecc_call_clearing ( l4c_source_id_enum src_id, kal_uint8 sim_id  );
+static void rmmi_cust_invoke_ecc_call_setup ( l4c_source_id_enum src_id, kal_uint8 sim_id  );
+static kal_bool rmmi_is_rac_activated( void );
+extern void csmcc_context_selection(kal_uint8 sim_interface);
+ /* AT%ECALL */
+
+/*****************************************************************************
+ *	 Declareation of variables
+ *****************************************************************************/
+	  static kal_uint8 rmmi_rsp_buf[RMMI_CUST_MAX_RSP_STR_LEN];
+
+	  typedef enum{
+		  CUST_BAND_NONE = 0,
+		  CUST_BAND_GSM900,
+		  CUST_BAND_GSM850,
+		  CUST_BAND_PCS,
+		  CUST_BAND_DCS,
+		  CUST_BAND_GSM_ONLY = 6,
+		  CUST_BAND_WCDMA_I,
+		  CUST_BAND_WCDMA_II,
+		  CUST_BAND_WCDMA_III,
+		  CUST_BAND_WCDMA_IV,
+		  CUST_BAND_WCDMA_V,
+		  CUST_BAND_WCDMA_VI,
+		  CUST_BAND_WCDMA_VII,
+		  CUST_BAND_WCDMA_VIII,
+		  CUST_BAND_WCDMA_VIIII,
+		  CUST_BAND_WCDMA_X,
+		  CUST_BAND_WCDMA_ONLY,
+		  CUST_BAND_Automatic,
+		  CUST_BAND_WCDMA_XIX,
+		  CUST_BAND_1X_ONLY=23,
+		  CUST_BAND_HDR_ONLY,
+		  CUST_BAND_TDSCDMA_ONLY,
+		  CUST_BAND_GSM_WCDMA = 49,
+		  CUST_BAND_LTE_ONLY,
+		  CUST_BAND_LTE_I,
+		  CUST_BAND_LTE_II,
+		  CUST_BAND_LTE_III,
+		  CUST_BAND_LTE_IV,
+		  CUST_BAND_LTE_V,
+		  CUST_BAND_LTE_VI,
+		  CUST_BAND_LTE_VII = 57,
+		  CUST_BAND_LTE_VIII,
+		  CUST_BAND_LTE_IX,
+		  CUST_BAND_LTE_X,
+		  CUST_BAND_LTE_XI,
+		  CUST_BAND_LTE_XII,
+		  CUST_BAND_LTE_XIII,
+		  CUST_BAND_LTE_XIV,
+		  CUST_BAND_LTE_XVII = 67,
+		  CUST_BAND_LTE_XVIII,
+		  CUST_BAND_LTE_XIX,
+		  CUST_BAND_LTE_XX,
+		  CUST_BAND_LTE_XXI,
+		  CUST_BAND_LTE_XXV = 75,
+		  CUST_BAND_LTE_XXVIII = 78,
+		  CUST_BAND_LTE_XL = 90,
+		  CUST_BAND_MAX
+	  }custom_band_enum;
+
+	  typedef struct {
+		  custom_band_enum custom_band;
+		  kal_uint32 band[MAX_SUPPORTED_LTE_BAND];
+		  const char * band_str;
+	  }custom_band_type;
+
+	 static const custom_band_type custom_band_table[] = {
+		  {CUST_BAND_GSM900, {0x02, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[1]GSM900"},
+		  {CUST_BAND_GSM850, {0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[2]GSM850"},
+		  {CUST_BAND_PCS, {0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[3]PCS"},
+		  {CUST_BAND_DCS, {0x08, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[4]DCS"},
+		  {CUST_BAND_GSM_ONLY,{0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[6]GSM ONLY"},
+		  {CUST_BAND_WCDMA_I, {0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[7]WCDMA I"},
+		  {CUST_BAND_WCDMA_II, {0x02, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[8]WCDMA II"},
+		  {CUST_BAND_WCDMA_III, {0x04, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[9]WCDMA III"},
+		  {CUST_BAND_WCDMA_IV, {0x08, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[10]WCDMA IV"},
+		  {CUST_BAND_WCDMA_V, {0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[11]WCDMA V"},
+		  {CUST_BAND_WCDMA_VI, {0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[12]WCDMA VI"},
+		  {CUST_BAND_WCDMA_VII, {0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[13]WCDMA VII"},
+		  {CUST_BAND_WCDMA_VIII, {0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[14]WCDMA VIII"},
+		  {CUST_BAND_WCDMA_VIIII, {0x0100, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[15]WCDMA VIIII"},
+		  {CUST_BAND_WCDMA_X, {0x0200, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[16]WCDMA X"},
+		  {CUST_BAND_WCDMA_ONLY, {0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[17]WCDMA ONLY"},
+		  {CUST_BAND_Automatic, {0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[18]Automatic"},
+		  {CUST_BAND_WCDMA_XIX, {0x40000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[19]WCDMA XIX"},
+		  {CUST_BAND_1X_ONLY, {0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[23]1X Only"},
+		  {CUST_BAND_HDR_ONLY, {0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[24]HDR Only"},
+		  {CUST_BAND_TDSCDMA_ONLY, {0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[25]TDSCDMA Only"},
+		  {CUST_BAND_GSM_WCDMA, {0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[49]WCDMA GSM Only"},
+		  {CUST_BAND_LTE_ONLY, {0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[50]LTE Only"},
+		  {CUST_BAND_LTE_I, {0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[51]LTE I"},
+		  {CUST_BAND_LTE_II, {0x02, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[52]LTE II"},
+		  {CUST_BAND_LTE_III, {0x04, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[53]LTE III"},
+		  {CUST_BAND_LTE_IV, {0x08, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[54]LTE IV"},
+		  {CUST_BAND_LTE_V, {0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[55]LTE V"},
+		  {CUST_BAND_LTE_VI, {0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[56]LTE VI"},
+		  {CUST_BAND_LTE_VII, {0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[57]LTE VII"},
+		  {CUST_BAND_LTE_VIII, {0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[58]LTE VIII"},
+		  {CUST_BAND_LTE_IX, {0x0100, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[59]LTE IX"},
+		  {CUST_BAND_LTE_X, {0x0200, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[60]LTE X"},
+		  {CUST_BAND_LTE_XI, {0x0400, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[61]LTE XI"},
+		  {CUST_BAND_LTE_XII, {0x0800, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[62]LTE XII"},
+		  {CUST_BAND_LTE_XIII, {0x1000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[63]LTE XIII"},
+		  {CUST_BAND_LTE_XIV, {0x2000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[64]LTE XIV"},
+		  {CUST_BAND_LTE_XVII, {0x010000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[67]LTE XVII"},
+		  {CUST_BAND_LTE_XVIII, {0x020000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[68]LTE XVIII"},
+		  {CUST_BAND_LTE_XIX, {0x040000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, "[69]LTE XIX"},
+		  {CUST_BAND_LTE_XX, {0x080000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[70]LTE XX"},
+		  {CUST_BAND_LTE_XXI, {0x100000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[71]LTE XXI"},
+		  {CUST_BAND_LTE_XXV, {0x1000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[75]LTE XXV"},
+		  {CUST_BAND_LTE_XXVIII, {0x8000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[78]LTE XXVIII"},
+		  {CUST_BAND_LTE_XL, {0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},"[90]LTE XL"}
+	  };
+
+#if defined (__TC01_NVRAM__) || defined(__TC01__) // __TC01_CUST_SBP__
+extern const kal_char *const sbp_feature_string_table[];
+const kal_char *const sbp_cust_feature_string_table[]=
+{
+#define SBP_FEATURE_DEF_BEGIN(x)
+#define SBP_FEATURE_DEF(FEATURE, ATTR, DESC, DESC_V0,DESC_V1, DEFAULT_VAL) #FEATURE,
+#define SBP_FEATURE_DEF_END(x)
+
+//jglee_block //no search file.    #include "sbp_feature_cust.def"
+
+#undef SBP_FEATURE_DEF_BEGIN
+#undef SBP_FEATURE_DEF
+#undef SBP_FEATURE_DEF_END
+};
+
+#define INVALID_SBP_FEATURE 0xffffffff
+#endif
+
+#if defined(__TC01__) //AT_CAMPREQ MOLY00303967
+extern l4c_rac_response_enum l4crac_get_gsm_status();
+#endif
+extern kal_bool sim_get_card_status_tc01(kal_uint32 logicalNum);
+
+/*** BEGIN *** Please Implement Custome Command Here ***/
+static void rmmi_custom_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_bool ret_val = KAL_FALSE;
+    kal_uint8 const *rsp_str = NULL;        /* response string and initialization */
+    kal_uint16 string_length = 0;           /* string length variable */
+
+    switch (source_string_ptr->cmd_mode)
+    {
+        case RMMI_TEST_MODE:
+        {
+            break;
+        }
+        case RMMI_ACTIVE_MODE:
+        {
+            break;
+        }
+        case RMMI_READ_MODE:
+        {
+            break;
+        }
+        case RMMI_SET_OR_EXECUTE_MODE:
+        {
+            ret_val = KAL_TRUE;
+            break;
+        }
+        default:
+        {
+            /* unrecognized format of AT command line */
+            break;
+        }
+    }   /* end of the switch */
+
+    rmmi_final_rsp_generator(source_string_ptr->src_id, ret_val, (kal_uint8*) rsp_str, string_length);
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *    rmmi_custom_need_entry
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ *****************************************************************************/
+kal_bool rmmi_custom_need_entry(kal_uint16 cmd_index)
+{
+    kal_bool     ret = KAL_FALSE;
+
+    switch( cmd_index )
+    {
+        case RMMI_CMD_BNDI     :
+        case RMMI_CMD_CAMP     :
+        case RMMI_CMD_CAMPREQ  :
+        case RMMI_CMD_LGCGATT  :
+        case RMMI_CMD_DETACH   :
+        case RMMI_CMD_INISIM   :
+        case RMMI_CMD_ISSIM    :
+        case RMMI_CMD_SIMID    :
+        case RMMI_CMD_MIMOANTCHECK :
+        case RMMI_CMD_RXMRD    :
+        case RMMI_CMD_RFDEVCHK :
+      #ifdef __VSIM__
+        case RMMI_CMD_SIMOFF   :
+      #endif
+        case RMMI_CMD_SLTYPE   :
+        case RMMI_CMD_VSLT3    :
+        case RMMI_CMD_VSLT2    :
+        case RMMI_CMD_VSLT     :
+//        case RMMI_CMD_CALCK    :
+//        case RMMI_CMD_CALDT    :
+        case RMMI_CMD_ECALL    :
+        case RMMI_CMD_SIMIMSI  :
+        case RMMI_CMD_SBP      :
+        case RMMI_CMD_LTECALL  :
+        case RMMI_CMD_LBCALL   :
+        case RMMI_CMD_FLIGHT   :
+        case RMMI_CMD_DATASTATIC :
+        case RMMI_CMD_SIMTRAY    :
+            ret = KAL_TRUE;
+            break;
+        default :
+            ret = KAL_FALSE;
+    }
+    return ret;
+}
+
+
+#ifdef __RMMI_EXTEND_CUSTOM_CMD__
+/****************************************/
+/* Start of Custom AT command APIs                     */
+/****************************************/
+
+/*****************************************************************************
+ *   Definition of extra functions
+ *****************************************************************************/
+/*****************************************************************************
+ * FUNCTION
+ *    rmmi_fast_string_print_custom
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ *****************************************************************************/
+kal_bool rmmi_is_custom_extended_cmd_character(kal_char *cmd_char)
+{
+    if ((*cmd_char == '%'))
+    {
+        return KAL_TRUE;
+    }
+    else
+    {
+        return KAL_FALSE;
+    }
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *    rmmi_fast_string_print_custom
+ * DESCRIPTION
+ *    Locate STX, ETX , <STX><RSP string><ETX>
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ *****************************************************************************/
+kal_uint16 rmmi_fast_string_print_custom(kal_uint8 * buff_ptr, kal_uint8 * fmt, void * arg_list [ ], kal_uint8 nos_arg)
+{
+    kal_uint8 string_length = 0;
+
+    buff_ptr[0]                = 0x02; // STX
+    string_length              = rmmi_fast_string_print(buff_ptr+1, fmt, arg_list, nos_arg);
+    buff_ptr[string_length+1]  = 0x03; // ETX
+    buff_ptr[string_length+2]  = 0x00;
+
+    return (string_length + 2);
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *	  rmmi_get_int_ext
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ *****************************************************************************/
+kal_uint32 rmmi_get_int_ext( kal_uint8 *error_cause, rmmi_string_struct *source_string_ptr, kal_uint8 delimiter )
+{
+	kal_uint32 ret_val = RMMI_VALIDATOR_ERROR;
+	kal_int32 value = 0;
+	kal_uint16 length;
+	kal_bool error_flag = KAL_FALSE;
+	kal_bool some_char_found = KAL_FALSE;
+
+	ASSERT(source_string_ptr != NULL);
+	length = strlen((char*)source_string_ptr->string_ptr);
+
+	/* If there are some leading white spaces, ignore them */
+	rmmi_skip_spaces(source_string_ptr);
+
+	/*
+	 * we have to initial the error so that we can using again and
+	 * again even if any error occur. so we dont have to init before
+	 * enter this function
+	 */
+	*error_cause = RMMI_PARSE_OK;
+
+	/*
+	 * Start checking for the integer, till the delimiter which may
+	 * * be a comma, a dot etc.
+	 */
+
+	while ( ( source_string_ptr->string_ptr[source_string_ptr->index] != delimiter )
+		&& ( source_string_ptr->string_ptr[source_string_ptr->index] != RMMI_PTR->s_reg.s3 )
+		&& ( source_string_ptr->string_ptr[source_string_ptr->index] != RMMI_CHAR_W )
+		&& ( source_string_ptr->string_ptr[source_string_ptr->index] != rmmi_char_w )
+		&& ( source_string_ptr->index < length) )
+	{
+		/* It means we found something between two commas(,)  */
+		some_char_found = KAL_TRUE;
+
+		/*
+		 * check whether the character is in 0 - 9 range. If so,
+		 * * store corresponding integer value for that character
+		 */
+		if ((source_string_ptr->string_ptr[source_string_ptr->index]
+			 >= RMMI_CHAR_0) && (source_string_ptr->string_ptr[source_string_ptr->index] <= RMMI_CHAR_9))
+		{
+			value = value * 10 + (source_string_ptr->string_ptr[source_string_ptr->index] - RMMI_CHAR_0);
+		}
+	else if( source_string_ptr->string_ptr[source_string_ptr->index] == RMMI_DOUBLE_QUOTE )
+	{
+		/* do nothing */
+	}
+		else	 /* out of range, return immediately */
+		{
+			error_flag = KAL_TRUE;
+			break;
+		}
+		/* If the character is a valid part of integer, then continue */
+		source_string_ptr->index++;
+	}	  /* end of the while loop */
+
+	if (error_flag == KAL_TRUE)
+	{
+		/*
+		 * Value is not in the valid range. It can also be due to
+		 * * white space in between two digits, because such white
+		 * * spaces are not allowed
+		 */
+		/* mark for solve correct input but incorrect end for 1,2,2, */
+		/* rmmi_result_code_fmttr (  RMMI_RCODE_ERROR,
+		   INVALID_CHARACTERS_IN_TEXT_ERRSTRING_ERR ); */
+		ret_val = RMMI_VALIDATOR_ERROR;
+		*error_cause = (kal_uint8) RMMI_PARSE_ERROR;
+	}
+	else if (some_char_found == KAL_FALSE)
+	{
+	if( source_string_ptr->index == length )
+	{
+			ret_val = RMMI_VALIDATOR_ERROR;
+			*error_cause = (kal_uint8) RMMI_PARSE_NOT_FOUND;
+	}
+	else
+	{
+			/* Nothing is present before the delimiter */
+			ret_val = RMMI_VALIDATOR_ERROR;
+			*error_cause = (kal_uint8) RMMI_PARSE_ERROR;
+
+			/*
+			 * Increment the string sliding index to point to the next
+			 * * character after delimiter, i.e. the next field in the
+			 * * command line
+			 */
+			source_string_ptr->index++;
+	}
+
+	}
+	/*
+	 * If some thing is present and check for the valid range as
+	 * * specified by the calling function
+	 */
+	else
+	{
+		ret_val = value;
+		/*
+		 * Increment the string sliding index to point to the next
+		 * * character after delimiter, i.e. the next field in the
+		 * * command line
+		 */
+		if (source_string_ptr->string_ptr[source_string_ptr->index] == delimiter)
+		{
+			source_string_ptr->index++;
+			rmmi_skip_spaces(source_string_ptr);
+			if (source_string_ptr->string_ptr[source_string_ptr->index] == RMMI_PTR->s_reg.s3)
+			{
+				ret_val = RMMI_VALIDATOR_ERROR;
+				*error_cause = (kal_uint8) RMMI_PARSE_ERROR;
+			}
+		}
+		else if ( ( source_string_ptr->string_ptr[source_string_ptr->index] == RMMI_CHAR_W ) || ( source_string_ptr->string_ptr[source_string_ptr->index] == rmmi_char_w ) )
+		{
+			source_string_ptr->index++;
+			rmmi_skip_spaces(source_string_ptr);
+			if (source_string_ptr->string_ptr[source_string_ptr->index] != RMMI_PTR->s_reg.s3)
+			{
+				ret_val = RMMI_VALIDATOR_ERROR;
+				*error_cause = (kal_uint8) RMMI_PARSE_ERROR;
+			}
+			else
+			{
+				source_string_ptr->index++;
+			}
+		}
+		else
+		{
+			source_string_ptr->index++;
+		}
+	}
+	return ret_val;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *    rmmi_get_hex_ext
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ *****************************************************************************/
+kal_uint8 rmmi_get_hex_ext( kal_uint8 *error_cause, rmmi_string_struct *source_string_ptr, kal_uint8 delimiter, kal_uint16 max_length, kal_uint8 *str, kal_uint8 *readCount )
+{
+    kal_uint8 ret_val = RMMI_VALIDATOR_ERROR;
+    kal_uint8 index = 0;
+    kal_uint16 length;
+    kal_bool error_flag = KAL_FALSE;
+    kal_bool some_char_found = KAL_FALSE;
+
+    ASSERT((str != NULL) && (source_string_ptr != NULL) && (error_cause != NULL));
+    length = strlen((char*)source_string_ptr->string_ptr);
+    /* If there are some leading white spaces, ignore them */
+    rmmi_skip_spaces(source_string_ptr);
+
+    /*
+     * we have to initial the error so that we can using again and
+     * again even if any error occur. so we dont have to init before
+     * enter this function
+     */
+    *error_cause = RMMI_PARSE_OK;
+
+    /*
+     * Start checking for the integer, till the delimiter which may
+     * * be a comma, a dot etc.
+     */
+
+    toUpper(source_string_ptr->string_ptr);
+    while ( ( source_string_ptr->string_ptr[source_string_ptr->index] != delimiter )
+        && ( source_string_ptr->string_ptr[source_string_ptr->index] != RMMI_PTR->s_reg.s3 )
+        && ( source_string_ptr->string_ptr[source_string_ptr->index] != RMMI_CHAR_W )
+        && ( source_string_ptr->string_ptr[source_string_ptr->index] != rmmi_char_w )
+        && ( source_string_ptr->index < length) )
+    {
+        /* It means we found something between two commas(,)  */
+        some_char_found = KAL_TRUE;
+
+        /*
+         * check whether the character is in 0 - 9 or A - F range.
+         * If not, break then return.
+         */
+        if ((source_string_ptr->string_ptr[source_string_ptr->index]
+             >= RMMI_CHAR_0) && (source_string_ptr->string_ptr[source_string_ptr->index] <= RMMI_CHAR_9))
+        {
+            if (index > (max_length - 1))    /* length is too long , break */
+            {
+                error_flag = KAL_TRUE;
+                break;
+            }
+
+            *((kal_uint8*) str + index) = source_string_ptr->string_ptr[source_string_ptr->index] - RMMI_CHAR_0;
+            index++;
+        }
+        else if ((source_string_ptr->string_ptr[source_string_ptr->index]
+                  >= RMMI_CHAR_A) && (source_string_ptr->string_ptr[source_string_ptr->index] <= RMMI_CHAR_F))
+        {
+            if (index > (max_length - 1))    /* length is too long , break */
+            {
+                error_flag = KAL_TRUE;
+                break;
+            }
+
+            *((kal_uint8*) str + index) = source_string_ptr->string_ptr[source_string_ptr->index] - RMMI_CHAR_A + 10;
+            index++;
+        }
+    else if( source_string_ptr->string_ptr[source_string_ptr->index] == RMMI_DOUBLE_QUOTE )
+    {
+        /* do nothing */
+    }
+        else     /* out of range, return immediately */
+        {
+            error_flag = KAL_TRUE;
+            break;
+        }
+        /* If the character is a valid part of integer, then continue */
+        source_string_ptr->index++;
+    }     /* end of the while loop */
+
+    if (error_flag == KAL_TRUE)
+    {
+        /* Value is not in the valid range. */
+        ret_val = RMMI_VALIDATOR_ERROR;
+        *error_cause = (kal_uint8) RMMI_PARSE_ERROR;
+    }
+    else if (some_char_found == KAL_FALSE)
+    {
+    if( source_string_ptr->index == length )
+    {
+            ret_val = RMMI_VALIDATOR_ERROR;
+            *error_cause = (kal_uint8) RMMI_PARSE_NOT_FOUND;
+    }
+    else
+    {
+            /* Nothing is present before the delimiter */
+            ret_val = RMMI_VALIDATOR_ERROR;
+            *error_cause = (kal_uint8) RMMI_PARSE_ERROR;
+
+            /*
+             * Increment the string sliding index to point to the next
+             * * character after delimiter, i.e. the next field in the
+             * * command line
+             */
+            source_string_ptr->index++;
+    }
+
+    }
+    /*
+     * If some thing is present and check for the valid range as
+     * * specified by the calling function
+     */
+    else
+    {
+        ret_val = RMMI_DEF_VALUE;
+    *readCount = index;
+
+        if (source_string_ptr->string_ptr[source_string_ptr->index] == delimiter)
+        {
+            source_string_ptr->index++;
+            rmmi_skip_spaces(source_string_ptr);
+            if (source_string_ptr->string_ptr[source_string_ptr->index] == RMMI_PTR->s_reg.s3)
+            {
+                ret_val = RMMI_VALIDATOR_ERROR;
+                *error_cause = (kal_uint8) RMMI_PARSE_ERROR;
+            }
+        }
+        else if ( ( source_string_ptr->string_ptr[source_string_ptr->index] == RMMI_CHAR_W ) || ( source_string_ptr->string_ptr[source_string_ptr->index] == rmmi_char_w ) )
+        {
+            source_string_ptr->index++;
+            rmmi_skip_spaces(source_string_ptr);
+            if (source_string_ptr->string_ptr[source_string_ptr->index] != RMMI_PTR->s_reg.s3)
+            {
+                ret_val = RMMI_VALIDATOR_ERROR;
+                *error_cause = (kal_uint8) RMMI_PARSE_ERROR;
+            }
+            else
+            {
+                source_string_ptr->index++;
+            }
+        }
+        else
+        {
+            source_string_ptr->index++;
+        }
+    }
+
+    return ret_val;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *    rmmi_get_str_ext
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ *****************************************************************************/
+kal_uint8 rmmi_get_str_ext( kal_uint8 *error_cause, rmmi_string_struct *source_string_ptr, kal_uint8 delimiter, kal_uint16 max_length, kal_uint8 *str )
+{
+    kal_uint8 ret_val = RMMI_VALIDATOR_ERROR;
+    kal_uint8 index = 0;
+    kal_uint16 length;
+    kal_bool error_flag = KAL_FALSE;
+    kal_bool some_char_found = KAL_FALSE;
+
+    ASSERT((str != NULL) && (source_string_ptr != NULL) && (error_cause != NULL));
+    length = strlen((char*)source_string_ptr->string_ptr);
+    /* If there are some leading white spaces, ignore them */
+    rmmi_skip_spaces(source_string_ptr);
+
+    /*
+     * we have to initial the error so that we can using again and
+     * again even if any error occur. so we dont have to init before
+     * enter this function
+     */
+    *error_cause = RMMI_PARSE_OK;
+
+    /*
+     * Start checking for the integer, till the delimiter which may
+     * * be a comma, a dot etc.
+     */
+
+    toUpper(source_string_ptr->string_ptr);
+    while ( ( source_string_ptr->string_ptr[source_string_ptr->index] != delimiter )
+        && ( source_string_ptr->string_ptr[source_string_ptr->index] != RMMI_PTR->s_reg.s3 )
+        && ( source_string_ptr->string_ptr[source_string_ptr->index] != RMMI_SPACE )
+        && ( source_string_ptr->index < length) )
+    {
+        /* It means we found something between two commas(,)  */
+        some_char_found = KAL_TRUE;
+
+        /*
+         * check whether the character is in 0 - 9 or A - F range.
+         * If not, break then return.
+         */
+        if (index > (max_length - 1))    /* length is too long , break */
+        {
+            error_flag = KAL_TRUE;
+            break;
+        }
+
+            *((kal_uint8*) str + index) = source_string_ptr->string_ptr[source_string_ptr->index];
+            index++;
+
+        /* If the character is a valid part of integer, then continue */
+        source_string_ptr->index++;
+    }     /* end of the while loop */
+
+    if (error_flag == KAL_TRUE)
+    {
+        /* Value is not in the valid range. */
+        ret_val = RMMI_VALIDATOR_ERROR;
+        *error_cause = (kal_uint8) RMMI_PARSE_ERROR;
+    }
+    else if (some_char_found == KAL_FALSE)
+    {
+    if( source_string_ptr->index == length || source_string_ptr->string_ptr[source_string_ptr->index] == RMMI_PTR->s_reg.s3 )
+    {
+            ret_val = RMMI_VALIDATOR_ERROR;
+            *error_cause = (kal_uint8) RMMI_PARSE_NOT_FOUND;
+    }
+    else
+    {
+            /* Nothing is present before the delimiter */
+            ret_val = RMMI_VALIDATOR_ERROR;
+            *error_cause = (kal_uint8) RMMI_PARSE_ERROR;
+
+            /*
+             * Increment the string sliding index to point to the next
+             * * character after delimiter, i.e. the next field in the
+             * * command line
+             */
+            source_string_ptr->index++;
+    }
+    }
+    /*
+     * If some thing is present and check for the valid range as
+     * * specified by the calling function
+     */
+    else
+    {
+        ret_val = RMMI_DEF_VALUE;
+        if( max_length > 1 )
+        {
+            *((kal_uint8*) str + index) = '\0';
+        }
+
+        if (source_string_ptr->string_ptr[source_string_ptr->index] == delimiter)
+        {
+            source_string_ptr->index++;
+            rmmi_skip_spaces(source_string_ptr);
+            if (source_string_ptr->string_ptr[source_string_ptr->index] == RMMI_PTR->s_reg.s3)
+            {
+                ret_val = RMMI_VALIDATOR_ERROR;
+                *error_cause = (kal_uint8) RMMI_PARSE_ERROR;
+            }
+        }
+        else
+        {
+            source_string_ptr->index++;
+        }
+    }
+
+    return ret_val;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_final_rsp_generator
+ * DESCRIPTION
+ *  the function generates the information response and final result code to DTE.
+ * PARAMETERS
+ *  src_id			  [IN]		   l4c_source_enum (channel)
+ *  ret_val			  [IN]		   OK/ERROR
+ *  buffer			  [?]
+ *  string_length 		[IN]		 the length of buffer.
+ * RETURNS
+ *  void
+ *****************************************************************************/
+static void rmmi_cust_final_rsp_generator
+(
+    kal_uint8                   src_id,
+    kal_uint8 *                 buffer_ptr,
+    kal_uint16                  string_length
+)
+{
+    rmmi_custom_dbg_trace_int("rmmi_cust_final_rsp_generator(), , resp_type = %d", resp_type);
+
+    if(  resp_type == RMMI_CUST_RSP_ONLY || resp_type == RMMI_CUST_RSP_WITH_OK )
+    {
+        if (string_length > 0)
+        {
+            if(resp_type == RMMI_CUST_RSP_ONLY)
+            {
+                atci_l4b_result_code_fmttr(RMMI_PTR->current_src, RMMI_RCODE_OK, buffer_ptr, string_length, KAL_TRUE);
+            }
+            else
+            {
+                rmmi_write_to_uart((kal_uint8*) buffer_ptr, string_length, KAL_TRUE);
+            }
+        }
+        else
+        {
+            rmmi_custom_dbg_trace("rmmi_cust_final_rsp_generator(), response string langth is 0!");
+        }
+        if(  resp_type == RMMI_CUST_RSP_WITH_OK )
+        {
+            rmmi_result_code_fmttr(RMMI_RCODE_OK, L4C_NO_CAUSE);
+        }
+    }
+    else if ( resp_type ==  RMMI_CUST_RSP_ERROR )
+    {
+        if (string_length > 0)
+        {
+            rmmi_write_to_uart((kal_uint8*) buffer_ptr, string_length, KAL_TRUE);
+        }
+        rmmi_result_code_fmttr(RMMI_RCODE_ERROR, RMMI_ERR_UNKNOWN);
+    }
+    else
+    {
+        rmmi_custom_dbg_trace_int("rmmi_cust_final_rsp_generator, No response, resp_type = %d", resp_type);
+    }
+    return;
+}
+
+  //-- rmmi_sprintf ----------------------------------------
+#define FLAG_ZERO   (1)                         // Pad with zero
+#define FLAG_PLUS   (4)                         // Show FLAG_PLUS
+#define FLAG_SPACE  (8)                         // FLAG_SPACE if FLAG_PLUS
+#define FLAG_MINUS  (16)                        // FLAG_MINUS justified
+#define FLAG_HASH   (32)                        // 0x
+#define UN_SIGN     (2)                         // Unsigned/signed long
+#define LARGE       (64)                        // Use 'ABCDEF' instead of 'abcdef'
+
+#define is_digit(c) ((c) >= '0' && (c) <= '9')     // Checking whether the character is digit or not.
+
+  static const kal_int8 lower_digits[] = "0123456789abcdefghijklmnopqrstuvwxyz";
+  static const kal_int8 upper_digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+  static size_t strn_len(const kal_int8 *s, size_t count)
+  {
+      const kal_int8 *sc;
+
+      for (sc = s; *sc != '\0' && count--; ++sc){
+	  	;
+      }
+
+      return sc - s;
+  }
+
+  static kal_int32 rmmi_skip_atoi(const kal_int8 **format)
+  {
+      kal_int32 field_width = 0;
+
+      while (is_digit(**format))
+          field_width = field_width * 10 + *((*format)++) - '0';
+
+      return field_width;
+  }
+
+
+  static kal_int8 *rmmi_number(kal_int8 *str, long number, kal_int32 base, kal_int32 size, kal_int32 precision, kal_int32 type)
+  {
+      kal_int8            c           = 0;
+      kal_int8            sign        = 0;
+      kal_int8            tmp[66]     = {0,};
+      const kal_int8 *    digits      = lower_digits;
+      kal_int32           i           = 0;
+      kal_int32           position    = 0;
+
+      if (type & LARGE)
+          digits = upper_digits;
+
+      if (type & FLAG_MINUS)
+          type &= ~FLAG_ZERO;
+
+      if (base < 2 || base > 36)
+          return 0;
+
+      c    = (type & FLAG_ZERO) ? '0' : ' ';
+      sign = 0;
+
+      if (type & UN_SIGN)
+      {
+          if (number < 0)
+          {
+              sign   = '-';
+              number = -number;
+              size--;
+          }
+          else if (type & FLAG_PLUS)
+          {
+              sign = '+';
+              size--;
+          }
+          else if (type & FLAG_SPACE)
+          {
+              sign = ' ';
+              size--;
+          }
+      }
+
+      if (type & FLAG_HASH)
+      {
+          if (base == 16)
+              size -= 2;
+          else if (base == 8)
+              size--;
+      }
+
+      i = 0;
+
+      if (number == 0)
+          tmp[i++] = '0';
+      else
+      {
+          while (number != 0)
+          {
+              position = ((kal_uint32) number) % (unsigned)base;
+              tmp[i++] = digits[position];
+              number   = ((kal_uint32) number) / (unsigned) base;
+          }
+      }
+
+      if (i > precision)
+          precision = i;
+
+      size -= precision;
+
+      if (!(type & (FLAG_ZERO | FLAG_MINUS)))
+      {
+          while (size-- > 0)
+              *str++ = ' ';
+      }
+
+      if (sign)
+          *str++ = sign;
+
+      if (type & FLAG_HASH)
+      {
+          if (base == 8)
+              *str++ = '0';
+          else if (base == 16)
+          {
+              *str++ = '0';
+              *str++ = lower_digits[33];
+          }
+      }
+
+      if (!(type & FLAG_MINUS))
+      {
+          while (size-- > 0)
+              *str++ = c;
+      }
+
+      while (i < precision--)
+          *str++ = '0';
+
+      while (i-- > 0)
+          *str++ = tmp[i];
+
+      while (size-- > 0)
+          *str++ = ' ';
+
+      return str;
+  }
+
+  // New rmmi_vsprintf() which is made due to having limitation about argument in MOLY.
+  // It is same with vsprintf() in C
+  // It is not support 'E'/'e'/'G'/'g'/'f'
+  kal_int32 rmmi_vsprintf(kal_int8 *buffer, const kal_int8 *format, va_list argument_list )
+  {
+      kal_int32   str_len         = 0;
+      kal_uint32  number          = 0;
+      kal_int32   nLoop           = 0;
+      kal_int32   base            = 0;
+      kal_int8 *  str_buf         = NULL;
+      kal_int8 *  s_va_arg        = NULL;     // To get the value by va_arg in case of 's'
+
+      kal_int32   flags           = 0;        // Flags for rmmi_number()
+
+      kal_int32   field_width     = 0;        // Width of output field
+      kal_int32   precision       = 0;        // Min. # of lower_digits for integers; max rmmi_number of chars for from string
+      kal_int32   output_length   = 0;        // The correct size of output digits. 'h', 'l', or 'L' for integer fields
+
+      // To get the argument list as format one by one.
+      for (str_buf = buffer; *format; format++)
+      {
+          if (*format != '%')
+          {
+              *str_buf++ = *format;
+              continue;
+          }
+          flags = 0;
+
+      repeat:
+          // For skipping first '%'
+          format++;
+
+          // Flags for rmmi_number()
+          switch (*format)
+          {
+              // FLAG_MINUS-aligned
+              case '-':
+                  flags |= FLAG_MINUS;
+                  goto repeat;
+
+              // Even if the number is positive, '+' is printed in front of the number. Ex) +2
+              case '+':
+                  flags |= FLAG_PLUS;
+                  goto repeat;
+
+              // If there is no sign, the spave is printed in front of the number. Ex) " 123", "-123"
+              case ' ':
+                  flags |= FLAG_SPACE;
+                  goto repeat;
+
+              // Case 1 : If this is used with the format 'o', 'x' and 'X', '0', '0x' and '0X' are printed in from of the number, except 0.
+              // Case 2 :If this is used with the format 'e', 'E' and 'f', the number has the point even if there is no needing point. Ex) 1 >> 1.0
+              // Case 3 : If this is used with the format 'g' and 'G', it is worked as "Case 2". But 0 under the point is not removed. Ex) 123.1200
+              case '#':
+                  flags |= FLAG_HASH;
+                  goto repeat;
+
+              // FLAG_MINUS-aligned and Fill 0 instead of the FLAG_SPACE.
+              case '0':
+                  flags |= FLAG_ZERO;
+                  goto repeat;
+          }
+
+          // Get Width of output field
+          field_width = -1;
+
+          if (is_digit(*format))
+          {
+              field_width = rmmi_skip_atoi(&format);
+          }
+          else if (*format == '*')
+          {
+              format++;
+              field_width = va_arg(argument_list, kal_int32);
+
+              if (field_width < 0)
+              {
+                  field_width = -field_width;
+                  flags |= FLAG_MINUS;
+              }
+          }
+
+          // Get the precision ( .number | .* )
+          precision = -1;
+
+          // Checking '.' to know the precision
+          if (*format == '.')
+          {
+              ++format;
+
+              // 'd'/'i'/'o'/'u'/'x'/'X'  : Minimum number of output digits
+              // 'e'/'E'/'F'              : The number of digits below the decimal point
+              // 'g'/'G'                  : THe number of digits which is possible output
+              // 's'                      : Maximum number of output digits
+              // 'c'                      : No effect
+              if (is_digit(*format))
+                  precision = rmmi_skip_atoi(&format);
+              // Not represented in the format string precision.
+              // BUt it gives a factor behind the precision value.
+              else if (*format == '*')
+              {
+                  ++format;
+                  precision = va_arg(argument_list, kal_int32);
+              }
+
+              if (precision < 0)
+                  precision = 0;
+          }
+
+          // Get the conversion output_length
+          output_length = -1;
+
+          // 'h'  : Handle as 'short int' or 'unsigned short int'. It must be applied at 'i'/'d'/'o'/'u'/'x'/'X'
+          // 'l'  : Handle as 'long int' or 'unsigned long int'.   It must be applied at 'i'/'d'/'o'/'u'/'x'/'X'
+          //        Handle as 'wide chracter' or 'wide string'.    It must be applied at 'c'/'s'
+          // 'L'  : Handle as 'long double'.                       It must be applied at 'e'/'E'/'f'/'g'/'G'
+          if (*format == 'h' || *format == 'l' || *format == 'L')
+          {
+              output_length = *format;
+              format++;
+          }
+
+          // Default base
+          base = 10;
+
+          switch (*format)
+          {
+              // Character
+              case 'c':
+                  if (!(flags & FLAG_MINUS))
+                      while (--field_width > 0)
+                          *str_buf++ = ' ';
+
+                  *str_buf++ = (kal_uint8) va_arg(argument_list, kal_int32);
+
+                  while (--field_width > 0)
+                      *str_buf++ = ' ';
+
+                  continue;
+
+              // String
+              case 's':
+                  s_va_arg = va_arg(argument_list, kal_int8 *);
+
+                  if (!s_va_arg) s_va_arg = (kal_int8*)"<NULL>";
+
+                  str_len = strn_len(s_va_arg, precision);
+
+                  if (!(flags & FLAG_MINUS))
+                      while (str_len < field_width--)
+                          *str_buf++ = ' ';
+
+                  for (nLoop = 0; nLoop < str_len; ++nLoop)
+                      *str_buf++ = *s_va_arg++;
+
+                  while (str_len < field_width--)
+                      *str_buf++ = ' ';
+
+                  continue;
+
+              // Point Address
+              case 'p':
+                  if (field_width == -1)
+                  {
+                      field_width = 2 * sizeof(void *);
+                      flags |= FLAG_ZERO;
+                  }
+
+                  str_buf = rmmi_number(str_buf, (kal_uint32) va_arg(argument_list, void *), 16, field_width, precision, flags);
+                  continue;
+
+              // Do not print anything.
+              // Instead, the argument should have the pointer which points to a signed int.
+              // The number of written characters until now is saved in this pointer.
+              case 'n':
+                  if (output_length == 'l')
+                  {
+                      long *ip = va_arg(argument_list, long *);
+                      *ip = (str_buf - buffer);
+                  }
+                  else
+                  {
+                      kal_int32 *ip = va_arg(argument_list, kal_int32 *);
+                      *ip = (str_buf - buffer);
+                  }
+                  continue;
+
+              // Octal digit
+              case 'o':
+                  base = 8;
+                  break;
+
+              // Hexadecimal digit - Large
+              case 'X':
+                  flags |= LARGE;
+
+              // Hexadecimal digit - Lower
+              case 'x':
+                  base = 16;
+                  break;
+
+              // Decimal digit
+              case 'd':
+              case 'i':
+                  flags |= UN_SIGN;
+
+              // Unsigned Decimal digit
+              case 'u':
+                  break;
+
+              default:
+                  if (*format != '%')
+                      *str_buf++ = '%';
+
+                  if (*format)
+                      *str_buf++ = *format;
+                  else
+                      --format;
+                  continue;
+          }
+
+          if (output_length == 'L')
+          {
+              number = va_arg(argument_list, long );
+          }
+          else if (output_length == 'l')
+          {
+              number = va_arg(argument_list, kal_uint32);
+
+              if (flags & UN_SIGN)
+                  number = (signed long) number;
+          }
+          else if (output_length == 'Z' || output_length == 'z')
+          {
+              number = va_arg(argument_list, size_t);
+          }
+          else if (output_length == 't')
+          {
+              number = va_arg(argument_list, kal_int32);
+          }
+          else if (output_length == 'h')
+          {
+              number = (kal_uint16) va_arg(argument_list, kal_int32);
+
+              if (flags & UN_SIGN)
+                  number = (kal_int16) number;
+          }
+          else
+          {
+              number = va_arg(argument_list, kal_uint32);
+
+              if (flags & UN_SIGN)
+                  number = (kal_int32) number;
+          }
+
+          str_buf = rmmi_number(str_buf, number, base, field_width, precision, flags);
+      }
+
+      return 0;
+  }
+
+  // New sprintf() which is made due to having limitation about argument in MOLY.
+  // It is same with sprintf() in C
+  // It is not support 'E'/'e'/'G'/'g'/'f'
+  kal_int32 rmmi_sprintf(kal_int8 *buf, const kal_int8 *format, ...)
+  {
+      va_list     arg;
+      kal_int32   done    = 0;    // Result : Fail - Minus / Pass - The number of string without NULL
+
+      va_start (arg, format);
+
+      // We need to have rmmi_vaprintf() API to handle variable argument.
+      done = rmmi_vsprintf(buf, format, arg);
+
+      va_end (arg);
+
+      return done;
+  }
+
+  /* MOLY00165083 */
+  void rmmi_start_specific_chennal_search( kal_uint8 src_id, kal_uint8 custom_band_value )
+  {
+	  custom_factory_band_context_struct* rac_factory_ptr_g = cust_fac_ptr_global;
+
+	  rmmi_band_T band;
+	  kal_uint8  gsm_band = 0, supported_gsm_band = 0;
+	  kal_uint32 umts_band = 0, supported_umts_fdd_band = 0;
+	  kal_uint32 lte_band[MAX_SUPPORTED_LTE_BAND]={0}, supported_lte_band[MAX_SUPPORTED_LTE_BAND]={0};
+	  kal_uint32 nr_band[MAX_SUPPORTED_NR_BAND]={0}, supported_nr_band[MAX_SUPPORTED_NR_BAND]={0};
+
+	  rmmi_band_init( &band );
+	#ifdef __AS_SPECIFIC_CHANNEL_SRCH__
+	  gas_custom_set_specific_channel_srch( KAL_TRUE );
+	  uas_custom_set_specific_channel_srch( KAL_TRUE );
+	  eas_custom_set_specific_channel_srch( KAL_TRUE );
+
+	  RMMI_PTR->cust_cmd_src_id = src_id;
+	  /* Start MUSE - ALPS01198329 */
+	  /* The device will make SIM2 flight mode in the MUSE factory test state. */
+	  if( L4C_COMM_PTR->cust_rft_mode == CUST_RFT_MODE_OFF )
+	  {
+		  L4C_COMM_PTR->init_campreq_mode = custom_band_value;
+		  if (L4C_ROOT_PTR->efun_state == SIM1_RADIO_ON)
+		  {
+			  L4C_COMM_PTR->cust_rft_mode = CUST_RFT_MODE_ON;
+		  }
+		  else
+		  {
+			  if ( rmmi_initial_campreq_with_set_rft_mode( ) == KAL_TRUE)
+			  {
+				  kal_prompt_trace(MOD_L4C, "Campreq - Initial RFT mode");
+				  return;
+			  }
+			  else
+			  {
+				  kal_prompt_trace(MOD_L4C, "Campreq - exception - unsupported efun state :%d",
+						  L4C_ROOT_PTR->efun_state);
+				  return;
+			  }
+		  }
+	  }
+	  else if (L4C_COMM_PTR->cust_rft_mode == CUST_RFT_MODE_ENTERING )
+	  {
+		  kal_prompt_trace(MOD_L4C, "Campreq - exception - RFT mode : %d",
+				  L4C_COMM_PTR->cust_rft_mode );
+		  return;
+	  }
+   #endif /* __AS_SPECIFIC_CHANNEL_SRCH__ */
+
+	  rmmi_band_init(&band);
+
+	  if( l4c_nw_get_band_req( src_id,
+			  &gsm_band,
+			  &umts_band,
+			  lte_band,
+			  nr_band,
+			  &supported_gsm_band,
+			  &supported_umts_fdd_band,
+			  supported_lte_band,
+			  supported_nr_band) == KAL_TRUE )
+	  {
+		  kal_prompt_trace(MOD_L4C, "Campreq -Supported Band GSM[%x], UMTS[%x], LTE[%x][%x]",
+				  supported_gsm_band, supported_umts_fdd_band, supported_lte_band[0], supported_lte_band[1]);
+
+		  rmmi_construct_band_value_and_string ( NULL,
+			  custom_band_value,
+			  &band,
+			  supported_gsm_band,
+			  supported_umts_fdd_band,
+			  &supported_lte_band[0],
+			  &supported_nr_band[0]);
+	  }
+	  else
+	  {
+		  kal_prompt_trace(MOD_L4C, "Campreq -l4c_nw_get_band_req- fail!");
+		  return;
+	  }
+
+	  if( band.band_present_bitmap )
+	  {
+		  rac_factory_ptr_g->factory_dynamic_band = custom_band_value;
+		  set_factory_rat_mode(band.band_present_bitmap);
+
+		  if(l4c_nw_set_preferred_band_req( src_id,
+                    band.gsm_band,
+                    band.umts_band,
+                    band.lte_band,
+                    band.nr_band,
+                    KAL_TRUE ) == KAL_FALSE )
+		  {
+			  kal_prompt_trace(MOD_L4C, "Campreq - l4c_nw_set_preferred_band_req- fail!");
+			  return;
+		  }
+	  }
+	  else
+	  {
+			  kal_prompt_trace(MOD_L4C, "Campreq - l4c_nw_set_preferred_band_req- fail!");
+			  return;
+	  }
+
+
+	  return;
+  }
+  /* MOLY00165083 */
+
+  //-- rmmi_sprintf ----------------------------------------
+
+
+/****************************************/
+/* End of Custom AT command APIs                      */
+/****************************************/
+
+
+/****************************************/
+/* Start of Custom AT command                            */
+/****************************************/
+
+#if !defined(__TC01_SIM_LOCK_OFF__) && defined(LGE_FW_COMMON)
+  lgoem_at_vslt_sim_type tc01_vt_sml_Check(kal_uint8 cat, kal_uint8 *code, kal_uint8 len)
+  {
+	  lgoem_at_vslt_sim_type  result									  = LGOEM_VSLT_SIM_LOCK;
+	  kal_uint8 			  idx										  = 0;
+
+	  kal_uint8 			  sltype									  = 0;
+	  FactoryNetworkCode	  ntcode[LGE_FAC_MAX_NETWORK_CODE_LIST_NUM];   // = {0x0F};
+	  kal_uint16			  ntcode_num								  = 0;
+	  kal_uint8 			  test_NT_code1[6]							  = {0x04,0x05,0x00,0x00,0x00,0x0f};
+	  kal_uint8 			  test_NT_code2[6]							  = {0x00,0x00,0x01,0x00,0x01,0x0f};
+
+#ifdef __CHILE_COUNTRY_SIM_LOCK__
+	  kal_bool				  nsLockFlag								  = KAL_FALSE;
+#endif
+
+	  kal_mem_set(ntcode, 0x0F, sizeof(ntcode));
+
+	  //Check wheather test sim or not 001/01, 450 00
+	  if ((0 == kal_mem_cmp(code, test_NT_code1, 6)) || (0 == kal_mem_cmp(code, test_NT_code2, 6)))
+		return LGOEM_VSLT_SIM_UNLOCK; //match
+
+	  if(KAL_TRUE == LGE_FacReadSimLockType(&sltype))
+	  {
+		if((cat & sltype) != cat) //disable
+			return LGOEM_VSLT_NONE;
+	  }
+	  else
+		return LGOEM_VSLT_SIM_ERROR;
+
+	  if (KAL_FALSE == LGE_FacReadNetworkCodeListNum(&ntcode_num))
+		return LGOEM_VSLT_SIM_ERROR;
+
+	  if (KAL_FALSE == LGE_FacReadNetworkCode(ntcode, ntcode_num))
+		return LGOEM_VSLT_SIM_ERROR;
+
+#ifdef __CHILE_COUNTRY_SIM_LOCK__
+	  switch(cat)
+	  {
+		  //MCC+MNC
+		  case LGE_FAC_SLTYPE_MASK_NETWORK:
+			  if(TC01_SML_SIZE_OF_CAT_N == len)
+			  {
+				  for(idx = 0; idx < ntcode_num; idx++)
+				  {
+					  if ((ntcode[idx].Mnc[0] == 0x0f) && (ntcode[idx].Mnc[1] == 0x0f) && (ntcode[idx].Mnc[2] == 0x0f))
+					  {
+						  if((kal_mem_cmp(code,(ntcode[idx].Mcc),LGE_FAC_NC_MCC_LEN)==0))
+						  {
+							  result = LGOEM_VSLT_SIM_UNLOCK; //match
+							  break;
+						  }
+					  }
+					  else
+					  {
+						  if((kal_mem_cmp(code,(ntcode[idx].Mcc),LGE_FAC_NC_MCC_LEN)==0)
+							  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN]),(ntcode[idx].Mnc),LGE_FAC_NC_MNC_LEN)==0))
+						  {
+							  result = LGOEM_VSLT_SIM_UNLOCK; //match
+							  break;
+						  }
+					  }
+				  }
+			  }
+			  break;
+		  //MCC+MNC+SUBSET
+		  case LGE_FAC_SLTYPE_MASK_NETWORK_SUBSET:
+			  if(TC01_SML_SIZE_OF_CAT_NS == len)
+			  {
+				  for(idx = 0; idx < ntcode_num; idx++)
+				  {
+					  nsLockFlag = KAL_FALSE;
+					  if ((ntcode[idx].Mnc[0] == 0x0f) && (ntcode[idx].Mnc[1] == 0x0f) && (ntcode[idx].Mnc[2] == 0x0f))
+					  {
+						  if(kal_mem_cmp(code,(ntcode[idx].Mcc),LGE_FAC_NC_MCC_LEN)==0)
+						  {
+							  nsLockFlag = KAL_TRUE;
+						  }
+					  }
+					  else
+					  {
+						  if((kal_mem_cmp(code,(ntcode[idx].Mcc),LGE_FAC_NC_MCC_LEN)==0)
+							  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN]),(ntcode[idx].Mnc),LGE_FAC_NC_MNC_LEN)==0))
+						  {
+							  nsLockFlag = KAL_TRUE;
+						  }
+					  }
+					  if(nsLockFlag == KAL_TRUE)
+					  {
+						  if((ntcode[idx].Subset[0] == 0x0F) && (ntcode[idx].Subset[1] != 0x0F)) //just compare the digit not 0x0F
+						  {
+							  if(code[LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN+1] == ntcode[idx].Subset[1])
+							  {
+								  result = LGOEM_VSLT_SIM_UNLOCK; //match
+								  break;
+							  }
+						  }
+						  else if((ntcode[idx].Subset[0] != 0x0F) &&(ntcode[idx].Subset[1]== 0x0F))
+						  {
+							  if(code[LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN] == ntcode[idx].Subset[0])
+							  {
+								  result = LGOEM_VSLT_SIM_UNLOCK; //match
+								  break;
+							  }
+						  }
+						  else if((ntcode[idx].Subset[0] == 0x0F) &&(ntcode[idx].Subset[1]== 0x0F)) //both = 0x0F, then pass without comparison
+						  {
+							  result = LGOEM_VSLT_SIM_UNLOCK; //match
+							  break;
+						  }
+						  else
+						  {
+							  if(kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN]),\
+								  (ntcode[idx].Subset),LGE_FAC_NC_SUBSET_LEN)==0)
+							  {
+								  result = LGOEM_VSLT_SIM_UNLOCK; //match
+								  break;
+							  }
+						  }
+					  }
+				  }
+			  }
+			  break;
+		  //MCC+MNC+GID1
+		  case LGE_FAC_SLTYPE_MASK_SERVICE_PROVIDER:
+			  if(TC01_SML_SIZE_OF_CAT_SP == len)
+			  {
+				  for(idx = 0; idx < ntcode_num; idx++)
+				  {
+					  if ((ntcode[idx].Mnc[0] == 0x0f) && (ntcode[idx].Mnc[1] == 0x0f) && (ntcode[idx].Mnc[2] == 0x0f))
+					  {
+						  if((kal_mem_cmp(code,(ntcode[idx].Mcc),LGE_FAC_NC_MCC_LEN)==0)
+							  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN]),(ntcode[idx].Gid1),LGE_FAC_NC_GID1_LEN)==0))
+						  {
+							  result = LGOEM_VSLT_SIM_UNLOCK; //match
+							  break;
+						  }
+					  }
+					  else
+					  {
+						  if((kal_mem_cmp(code,(ntcode[idx].Mcc),LGE_FAC_NC_MCC_LEN)==0)
+							  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN]),(ntcode[idx].Mnc),LGE_FAC_NC_MNC_LEN)==0)
+							  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN]),(ntcode[idx].Gid1),LGE_FAC_NC_GID1_LEN)==0))
+						  {
+							  result = LGOEM_VSLT_SIM_UNLOCK; //match
+							  break;
+						  }
+					  }
+				  }
+			  }
+			  break;
+		  //MCC+MNC+GID1+GID2
+		  case LGE_FAC_SLTYPE_MASK_COOPERATE:
+			  if(TC01_SML_SIZE_OF_CAT_C == len)
+			  {
+				  for(idx = 0; idx < ntcode_num; idx++)
+				  {
+					  if ((ntcode[idx].Mnc[0] == 0x0f) && (ntcode[idx].Mnc[1] == 0x0f) && (ntcode[idx].Mnc[2] == 0x0f))
+					  {
+						  if((kal_mem_cmp(code,(ntcode[idx].Mcc),LGE_FAC_NC_MCC_LEN)==0)
+						  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN]),(ntcode[idx].Gid1),LGE_FAC_NC_GID1_LEN)==0)
+						  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN+LGE_FAC_NC_GID1_LEN]),(ntcode[idx].Gid2),LGE_FAC_NC_GID2_LEN)==0))
+						  {
+							  result = LGOEM_VSLT_SIM_UNLOCK; //match
+							  break;
+						  }
+					  }
+					  else
+					  {
+						  if((kal_mem_cmp(code,(ntcode[idx].Mcc),LGE_FAC_NC_MCC_LEN)==0)
+						  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN]),(ntcode[idx].Mnc),LGE_FAC_NC_MNC_LEN)==0)
+						  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN]),(ntcode[idx].Gid1),LGE_FAC_NC_GID1_LEN)==0)
+						  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN+LGE_FAC_NC_GID1_LEN]),(ntcode[idx].Gid2),LGE_FAC_NC_GID2_LEN)==0))
+						  {
+							  result = LGOEM_VSLT_SIM_UNLOCK; //match
+							  break;
+						  }
+					  }
+				  }
+			  }
+			  break;
+
+		  default:
+			  break;
+	  }
+#else   //__CHILE_COUNTRY_SIM_LOCK__
+	  switch(cat)
+	  {
+		  case LGE_FAC_SLTYPE_MASK_NETWORK:
+			  if(TC01_SML_SIZE_OF_CAT_N == len)
+			  {
+				  for(idx = 0; idx < ntcode_num; idx++)
+				  {
+					  if((kal_mem_cmp(code,(ntcode[idx].Mcc),LGE_FAC_NC_MCC_LEN)==0)
+						  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN]),(ntcode[idx].Mnc),LGE_FAC_NC_MNC_LEN)==0))
+					  {
+						  result = LGOEM_VSLT_SIM_UNLOCK; //match
+						  break;
+					  }
+				  }
+			  }
+			  break;
+
+		  case LGE_FAC_SLTYPE_MASK_NETWORK_SUBSET:
+			  if(TC01_SML_SIZE_OF_CAT_NS == len)
+			  {
+				  for(idx = 0; idx < ntcode_num; idx++)
+				  {
+					  if((kal_mem_cmp(code,(ntcode[idx].Mcc),LGE_FAC_NC_MCC_LEN)==0)
+						  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN]),(ntcode[idx].Mnc),LGE_FAC_NC_MNC_LEN)==0))
+					  {
+						  if((ntcode[idx].Subset[0] == 0x0F) && (ntcode[idx].Subset[1] != 0x0F)) //just compare the digit not 0x0F
+						  {
+							  if(code[LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN+1] == ntcode[idx].Subset[1])
+							  {
+								  result = LGOEM_VSLT_SIM_UNLOCK; //match
+								  break;
+							  }
+						  }
+						  else if((ntcode[idx].Subset[0] != 0x0F) &&(ntcode[idx].Subset[1]== 0x0F))
+						  {
+							  if(code[LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN] == ntcode[idx].Subset[0])
+							  {
+								  result = LGOEM_VSLT_SIM_UNLOCK; //match
+								  break;
+							  }
+						  }
+						  else if((ntcode[idx].Subset[0] == 0x0F) &&(ntcode[idx].Subset[1]== 0x0F)) //both = 0x0F, then pass without comparison
+						  {
+							  result = LGOEM_VSLT_SIM_UNLOCK; //match
+							  break;
+						  }
+						  else
+						  {
+							  if(kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN]),\
+								  (ntcode[idx].Subset),LGE_FAC_NC_SUBSET_LEN)==0)
+							  {
+								  result = LGOEM_VSLT_SIM_UNLOCK; //match
+								  break;
+							  }
+						  }
+					  }
+				  }
+			  }
+			  break;
+
+		  case LGE_FAC_SLTYPE_MASK_SERVICE_PROVIDER:
+			  if(TC01_SML_SIZE_OF_CAT_SP == len)
+			  {
+				  for(idx = 0; idx < ntcode_num; idx++)
+				  {
+					  if((kal_mem_cmp(code,(ntcode[idx].Mcc),LGE_FAC_NC_MCC_LEN)==0)
+						  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN]),(ntcode[idx].Mnc),LGE_FAC_NC_MNC_LEN)==0)
+						  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN]),(ntcode[idx].Gid1),LGE_FAC_NC_GID1_LEN)==0))
+					  {
+						  result = LGOEM_VSLT_SIM_UNLOCK; //match
+						  break;
+					  }
+				  }
+			  }
+			  break;
+
+		  case LGE_FAC_SLTYPE_MASK_COOPERATE:
+			  if(TC01_SML_SIZE_OF_CAT_C == len)
+			  {
+				  for(idx = 0; idx < ntcode_num; idx++)
+				  {
+					  if((kal_mem_cmp(code,(ntcode[idx].Mcc),LGE_FAC_NC_MCC_LEN)==0)
+					  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN]),(ntcode[idx].Mnc),LGE_FAC_NC_MNC_LEN)==0)
+					  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN]),(ntcode[idx].Gid1),LGE_FAC_NC_GID1_LEN)==0)
+					  && (kal_mem_cmp(&(code[LGE_FAC_NC_MCC_LEN+LGE_FAC_NC_MNC_LEN+LGE_FAC_NC_GID1_LEN]),(ntcode[idx].Gid2),LGE_FAC_NC_GID2_LEN)==0))
+					  {
+						  result = LGOEM_VSLT_SIM_UNLOCK; //match
+						  break;
+					  }
+				  }
+			  }
+			  break;
+
+		  default:
+			  break;
+	  }
+#endif //__CHILE_COUNTRY_SIM_LOCK__
+	  return result;
+  }
+
+
+#endif /* #if !defined(__TC01_SIM_LOCK_OFF__) && defined(LGE_FW_COMMON) */
+
+	/*****************************************************************************
+	 * FUNCTION
+	 *	  rmmi_sltype_hdlr
+	 * DESCRIPTION
+	 *
+	 * PARAMETERS
+	 *
+	 * RETURNS
+	 *
+	 *****************************************************************************/
+	void rmmi_sltype_hdlr(rmmi_string_struct *source_string_ptr)
+	{
+		kal_uint8	 *	rspstr_ptr		   = NULL;		  /* response string and initialization */
+		kal_uint16		rspstr_len		   = 0; 		  /* string length variable */
+#if !defined(__TC01_SIM_LOCK_OFF__) && defined(LGE_FW_COMMON)
+		kal_bool		ret_val 		   = KAL_FALSE;
+		kal_uint8		simLockType 	   = 0;
+		kal_uint8		fusgFlag		   = 0;
+		kal_bool		isUnlockCodeValid  = KAL_FALSE;
+		kal_bool		isNetworkCodeValid = KAL_FALSE;
+		kal_uint8		parseError		   = 0;
+
+		kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+		rspstr_ptr = &rmmi_rsp_buf[0];
+
+		if ( source_string_ptr == NULL )
+		{
+			rmmi_custom_dbg_trace("rmmi_issim_hdlr(), source_string_ptr is NULL!!!");
+		}
+		else
+		{
+		   switch(source_string_ptr->cmd_mode)
+		   {
+			   case RMMI_ACTIVE_MODE:				   /* AT%SLTYPE   */
+			   case RMMI_READ_MODE: 				   /* AT%SLTYPE?  */
+			   case RMMI_TEST_MODE: 				   /* AT%SLTYPE=? */
+				   if( LGE_FacReadSimLockType(&simLockType) == KAL_TRUE )
+				   {
+					   RMMI_PTR->arg_list[0] = (void*)&simLockType;
+					   rspstr_len  = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "%d", RMMI_PTR->arg_list, 1);
+					   ret_val	   = KAL_TRUE;
+				   }
+				   else
+					   rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "SLTYPE READ ERROR", RMMI_PTR->arg_list, 0);
+				   break;
+				case RMMI_SET_OR_EXECUTE_MODE:		   /* AT%SLTYPE=XXX... */
+					if( LGE_FacReadFusgFlag(&fusgFlag) == KAL_TRUE )
+					{
+						if( (fusgFlag == 0) && (LGE_FacCheckUnlockCodeValidness(&isUnlockCodeValid) == KAL_TRUE) )
+						{
+							if( isUnlockCodeValid == KAL_TRUE )
+							{
+								simLockType = (kal_uint8)rmmi_get_int_ext(&parseError, source_string_ptr, (kal_uint8)RMMI_COMMA);
+								if((parseError == RMMI_PARSE_OK)													&&
+								   (simLockType <= LGE_FAC_SLTYPE_VALID_MASK)										&&
+								   (LGE_FacCheckNetworkCodeValidness(simLockType, &isNetworkCodeValid) == KAL_TRUE) 	)
+								{
+									if((isNetworkCodeValid == KAL_TRUE) && (LGE_FacWriteSimLockType(simLockType, KAL_TRUE) == KAL_TRUE))
+									{
+										rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "SLTYPE OK", RMMI_PTR->arg_list, 0);
+										ret_val = KAL_TRUE;
+									}
+								}
+							}
+						}
+					}
+					 if(ret_val == KAL_FALSE)
+					   rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "SLTYPE ERROR", RMMI_PTR->arg_list, 0);
+					break;
+				default:
+					rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "CMD MODE FAIL", RMMI_PTR->arg_list, 0);
+					break;
+			}
+		}
+		if(ret_val == KAL_TRUE)
+			RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+		else
+			RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR   );
+
+#else  // #if !defined(__TC01_SIM_LOCK_OFF__) && defined(LGE_FW_COMMON)
+		RMMI_CUST_SET_RSP_TYPE(RMMI_CUST_RSP_ERROR);
+#endif // #if !defined(__TC01_SIM_LOCK_OFF__) && defined(LGE_FW_COMMON)
+		rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len);
+		return;
+	}
+
+
+
+	/*****************************************************************************
+	 * FUNCTION
+	 *	  rmmi_vslt3_hdlr
+	 * DESCRIPTION
+	 *
+	 * PARAMETERS
+	 *
+	 * RETURNS
+	 *
+	 *****************************************************************************/
+	void rmmi_vslt3_hdlr(rmmi_string_struct *source_string_ptr)
+	{
+		kal_uint8	 *				rspstr_ptr							= NULL; 	   /* response string and initialization */
+		kal_uint16					rspstr_len							= 0;		   /* string length variable */
+#if !defined(__TC01_SIM_LOCK_OFF__) && defined(LGE_FW_COMMON)
+		kal_bool					result								= KAL_TRUE;
+		kal_uint8					parseError							= 0;
+		kal_uint8					readValue							= 0;
+		kal_uint8					loop								= 0;
+		kal_uint8					loop2								= 0;
+		kal_uint8					simLockType 						= 0;
+		kal_uint8					readCount							= 0;
+		unsigned char				rsp_str[VSLT_MAX_LEN_3] 			= {0x00,};
+		FactoryNetworkCode *		pNetworkCode						= NULL;
+		BOOL						bLockCheck							= FALSE;
+		kal_uint8					cat 								= 0;
+		kal_uint8					len 								= 0;
+		kal_uint8					loop_sim_num						= 0;
+		rmmi_string_struct *		vslt_string_ptr 					= NULL;
+		rmmi_string_struct			tmp_vslt_string_ptr[1]; 			// = {NULL, };
+		kal_uint8					tempstr[VSLT_MAX_LEN_3] 			= {0,};
+		kal_uint8					temp								= 0;
+		kal_uint8					lockCount							= 0;
+
+		unsigned char				code[VSLT_SIM_3][LGE_FAC_NETWORK_CODE_LEN]; 				   //  = {0x0F,};
+		lgoem_at_vslt_sim_type		eReturnType[VSLT_MAX_NUM_3][VSLT_SIM_3];					   //  = {0,};
+		lgoem_at_vslt_sim_type		temp_result[VSLT_SIM_3] 										= {0,};
+		unsigned char				pNtCode[VSLT_MAX_NUM_3*VSLT_SIM_3][LGE_FAC_NETWORK_CODE_LEN+4]; // = {0x00,};
+		kal_uint8					index															= 0;
+		unsigned char				tmpStr_tmp[LGE_FAC_NETWORK_CODE_LEN+4]							= {0x00,};
+
+		rmmi_custom_dbg_trace("rmmi_vslt3_hdlr()");
+
+		kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+		kal_mem_set(tmp_vslt_string_ptr, 0, sizeof(tmp_vslt_string_ptr));
+		kal_mem_set(code, 0, sizeof(code));
+		kal_mem_set(eReturnType, 0, sizeof(eReturnType));
+		kal_mem_set(pNtCode, 0, sizeof(pNtCode));
+
+		rspstr_ptr = &rmmi_rsp_buf[0];
+
+		if ( source_string_ptr == NULL )
+		{
+			rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+			RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+		}
+		else
+		{
+			/* ---------------------------- Implement here ---------------------------*/
+			switch(source_string_ptr->cmd_mode)
+			{
+				/* AT%VSLT3 */
+				case RMMI_ACTIVE_MODE:
+					rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NOT IMPLEMENT", RMMI_PTR->arg_list, 0);
+					RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+					break;
+				/* AT%VSLT3? */
+				case RMMI_READ_MODE:
+				/* AT%VSLT3=? */
+				case RMMI_TEST_MODE:
+					rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "VERIFY NTCODE", RMMI_PTR->arg_list, 0);
+					RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+					break;
+				/* AT%VSLT3=XXX... */
+				case RMMI_SET_OR_EXECUTE_MODE:
+				{
+					//kal_uint8  btAddr[LGE_FAC_BT_ADDR_LEN]  = {0,};
+					kal_uint8  imei[LGE_FAC_IMEI_LEN]		= {0,};
+					kal_uint16 networkCodeListNumber		= 0;
+					kal_uint8  fusgFlag 					= 0;
+
+					//Check BT address / IMEI / NTCODE list number / Fusg Flag
+					if( !LGE_FacReadBtAddr				(btAddr 				)||
+						!LGE_FacReadImei				(2, imei				)||
+						!LGE_FacReadNetworkCodeListNum	(&networkCodeListNumber )||
+						!LGE_FacReadFusgFlag			(&fusgFlag				)  )
+					{
+						rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR, PREVIOUS CONDITION CHECK", RMMI_PTR->arg_list, 0);
+						break;
+					}
+
+					result = LGE_FacReadSimLockType( &simLockType );
+
+					if( result == KAL_TRUE )
+					{
+						if( ( simLockType & LGE_FAC_SLTYPE_VALID_MASK ) != 0 )
+						{
+							/* read NTCODE list number */
+							readValue = (kal_uint8)rmmi_get_int_ext(&parseError, source_string_ptr, (kal_uint8)RMMI_COMMA);
+							if( ( parseError == RMMI_PARSE_OK ) && ( readValue <= VSLT_MAX_NUM_3 ) )
+							{
+								networkCodeListNumber = readValue;
+								if( networkCodeListNumber == 0 )
+								{
+									/* Network Code List Number value is Zero*/
+									rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR ( NETWORK CODE LIST NUMBER FAIL )", RMMI_PTR->arg_list, 0);
+									break;
+								}
+								else
+								{
+									pNetworkCode				= (FactoryNetworkCode *)get_ctrl_buffer(sizeof(FactoryNetworkCode)*networkCodeListNumber);
+									vslt_string_ptr 			= &tmp_vslt_string_ptr[0];
+									vslt_string_ptr->string_ptr = &tempstr[0];
+
+									if( pNetworkCode != NULL )
+									{
+										for( loop=0 ; loop<networkCodeListNumber ; loop++ )
+										{
+											if(loop > 0)
+												source_string_ptr->index = source_string_ptr->index+2;	//Move to next pair
+
+											for( loop_sim_num=0 ; loop_sim_num<VSLT_SIM_3 ; loop_sim_num++ )
+											{
+												if(loop_sim_num == 0)
+													source_string_ptr->index++;
+
+												kal_mem_set(vslt_string_ptr->string_ptr, 0x0F, sizeof(vslt_string_ptr->string_ptr));
+												rmmi_get_str_ext(&parseError, source_string_ptr, (kal_uint8)RMMI_FORWARD_SLASH, LGE_FAC_NETWORK_CODE_LEN+4, vslt_string_ptr->string_ptr);
+												vslt_string_ptr->index = 0;
+
+												sprintf((char*)pNtCode[index], (char*)vslt_string_ptr->string_ptr);   // to print on hyper terminal
+												++index;
+
+												temp = loop + 1;
+
+												readValue = (kal_uint8)rmmi_get_hex_ext(&parseError, (rmmi_string_struct*)vslt_string_ptr, (kal_uint8)RMMI_COMMA, LGE_FAC_NC_MCC_LEN, (pNetworkCode+loop)->Mcc, &readCount);
+												if( ( parseError != RMMI_PARSE_OK ) || ( readCount != LGE_FAC_NC_MCC_LEN ) )
+												{
+													RMMI_PTR->arg_list[0] = (void*)&(temp);
+													rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( MCC-%d )", RMMI_PTR->arg_list, 1);
+													networkCodeListNumber = 0;
+													break;
+												}
+												readValue = (kal_uint8)rmmi_get_hex_ext(&parseError, (rmmi_string_struct*)vslt_string_ptr, (kal_uint8)RMMI_COMMA, LGE_FAC_NC_MNC_LEN, (pNetworkCode+loop)->Mnc, &readCount);
+												if( ( parseError != RMMI_PARSE_OK ) || ( readCount != LGE_FAC_NC_MNC_LEN ) )
+												{
+													RMMI_PTR->arg_list[0] = (void*)&(temp);
+													rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( MNC-%d )", RMMI_PTR->arg_list, 1);
+													networkCodeListNumber = 0;
+													break;
+												}
+												readValue = (kal_uint8)rmmi_get_hex_ext(&parseError, (rmmi_string_struct*)vslt_string_ptr, (kal_uint8)RMMI_COMMA, LGE_FAC_NC_GID1_LEN, (pNetworkCode+loop)->Gid1, &readCount);
+												if( ( parseError != RMMI_PARSE_OK ) || ( readCount != LGE_FAC_NC_GID1_LEN ) )
+												{
+													RMMI_PTR->arg_list[0] = (void*)&(temp);
+													rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( GID1-%d )", RMMI_PTR->arg_list, 1);
+													networkCodeListNumber = 0;
+													break;
+												}
+												readValue = (kal_uint8)rmmi_get_hex_ext(&parseError, (rmmi_string_struct*)vslt_string_ptr, (kal_uint8)RMMI_COMMA, LGE_FAC_NC_GID2_LEN, (pNetworkCode+loop)->Gid2, &readCount);
+												if( ( parseError != RMMI_PARSE_OK ) || ( readCount != LGE_FAC_NC_GID2_LEN ) )
+												{
+													RMMI_PTR->arg_list[0] = (void*)&(temp);
+													rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( GID2-%d )", RMMI_PTR->arg_list, 1);
+													networkCodeListNumber = 0;
+													break;
+												}
+												readValue = (kal_uint8)rmmi_get_hex_ext(&parseError, (rmmi_string_struct*)vslt_string_ptr, (kal_uint8)RMMI_COMMA, LGE_FAC_NC_SUBSET_LEN, (pNetworkCode+loop)->Subset, &readCount);
+												if( ( parseError != RMMI_PARSE_OK ) || ( readCount != LGE_FAC_NC_SUBSET_LEN ) )
+												{
+													RMMI_PTR->arg_list[0] = (void*)&(temp);
+													rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( SUBSET-%d )", RMMI_PTR->arg_list, 1);
+													networkCodeListNumber = 0;
+													break;
+												}
+
+												//init return result value
+												eReturnType[loop][loop_sim_num] = LGOEM_VSLT_NONE;
+												temp_result[loop_sim_num]		= LGOEM_VSLT_NONE;
+												bLockCheck						= FALSE;
+
+												kal_mem_set(code, 0x00, sizeof(code));
+												for (loop2=0; loop2 <3; loop2++)
+												{
+													code[loop_sim_num][loop2]					 = (pNetworkCode+loop)->Mcc[loop2];
+													code[loop_sim_num][loop2+LGE_FAC_NC_MCC_LEN] = (pNetworkCode+loop)->Mnc[loop2];
+												}
+
+												for(cat = LGE_FAC_SLTYPE_MASK_NETWORK; cat <= LGE_FAC_SLTYPE_MASK_COOPERATE; cat = cat<<1)
+												{
+													switch(cat)
+													{
+														//MCC+MNC
+														case LGE_FAC_SLTYPE_MASK_NETWORK:
+															len = TC01_SML_SIZE_OF_CAT_N;
+															break;
+														//MCC+MNC+SUBSET
+														case LGE_FAC_SLTYPE_MASK_NETWORK_SUBSET:
+															for (loop2 =0 ; loop2 < LGE_FAC_NC_SUBSET_LEN ; loop2++)
+																	code[loop_sim_num][loop2+6] = (pNetworkCode+loop)->Subset[loop2];
+															len = TC01_SML_SIZE_OF_CAT_NS;
+															break;
+														//MCC+MNC+GID1
+														case LGE_FAC_SLTYPE_MASK_SERVICE_PROVIDER:
+															for (loop2 =0 ; loop2 < LGE_FAC_NC_GID1_LEN ; loop2++)
+															   code[loop_sim_num][loop2+6] = (pNetworkCode+loop)->Gid1[loop2];
+															len = TC01_SML_SIZE_OF_CAT_SP;
+															break;
+														//MCC+MNC+GID1+GID2
+														case LGE_FAC_SLTYPE_MASK_COOPERATE:
+															for (loop2 =0 ; loop2 < LGE_FAC_NC_GID2_LEN ; loop2++)
+															{
+																code[loop_sim_num][loop2+6]  = (pNetworkCode+loop)->Gid1[loop2];
+																code[loop_sim_num][loop2+14] = (pNetworkCode+loop)->Gid2[loop2];
+															}
+															len = TC01_SML_SIZE_OF_CAT_C;
+															break;
+														default:
+															break;
+													}
+
+													//Main Check routin : comparison with VSLT input and NT code database
+													temp_result[loop_sim_num]		= eReturnType[loop][loop_sim_num];
+													eReturnType[loop][loop_sim_num] = tc01_vt_sml_Check(cat, *(code+loop_sim_num), len);
+
+													if ( eReturnType[loop][loop_sim_num] == LGOEM_VSLT_NONE )
+													{
+														eReturnType[loop][loop_sim_num] = temp_result[loop_sim_num];
+													}
+													else if (eReturnType[loop][loop_sim_num] == LGOEM_VSLT_SIM_ERROR)
+													{
+														rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "Security Lock data read Error", RMMI_PTR->arg_list, 0);
+														break;
+													}
+												}
+											}
+										}
+									}
+									else
+									{
+										rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR (MEM ALLOC FAIL)", RMMI_PTR->arg_list, 0);
+									}
+
+									for(loop = 0; loop<networkCodeListNumber; loop++)
+									{
+										if((eReturnType[loop][0] == LGOEM_VSLT_SIM_LOCK) &&
+										   (eReturnType[loop][1] == LGOEM_VSLT_SIM_LOCK) &&
+										   (eReturnType[loop][2] == LGOEM_VSLT_SIM_LOCK)	)
+										{
+											bLockCheck = TRUE;
+											lockCount++;
+										}
+									}
+
+									if (networkCodeListNumber > 0)
+									{
+										//All comparison result were unlock case
+										if(!bLockCheck)
+										{
+											rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "SIM UNLOCK", RMMI_PTR->arg_list, 0);
+										}
+										//If Simlock VSLT code was detected, make response list string via AT command.
+										else
+										{
+											kal_mem_set (rsp_str, 0x00, sizeof(rsp_str));
+											sprintf((char*)rsp_str, "%c\"SIM LOCK\"", 0x02	 );
+											rmmi_write_to_uart((kal_uint8*) rsp_str, strlen((char*)rsp_str), KAL_TRUE);
+
+											for(loop = 0; loop<networkCodeListNumber; loop++)
+											{
+												if((eReturnType[loop][0] == LGOEM_VSLT_SIM_LOCK) &&
+												   (eReturnType[loop][1] == LGOEM_VSLT_SIM_LOCK) &&
+												   (eReturnType[loop][2] == LGOEM_VSLT_SIM_LOCK)	)
+												{
+													lockCount--;
+													kal_mem_set (rsp_str, 0x00, sizeof(rsp_str));
+													sprintf((char*)rsp_str, "\"");
+
+													for( loop_sim_num=0 ; loop_sim_num<VSLT_SIM_3 ; loop_sim_num++ )
+													{
+														kal_mem_set(tmpStr_tmp, 0x00, sizeof(tmpStr_tmp));
+														rmmi_sprintf((kal_int8*)tmpStr_tmp, (kal_int8*)"%c%c%c,%c%c%c,%c%c%c%c%c%c%c%c,%c%c%c%c%c%c%c%c,%c%c",
+														pNtCode[loop*VSLT_SIM_3+loop_sim_num][0],  pNtCode[loop*VSLT_SIM_3+loop_sim_num][1],  pNtCode[loop*VSLT_SIM_3+loop_sim_num][2], 											//MCC
+														pNtCode[loop*VSLT_SIM_3+loop_sim_num][4],  pNtCode[loop*VSLT_SIM_3+loop_sim_num][5],  pNtCode[loop*VSLT_SIM_3+loop_sim_num][6], 											//MNC
+														pNtCode[loop*VSLT_SIM_3+loop_sim_num][8],  pNtCode[loop*VSLT_SIM_3+loop_sim_num][9],  pNtCode[loop*VSLT_SIM_3+loop_sim_num][10], pNtCode[loop*VSLT_SIM_3+loop_sim_num][11], //GID1
+														pNtCode[loop*VSLT_SIM_3+loop_sim_num][12], pNtCode[loop*VSLT_SIM_3+loop_sim_num][13], pNtCode[loop*VSLT_SIM_3+loop_sim_num][14], pNtCode[loop*VSLT_SIM_3+loop_sim_num][15],
+														pNtCode[loop*VSLT_SIM_3+loop_sim_num][17], pNtCode[loop*VSLT_SIM_3+loop_sim_num][18], pNtCode[loop*VSLT_SIM_3+loop_sim_num][19], pNtCode[loop*VSLT_SIM_3+loop_sim_num][20], //GID2
+														pNtCode[loop*VSLT_SIM_3+loop_sim_num][21], pNtCode[loop*VSLT_SIM_3+loop_sim_num][22], pNtCode[loop*VSLT_SIM_3+loop_sim_num][23], pNtCode[loop*VSLT_SIM_3+loop_sim_num][24],
+														pNtCode[loop*VSLT_SIM_3+loop_sim_num][26], pNtCode[loop*VSLT_SIM_3+loop_sim_num][27]																					   );//Subset
+
+														strncat((char*)rsp_str, (char*)tmpStr_tmp, (sizeof(rsp_str) - strlen((char*)rsp_str) -1));
+
+														if(loop_sim_num < (VSLT_SIM_3-1))
+														{
+															strncat((char*)rsp_str, "/", (sizeof(rsp_str) - strlen((char*)rsp_str) -1));
+														}
+													}
+													if(lockCount == 0)
+													{
+														sprintf((char*)tmpStr_tmp, "\"%c", 0x03 );
+														strncat((char*)rsp_str, (char*)tmpStr_tmp, (sizeof(rsp_str) - strlen((char*)rsp_str) -1));
+													}
+													else
+													{
+														strncat((char*)rsp_str, "\"", (sizeof(rsp_str) - strlen((char*)rsp_str) -1));
+													}
+													rmmi_write_to_uart((kal_uint8*) rsp_str, strlen((char*)rsp_str), KAL_TRUE);
+												}
+											}
+										}
+									}
+
+									if( pNetworkCode != NULL )
+									{
+										free_ctrl_buffer(pNetworkCode);
+										pNetworkCode = NULL;
+									}
+								}
+							}
+							else if( ( parseError == RMMI_PARSE_OK ) && ( readValue > VSLT_MAX_NUM_3 ) )
+							{
+								rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "Virtual SIM lock count over fail", RMMI_PTR->arg_list, 0);
+							}
+							else
+							{
+								rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( PARSE ERROR )", RMMI_PTR->arg_list, 0);
+							}
+						}
+						else
+						{
+							rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "SIM_LOCK ERROR", RMMI_PTR->arg_list, 0);
+						}
+					}
+					else
+					{
+						rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "SIM_LOCK TYPE READ ERROR", RMMI_PTR->arg_list, 0);
+					}
+					RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+					break;
+				}
+
+				default:
+					RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+					break;
+			}
+
+			/* ---------------------------- End of Implementation----------------------*/
+		}
+#endif // #if !defined(__TC01_SIM_LOCK_OFF__) && defined(LGE_FW_COMMON)
+		rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len);
+		return;
+	}
+
+
+	/*****************************************************************************
+	 * FUNCTION
+	 *	  rmmi_vslt2_hdlr
+	 * DESCRIPTION
+	 *
+	 * PARAMETERS
+	 *
+	 * RETURNS
+	 *
+	 *****************************************************************************/
+	void rmmi_vslt2_hdlr(rmmi_string_struct *source_string_ptr)
+	{
+		kal_uint8	 *				rspstr_ptr							= NULL; 	   /* response string and initialization */
+		kal_uint16					rspstr_len							= 0;		   /* string length variable */
+#if !defined(__TC01_SIM_LOCK_OFF__) && defined(LGE_FW_COMMON)
+		kal_bool					result								= KAL_TRUE;
+		kal_uint8					parseError							= 0;
+		kal_uint8					readValue							= 0;
+		kal_uint8					loop								= 0;
+		kal_uint8					loop2								= 0;
+		kal_uint8					simLockType 						= 0;
+		kal_uint8					readCount							= 0;
+		unsigned char				rsp_str[VSLT_MAX_LEN_2] 			= {0x00,};
+		FactoryNetworkCode *		pNetworkCode						= NULL;
+		BOOL						bLockCheck							= FALSE;
+		kal_uint8					cat 								= 0;
+		kal_uint8					len 								= 0;
+		kal_uint8					loop_sim_num						= 0;
+		rmmi_string_struct *		vslt_string_ptr 					= NULL;
+		rmmi_string_struct			tmp_vslt_string_ptr[1]; 			// = {NULL, };
+		kal_uint8					tempstr[VSLT_MAX_LEN_2] 			= {0,};
+		kal_uint8					temp								= 0;
+		kal_uint8					lockCount							= 0;
+
+		unsigned char				code[VSLT_SIM_2][LGE_FAC_NETWORK_CODE_LEN]; 					// = {0x0F,};
+		lgoem_at_vslt_sim_type		eReturnType[VSLT_MAX_NUM_2][VSLT_SIM_2];						// = {0,};
+		lgoem_at_vslt_sim_type		temp_result[VSLT_SIM_2] 										= {0,};
+		unsigned char				pNtCode[VSLT_MAX_NUM_2*VSLT_SIM_2][LGE_FAC_NETWORK_CODE_LEN+4]; // = {0x00,};
+		kal_uint8					index															= 0;
+		unsigned char				tmpStr_tmp[LGE_FAC_NETWORK_CODE_LEN+4]							= {0x00,};
+
+		rmmi_custom_dbg_trace("rmmi_vslt2_hdlr()");
+
+		kal_mem_set(tmp_vslt_string_ptr, 0, sizeof(tmp_vslt_string_ptr));
+		kal_mem_set(eReturnType, 0, sizeof(eReturnType));
+		kal_mem_set(pNtCode, 0, sizeof(pNtCode));
+		kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+		rspstr_ptr = &rmmi_rsp_buf[0];
+
+		if ( source_string_ptr == NULL )
+		{
+			rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+			RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+		}
+		else
+		{
+			/* ---------------------------- Implement here ---------------------------*/
+			switch(source_string_ptr->cmd_mode)
+			{
+				/* AT%VSLT2 */
+				case RMMI_ACTIVE_MODE:
+					rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NOT IMPLEMENT", RMMI_PTR->arg_list, 0);
+					RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+					break;
+				/* AT%VSLT2? */
+				case RMMI_READ_MODE:
+				/* AT%VSLT2=? */
+				case RMMI_TEST_MODE:
+					rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "VERIFY NTCODE", RMMI_PTR->arg_list, 0);
+					RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+					break;
+				/* AT%VSLT2=XXX... */
+				case RMMI_SET_OR_EXECUTE_MODE:
+					{
+						//kal_uint8  btAddr[LGE_FAC_BT_ADDR_LEN]  = {0,};
+						kal_uint8  imei[LGE_FAC_IMEI_LEN]		= {0,};
+						kal_uint16 networkCodeListNumber		= 0;
+						kal_uint8  fusgFlag 					= 0;
+
+						//Check BT address / IMEI / NTCODE list number / Fusg Flag
+						if( !LGE_FacReadBtAddr				(btAddr 				)||
+							!LGE_FacReadImei				(KAL_FALSE, imei		)||
+							!LGE_FacReadNetworkCodeListNum	(&networkCodeListNumber )||
+							!LGE_FacReadFusgFlag			(&fusgFlag				)  )
+						{
+							rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR, PREVIOUS CONDITION CHECK", RMMI_PTR->arg_list, 0);
+							break;
+						}
+
+						result = LGE_FacReadSimLockType( &simLockType );
+
+						if( result == KAL_TRUE )
+						{
+							if( ( simLockType & LGE_FAC_SLTYPE_VALID_MASK ) != 0 )
+							{
+								/* read NTCODE list number */
+								readValue = (kal_uint8)rmmi_get_int_ext(&parseError, source_string_ptr, (kal_uint8)RMMI_COMMA);
+								if( ( parseError == RMMI_PARSE_OK ) && ( readValue <= VSLT_MAX_NUM_2 ) )
+								{
+									networkCodeListNumber = readValue;
+									if( networkCodeListNumber == 0 )
+									{
+										/* Network Code List Number value is Zero*/
+										rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR ( NETWORK CODE LIST NUMBER FAIL )", RMMI_PTR->arg_list, 0);
+										break;
+									}
+									else
+									{
+										pNetworkCode				= (FactoryNetworkCode *)get_ctrl_buffer(sizeof(FactoryNetworkCode)*networkCodeListNumber);
+										vslt_string_ptr 			= &tmp_vslt_string_ptr[0];
+										vslt_string_ptr->string_ptr = &tempstr[0];
+
+										if( pNetworkCode != NULL )
+										{
+											kal_mem_set (pNetworkCode, 0xff, sizeof(pNetworkCode)); // wjjeon test
+
+											for( loop=0 ; loop<networkCodeListNumber ; loop++ )
+											{
+												if(loop > 0)
+													source_string_ptr->index = source_string_ptr->index+2;	//Move to next pair
+
+												for( loop_sim_num=0 ; loop_sim_num<VSLT_SIM_2 ; loop_sim_num++ )
+												{
+													if(loop_sim_num == 0)
+														source_string_ptr->index++;
+
+													kal_mem_set(vslt_string_ptr->string_ptr, 0x0F, sizeof(vslt_string_ptr->string_ptr));
+													rmmi_get_str_ext(&parseError, source_string_ptr, (kal_uint8)RMMI_FORWARD_SLASH, LGE_FAC_NETWORK_CODE_LEN+4, vslt_string_ptr->string_ptr);
+													vslt_string_ptr->index = 0;
+
+													sprintf((char*)pNtCode[index], (char*)vslt_string_ptr->string_ptr);   // to print on hyper terminal
+													++index;
+
+													temp = loop + 1;
+
+													readValue = (kal_uint8)rmmi_get_hex_ext(&parseError, (rmmi_string_struct*)vslt_string_ptr, (kal_uint8)RMMI_COMMA, LGE_FAC_NC_MCC_LEN, (pNetworkCode+loop)->Mcc, &readCount);
+													if( ( parseError != RMMI_PARSE_OK ) || ( readCount != LGE_FAC_NC_MCC_LEN ) )
+													{
+														RMMI_PTR->arg_list[0] = (void*)&(temp);
+														rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( MCC-%d )", RMMI_PTR->arg_list, 1);
+														networkCodeListNumber = 0;
+														break;
+													}
+													readValue = (kal_uint8)rmmi_get_hex_ext(&parseError, (rmmi_string_struct*)vslt_string_ptr, (kal_uint8)RMMI_COMMA, LGE_FAC_NC_MNC_LEN, (pNetworkCode+loop)->Mnc, &readCount);
+													if( ( parseError != RMMI_PARSE_OK ) || ( readCount != LGE_FAC_NC_MNC_LEN ) )
+													{
+														RMMI_PTR->arg_list[0] = (void*)&(temp);
+														rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( MNC-%d )", RMMI_PTR->arg_list, 1);
+														networkCodeListNumber = 0;
+														break;
+													}
+													readValue = (kal_uint8)rmmi_get_hex_ext(&parseError, (rmmi_string_struct*)vslt_string_ptr, (kal_uint8)RMMI_COMMA, LGE_FAC_NC_GID1_LEN, (pNetworkCode+loop)->Gid1, &readCount);
+													if( ( parseError != RMMI_PARSE_OK ) || ( readCount != LGE_FAC_NC_GID1_LEN ) )
+													{
+														RMMI_PTR->arg_list[0] = (void*)&(temp);
+														rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( GID1-%d )", RMMI_PTR->arg_list, 1);
+														networkCodeListNumber = 0;
+														break;
+													}
+													readValue = (kal_uint8)rmmi_get_hex_ext(&parseError, (rmmi_string_struct*)vslt_string_ptr, (kal_uint8)RMMI_COMMA, LGE_FAC_NC_GID2_LEN, (pNetworkCode+loop)->Gid2, &readCount);
+													if( ( parseError != RMMI_PARSE_OK ) || ( readCount != LGE_FAC_NC_GID2_LEN ) )
+													{
+														RMMI_PTR->arg_list[0] = (void*)&(temp);
+														rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( GID2-%d )", RMMI_PTR->arg_list, 1);
+														networkCodeListNumber = 0;
+														break;
+													}
+													readValue = (kal_uint8)rmmi_get_hex_ext(&parseError, (rmmi_string_struct*)vslt_string_ptr, (kal_uint8)RMMI_COMMA, LGE_FAC_NC_SUBSET_LEN, (pNetworkCode+loop)->Subset, &readCount);
+													if( ( parseError != RMMI_PARSE_OK ) || ( readCount != LGE_FAC_NC_SUBSET_LEN ) )
+													{
+														RMMI_PTR->arg_list[0] = (void*)&(temp);
+														rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( SUBSET-%d )", RMMI_PTR->arg_list, 1);
+														networkCodeListNumber = 0;
+														break;
+													}
+
+													//init return result value
+													eReturnType[loop][loop_sim_num] = LGOEM_VSLT_NONE;
+													temp_result[loop_sim_num]		= LGOEM_VSLT_NONE;
+													bLockCheck						= FALSE;
+
+													kal_mem_set(code, 0x00, sizeof(code));
+													for (loop2=0; loop2 <3; loop2++)
+													{
+														code[loop_sim_num][loop2]					 = (pNetworkCode+loop)->Mcc[loop2];
+														code[loop_sim_num][loop2+LGE_FAC_NC_MCC_LEN] = (pNetworkCode+loop)->Mnc[loop2];
+													}
+
+													for(cat = LGE_FAC_SLTYPE_MASK_NETWORK; cat <= LGE_FAC_SLTYPE_MASK_COOPERATE; cat = cat<<1)
+													{
+														switch(cat)
+														{
+															//MCC+MNC
+															case LGE_FAC_SLTYPE_MASK_NETWORK:
+																len = TC01_SML_SIZE_OF_CAT_N;
+																break;
+															//MCC+MNC+SUBSET
+															case LGE_FAC_SLTYPE_MASK_NETWORK_SUBSET:
+																for (loop2 =0 ; loop2 < LGE_FAC_NC_SUBSET_LEN ; loop2++)
+																		code[loop_sim_num][loop2+6] = (pNetworkCode+loop)->Subset[loop2];
+																len = TC01_SML_SIZE_OF_CAT_NS;
+																break;
+															//MCC+MNC+GID1
+															case LGE_FAC_SLTYPE_MASK_SERVICE_PROVIDER:
+																for (loop2 =0 ; loop2 < LGE_FAC_NC_GID1_LEN ; loop2++)
+																   code[loop_sim_num][loop2+6] = (pNetworkCode+loop)->Gid1[loop2];
+																len = TC01_SML_SIZE_OF_CAT_SP;
+																break;
+															//MCC+MNC+GID1+GID2
+															case LGE_FAC_SLTYPE_MASK_COOPERATE:
+																for (loop2 =0 ; loop2 < LGE_FAC_NC_GID2_LEN ; loop2++)
+																{
+																	code[loop_sim_num][loop2+6]  = (pNetworkCode+loop)->Gid1[loop2];
+																	code[loop_sim_num][loop2+14] = (pNetworkCode+loop)->Gid2[loop2];
+																}
+																len = TC01_SML_SIZE_OF_CAT_C;
+																break;
+															default:
+																break;
+														}
+
+														//Main Check routin : comparison with VSLT input and NT code database
+														temp_result[loop_sim_num]		= eReturnType[loop][loop_sim_num];
+														eReturnType[loop][loop_sim_num] = tc01_vt_sml_Check(cat, *(code+loop_sim_num), len);
+
+														if ( eReturnType[loop][loop_sim_num] == LGOEM_VSLT_NONE )
+														{
+															eReturnType[loop][loop_sim_num] = temp_result[loop_sim_num];
+														}
+														else if (eReturnType[loop][loop_sim_num] == LGOEM_VSLT_SIM_ERROR)
+														{
+															rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "Security Lock data read Error", RMMI_PTR->arg_list, 0);
+															break;
+														}
+													}
+												}
+											}
+										}
+										else
+										{
+											rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR (MEM ALLOC FAIL)", RMMI_PTR->arg_list, 0);
+										}
+
+										for(loop = 0; loop<networkCodeListNumber; loop++)
+										{
+                                        #ifndef __AUSTRALIA_OPTUS_SIM_LOCK__
+											if((eReturnType[loop][0] == LGOEM_VSLT_SIM_LOCK) &&
+											   (eReturnType[loop][1] == LGOEM_VSLT_SIM_LOCK))
+                                        #else
+											if(eReturnType[loop][0] == LGOEM_VSLT_SIM_LOCK)
+                                        #endif
+											{
+												bLockCheck = TRUE;
+												lockCount++;
+											}
+										}
+
+										if (networkCodeListNumber > 0)
+										{
+											//All comparison result were unlock case
+											if(!bLockCheck)
+											{
+												rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "SIM UNLOCK", RMMI_PTR->arg_list, 0);
+											}
+											//If Simlock VSLT code was detected, make response list string via AT command.
+											else
+											{
+												kal_mem_set (rsp_str, 0x00, sizeof(rsp_str));
+												sprintf((char*)rsp_str, "%c\"SIM LOCK\"", 0x02	 );
+												rmmi_write_to_uart((kal_uint8*) rsp_str, strlen((char*)rsp_str), KAL_TRUE);
+
+												for(loop = 0; loop<networkCodeListNumber; loop++)
+												{
+                                              #ifndef __AUSTRALIA_OPTUS_SIM_LOCK__
+													if((eReturnType[loop][0] == LGOEM_VSLT_SIM_LOCK) &&
+													   (eReturnType[loop][1] == LGOEM_VSLT_SIM_LOCK))
+                                              #else
+													if(eReturnType[loop][0] == LGOEM_VSLT_SIM_LOCK)
+                                              #endif
+													{
+														lockCount--;
+														kal_mem_set (rsp_str, 0x00, sizeof(rsp_str));
+														sprintf((char*)rsp_str, "\"");
+
+														for( loop_sim_num=0 ; loop_sim_num<VSLT_SIM_2 ; loop_sim_num++ )
+														{
+															kal_mem_set(tmpStr_tmp, 0x00, sizeof(tmpStr_tmp));
+															rmmi_sprintf((kal_int8*)tmpStr_tmp, (kal_int8*)"%c%c%c,%c%c%c,%c%c%c%c%c%c%c%c,%c%c%c%c%c%c%c%c,%c%c",
+															pNtCode[loop*VSLT_SIM_2+loop_sim_num][0],  pNtCode[loop*VSLT_SIM_2+loop_sim_num][1],  pNtCode[loop*VSLT_SIM_2+loop_sim_num][2], 										  //MCC
+															pNtCode[loop*VSLT_SIM_2+loop_sim_num][4],  pNtCode[loop*VSLT_SIM_2+loop_sim_num][5],  pNtCode[loop*VSLT_SIM_2+loop_sim_num][6], 										  //MNC
+															pNtCode[loop*VSLT_SIM_2+loop_sim_num][8],  pNtCode[loop*VSLT_SIM_2+loop_sim_num][9],  pNtCode[loop*VSLT_SIM_2+loop_sim_num][10], pNtCode[loop*VSLT_SIM_2+loop_sim_num][11], //GID1
+															pNtCode[loop*VSLT_SIM_2+loop_sim_num][12], pNtCode[loop*VSLT_SIM_2+loop_sim_num][13], pNtCode[loop*VSLT_SIM_2+loop_sim_num][14], pNtCode[loop*VSLT_SIM_2+loop_sim_num][15],
+															pNtCode[loop*VSLT_SIM_2+loop_sim_num][17], pNtCode[loop*VSLT_SIM_2+loop_sim_num][18], pNtCode[loop*VSLT_SIM_2+loop_sim_num][19], pNtCode[loop*VSLT_SIM_2+loop_sim_num][20], //GID2
+															pNtCode[loop*VSLT_SIM_2+loop_sim_num][21], pNtCode[loop*VSLT_SIM_2+loop_sim_num][22], pNtCode[loop*VSLT_SIM_2+loop_sim_num][23], pNtCode[loop*VSLT_SIM_2+loop_sim_num][24],
+															pNtCode[loop*VSLT_SIM_2+loop_sim_num][26], pNtCode[loop*VSLT_SIM_2+loop_sim_num][27]																				  );//Subset
+
+															strncat((char*)rsp_str, (char*)tmpStr_tmp, (sizeof(rsp_str) - strlen((char*)rsp_str) -1));
+
+															if(loop_sim_num < (VSLT_SIM_2-1))
+															{
+																strncat((char*)rsp_str, "/", (sizeof(rsp_str) - strlen((char*)rsp_str) -1));
+															}
+														}
+														if(lockCount == 0)
+														{
+															sprintf((char*)tmpStr_tmp, "\"%c", 0x03 );
+															strncat((char*)rsp_str, (char*)tmpStr_tmp, (sizeof(rsp_str) - strlen((char*)rsp_str) -1));
+														}
+														else
+														{
+															strncat((char*)rsp_str, "\"", (sizeof(rsp_str) - strlen((char*)rsp_str) -1));
+														}
+														rmmi_write_to_uart((kal_uint8*) rsp_str, strlen((char*)rsp_str), KAL_TRUE);
+													}
+												}
+											}
+										}
+
+										if( pNetworkCode != NULL )
+										{
+											free_ctrl_buffer(pNetworkCode);
+											pNetworkCode = NULL;
+										}
+									}
+								}
+								else if( ( parseError == RMMI_PARSE_OK ) && ( readValue > VSLT_MAX_NUM_2 ) )
+								{
+									rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "Virtual SIM lock count over fail", RMMI_PTR->arg_list, 0);
+								}
+								else
+								{
+									rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( PARSE ERROR )", RMMI_PTR->arg_list, 0);
+								}
+							}
+							else
+							{
+								rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "SIM_LOCK ERROR", RMMI_PTR->arg_list, 0);
+							}
+						}
+						else
+						{
+							rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "SIM_LOCK TYPE READ ERROR", RMMI_PTR->arg_list, 0);
+						}
+						RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+						break;
+					}
+
+				default:
+					RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+					break;
+			}
+			/* ---------------------------- End of Implementation----------------------*/
+		}
+#endif // #if !defined(__TC01_SIM_LOCK_OFF__) && defined(LGE_FW_COMMON)
+		rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len);
+		return;
+	}
+
+
+
+	/*****************************************************************************
+	 * FUNCTION
+	 *	  rmmi_vslt_hdlr
+	 * DESCRIPTION
+	 *
+	 * PARAMETERS
+	 *
+	 * RETURNS
+	 *
+	 *****************************************************************************/
+	void rmmi_vslt_hdlr(rmmi_string_struct *source_string_ptr)
+	{
+	   kal_uint8	*			rspstr_ptr						= NULL; 	   /* response string and initialization */
+	   kal_uint16				rspstr_len						= 0;		   /* string length variable */
+#if !defined(__TC01_SIM_LOCK_OFF__) && defined(LGE_FW_COMMON)
+		kal_bool				result							= KAL_TRUE;
+		kal_uint8				retStr[VSLT_MAX_LEN_1]			= {0};
+		kal_uint8				parseError						= 0;
+		kal_uint8				readValue						= 0;
+		kal_uint8				loop							= 0;
+		kal_uint8				loop2							= 0;
+		kal_uint8				simLockType 					= 0;
+		kal_uint8				readCount						= 0;
+		unsigned char			tmpStr[VSLT_MAX_LEN_1]			= {0x00,};
+		unsigned char			rsp_str[VSLT_MAX_LEN_1] 		= {0x00,};
+		FactoryNetworkCode *	pNetworkCode					= NULL;
+		BOOL					bLockCheck						= FALSE;
+		kal_uint8				cat 							= 0;
+		kal_uint8				len 							= 0;
+		kal_uint8				code[LGE_FAC_NETWORK_CODE_LEN]	= {0x0F};
+		kal_uint8				temp							= 0;
+		kal_uint8				lockCount						= 0;
+
+		lgoem_at_vslt_sim_type	eReturnType[VSLT_MAX_NUM_1];
+		lgoem_at_vslt_sim_type	temp_result;
+
+		kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+		rspstr_ptr = &rmmi_rsp_buf[0];
+
+		rmmi_custom_dbg_trace("rmmi_vslt_hdlr()");
+
+		if ( source_string_ptr == NULL )
+		{
+			rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+			RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+		}
+		else
+		{
+			/* ---------------------------- Implement here ---------------------------*/
+			switch(source_string_ptr->cmd_mode)
+			{
+				/* AT%VSLT */
+				case RMMI_ACTIVE_MODE:
+					rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NOT IMPLEMENT", RMMI_PTR->arg_list, 0);
+					RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+					break;
+				/* AT%VSLT? */
+				case RMMI_READ_MODE:
+				/* AT%VSLT=? */
+				case RMMI_TEST_MODE:
+					rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "VERIFY NTCODE", RMMI_PTR->arg_list, 0);
+					RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+					break;
+				/* AT%VSLT=XXX... */
+				case RMMI_SET_OR_EXECUTE_MODE:
+					{
+						//kal_uint8  btAddr[LGE_FAC_BT_ADDR_LEN]  = {0,};
+						kal_uint8  imei[LGE_FAC_IMEI_LEN]		= {0,};
+						kal_uint16 networkCodeListNumber		= 0;
+						kal_uint8  fusgFlag 					= 0;
+
+						//Check BT address / IMEI / NTCODE list number / Fusg Flag
+						if( !LGE_FacReadBtAddr				(btAddr 				)||
+							!LGE_FacReadImei				(KAL_TRUE, imei 		)||
+							!LGE_FacReadNetworkCodeListNum	(&networkCodeListNumber )||
+							!LGE_FacReadFusgFlag			(&fusgFlag				)  )
+						{
+							rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR, PREVIOUS CONDITION CHECK", RMMI_PTR->arg_list, 0);
+							break;
+						}
+
+						result = LGE_FacReadSimLockType(&simLockType);
+
+						if( result == KAL_TRUE )
+						{
+							if( ( simLockType & LGE_FAC_SLTYPE_VALID_MASK ) != 0 )
+							{
+								/* read NTCODE list number */
+								readValue = (kal_uint8)rmmi_get_int_ext(&parseError, source_string_ptr, (kal_uint8)RMMI_COMMA);
+								if( ( parseError == RMMI_PARSE_OK ) && ( readValue <= VSLT_MAX_NUM_1 ) )
+								{
+									networkCodeListNumber = readValue;
+									if( networkCodeListNumber == 0 )
+									{
+										/* Network Code List Number value is Zero*/
+										rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR ( NETWORK CODE LIST NUMBER FAIL )", RMMI_PTR->arg_list, 0);
+										break;
+									}
+									else
+									{
+										pNetworkCode = (FactoryNetworkCode *)get_ctrl_buffer(sizeof(FactoryNetworkCode)*networkCodeListNumber);
+										if( pNetworkCode != NULL )
+										{
+											kal_mem_set(pNetworkCode, 0xff, sizeof(pNetworkCode));
+											for( loop=0 ; loop<networkCodeListNumber ; loop++ )
+											{
+												temp = loop + 1;
+
+												readValue = (kal_uint8)rmmi_get_hex_ext(&parseError, (rmmi_string_struct*)source_string_ptr, (kal_uint8)RMMI_COMMA, LGE_FAC_NC_MCC_LEN, (pNetworkCode+loop)->Mcc, &readCount);
+												if( ( parseError != RMMI_PARSE_OK ) || ( readCount != LGE_FAC_NC_MCC_LEN ) )
+												{
+													RMMI_PTR->arg_list[0] = (void*)&(temp);
+													rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( MCC-%d )", RMMI_PTR->arg_list, 1);
+													networkCodeListNumber = 0;
+													break;
+												}
+												readValue = (kal_uint8)rmmi_get_hex_ext(&parseError, (rmmi_string_struct*)source_string_ptr, (kal_uint8)RMMI_COMMA, LGE_FAC_NC_MNC_LEN, (pNetworkCode+loop)->Mnc, &readCount);
+												if( ( parseError != RMMI_PARSE_OK ) || ( readCount != LGE_FAC_NC_MNC_LEN ) )
+												{
+													RMMI_PTR->arg_list[0] = (void*)&(temp);
+													rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( MNC-%d )", RMMI_PTR->arg_list, 1);
+													networkCodeListNumber = 0;
+													break;
+												}
+												readValue = (kal_uint8)rmmi_get_hex_ext(&parseError, (rmmi_string_struct*)source_string_ptr, (kal_uint8)RMMI_COMMA, LGE_FAC_NC_GID1_LEN, (pNetworkCode+loop)->Gid1, &readCount);
+												if( ( parseError != RMMI_PARSE_OK ) || ( readCount != LGE_FAC_NC_GID1_LEN ) )
+												{
+													RMMI_PTR->arg_list[0] = (void*)&(temp);
+													rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( GID1-%d )", RMMI_PTR->arg_list, 1);
+													networkCodeListNumber = 0;
+													break;
+												}
+												readValue = (kal_uint8)rmmi_get_hex_ext(&parseError, (rmmi_string_struct*)source_string_ptr, (kal_uint8)RMMI_COMMA, LGE_FAC_NC_GID2_LEN, (pNetworkCode+loop)->Gid2, &readCount);
+												if( ( parseError != RMMI_PARSE_OK ) || ( readCount != LGE_FAC_NC_GID2_LEN ) )
+												{
+													RMMI_PTR->arg_list[0] = (void*)&(temp);
+													rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( GID2-%d )", RMMI_PTR->arg_list, 1);
+													networkCodeListNumber = 0;
+													break;
+												}
+												readValue = (kal_uint8)rmmi_get_hex_ext(&parseError, (rmmi_string_struct*)source_string_ptr, (kal_uint8)RMMI_COMMA, LGE_FAC_NC_SUBSET_LEN, (pNetworkCode+loop)->Subset, &readCount);
+												if( ( parseError != RMMI_PARSE_OK ) || ( readCount != LGE_FAC_NC_SUBSET_LEN ) )
+												{
+													RMMI_PTR->arg_list[0] = (void*)&(temp);
+													rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( SUBSET-%d )", RMMI_PTR->arg_list, 1);
+													networkCodeListNumber = 0;
+													break;
+												}
+
+												//init return result value
+												eReturnType[loop] = LGOEM_VSLT_NONE;
+												temp_result 	  = LGOEM_VSLT_NONE;
+
+												kal_mem_set(retStr, 0x00, sizeof(retStr));
+												kal_mem_set(code,	0x00, sizeof(code));
+
+												for (loop2=0; loop2 <3; loop2++)
+												{
+													code[loop2] 					= (pNetworkCode+loop)->Mcc[loop2];
+													code[loop2+LGE_FAC_NC_MCC_LEN]	= (pNetworkCode+loop)->Mnc[loop2];
+												}
+
+												for(cat = LGE_FAC_SLTYPE_MASK_NETWORK; cat <= LGE_FAC_SLTYPE_MASK_COOPERATE; cat = cat<<1)
+												{
+													switch(cat)
+													{
+														case LGE_FAC_SLTYPE_MASK_NETWORK: //mcc+mnc
+															len = TC01_SML_SIZE_OF_CAT_N;
+															break;
+
+														case LGE_FAC_SLTYPE_MASK_NETWORK_SUBSET: //mcc+mnc+subset
+															for (loop2 =0 ; loop2 < LGE_FAC_NC_SUBSET_LEN ; loop2++)
+																	code[loop2+6] = (pNetworkCode+loop)->Subset[loop2];
+															len = TC01_SML_SIZE_OF_CAT_NS;
+															break;
+
+														case LGE_FAC_SLTYPE_MASK_SERVICE_PROVIDER: //mcc+mnc+gid1
+															for (loop2 =0 ; loop2 < LGE_FAC_NC_GID1_LEN ; loop2++)
+															   code[loop2+6] = (pNetworkCode+loop)->Gid1[loop2];
+
+															len = TC01_SML_SIZE_OF_CAT_SP;
+															break;
+
+														case LGE_FAC_SLTYPE_MASK_COOPERATE: //mcc+mnc+gid1+gid2
+															for (loop2 =0 ; loop2 < LGE_FAC_NC_GID2_LEN ; loop2++)
+															{
+																code[loop2+6] = (pNetworkCode+loop)->Gid1[loop2];
+																code[loop2+14] = (pNetworkCode+loop)->Gid2[loop2];
+															}
+															len = TC01_SML_SIZE_OF_CAT_C;
+															break;
+
+														default:
+															break;
+													}
+
+													//Main Check routin : comparison with VSLT input and NT code database
+													temp_result = eReturnType[loop];
+													eReturnType[loop] = tc01_vt_sml_Check( cat, code, len);
+
+													if ( eReturnType[loop] == LGOEM_VSLT_NONE )
+													{
+														eReturnType[loop] = temp_result;
+													}
+													else if (eReturnType[loop] == LGOEM_VSLT_SIM_ERROR)
+													{
+														rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "Security Lock data read Error", RMMI_PTR->arg_list, 0);
+														break;
+													}
+												}
+											}
+										}
+										else
+										{
+											rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR (MEM ALLOC FAIL)", RMMI_PTR->arg_list, 0);
+										}
+
+										for(loop = 0; loop<networkCodeListNumber; loop++)
+										{
+											if(eReturnType[loop] == LGOEM_VSLT_SIM_LOCK)
+											{
+												bLockCheck = TRUE;
+												lockCount++;
+											}
+										}
+
+										if (networkCodeListNumber > 0)
+										{
+											//All comparison result were unlock case
+											if(!bLockCheck)
+											{
+												rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "SIM UNLOCK", RMMI_PTR->arg_list, 0);
+											}
+											//If Simlock VSLT code was detected, make response list string via AT command .
+											else
+											{
+												kal_mem_set (rsp_str, 0x00, sizeof(rsp_str));
+												sprintf((char*)rsp_str, "%c\"SIM LOCK\"", 0x02	 );
+												rmmi_write_to_uart((kal_uint8*) rsp_str, strlen((char*)rsp_str), KAL_TRUE);
+
+												for(loop = 0; loop<networkCodeListNumber; loop++)
+												{
+													if(eReturnType[loop] != LGOEM_VSLT_SIM_UNLOCK)
+													{
+														lockCount--;
+														kal_mem_set((char*)tmpStr, 0x00, sizeof(tmpStr));
+														rmmi_sprintf((kal_int8*)tmpStr, (kal_int8*)"\"%X%X%X,%X%X%X,%X%X%X%X%X%X%X%X,%X%X%X%X%X%X%X%X,%X%X\"",
+														pNetworkCode[loop].Mcc[0],	  pNetworkCode[loop].Mcc[1],  pNetworkCode[loop].Mcc[2],
+														pNetworkCode[loop].Mnc[0],	  pNetworkCode[loop].Mnc[1],  pNetworkCode[loop].Mnc[2],
+														pNetworkCode[loop].Gid1[0],   pNetworkCode[loop].Gid1[1], pNetworkCode[loop].Gid1[2], pNetworkCode[loop].Gid1[3],
+														pNetworkCode[loop].Gid1[4],   pNetworkCode[loop].Gid1[5], pNetworkCode[loop].Gid1[6], pNetworkCode[loop].Gid1[7],
+														pNetworkCode[loop].Gid2[0],   pNetworkCode[loop].Gid2[1], pNetworkCode[loop].Gid2[2], pNetworkCode[loop].Gid2[3],
+														pNetworkCode[loop].Gid2[4],   pNetworkCode[loop].Gid2[5], pNetworkCode[loop].Gid2[6], pNetworkCode[loop].Gid2[7],
+														pNetworkCode[loop].Subset[0], pNetworkCode[loop].Subset[1]);
+
+														if(lockCount == 0)
+														{
+															sprintf((char*)rsp_str, "%c", 0x03 );
+															strncat((char*)tmpStr, (char*)rsp_str, (sizeof(tmpStr) - strlen((char*)tmpStr) -1));
+														}
+
+														rmmi_write_to_uart((kal_uint8*) tmpStr, strlen((char*)tmpStr), KAL_TRUE);
+													}
+												}
+											}
+										}
+									}
+								}
+								else if( ( parseError == RMMI_PARSE_OK ) && ( readValue > VSLT_MAX_NUM_1 ) )
+								{
+									rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "Virtual SIM lock count over fail", RMMI_PTR->arg_list, 0);
+								}
+								else
+								{
+									rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "INPUT DATA FAIL ( PARSE ERROR )", RMMI_PTR->arg_list, 0);
+								}
+							}
+							else
+							{
+								rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "SIM_LOCK ERROR", RMMI_PTR->arg_list, 0);
+							}
+						}
+						else
+						{
+							rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "SIM_LOCK TYPE READ ERROR", RMMI_PTR->arg_list, 0);
+						}
+
+						if( pNetworkCode != NULL )
+						{
+							free_ctrl_buffer(pNetworkCode);
+							pNetworkCode = NULL;
+						}
+						RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+						break;
+					}
+
+				default:
+					RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+					break;
+			}
+			/* ---------------------------- End of Implementation----------------------*/
+		}
+#endif // #if !defined(__TC01_SIM_LOCK_OFF__) && defined(LGE_FW_COMMON)
+		rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len);
+		return;
+	}
+
+
+
+   /*****************************************************************************
+	* FUNCTION
+	*  rmmi_calck_hdlr
+	* DESCRIPTION
+	*  check whether existing NV item list is applied to phone default QCN
+	*  check whether calibration data is present or not
+	* PARAMETERS
+	*  source_string_ptr		 [IN]		  At cmd string
+	* RETURNS
+	*  void
+	*****************************************************************************/
+   void rmmi_calck_hdlr(rmmi_string_struct *source_string_ptr)
+	{
+	   kal_bool ret_val = KAL_FALSE;
+	   kal_uint8 const *rsp_str = NULL; 	/* response string and initialization */
+	   kal_uint16 string_length = 0;		 /* string length variable */
+	   //kal_uint8 buffer[RMMI_SHORT_RSP_LEN];
+
+	   switch (source_string_ptr->cmd_mode)
+	   {
+		   case RMMI_TEST_MODE: //AT%CALCK=?
+		   case RMMI_READ_MODE:  //AT%CALCK?
+		   case RMMI_ACTIVE_MODE: //AT%CALCK
+		   case RMMI_SET_OR_EXECUTE_MODE:  //AT%CALCK=
+		{
+			uem_get_calibration_flag_req();
+
+			   return;
+		   }
+		   default:
+		   {
+			   /* unrecognized format of AT command line */
+			   break;
+		   }
+	   }	 /* end of the switch */
+
+	   rmmi_final_rsp_generator(source_string_ptr->src_id, ret_val, (kal_uint8*) rsp_str, string_length);
+
+	   return;
+
+   }
+
+   /*****************************************************************************
+	* FUNCTION
+	*  rmmi_caldt_hdlr
+	* DESCRIPTION
+	*  inquire history by recording CAL date to the board passed from Cal&Auto process
+	* PARAMETERS
+	*  source_string_ptr		 [IN]		  At cmd string
+	* RETURNS
+	*  void
+	*****************************************************************************/
+  void rmmi_caldt_hdlr(rmmi_string_struct *source_string_ptr)
+  {
+	  kal_uint8 * rspstr_ptr = NULL;		/* response string and initialization */
+	  kal_uint16 rspstr_len = 0;		   /* string length variable */
+          rmmi_context_struct *rmmi_main_ptr = &rmmi_cntxt_g[0];
+
+	  kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+	  rspstr_ptr = &rmmi_rsp_buf[0];
+
+	  if ( source_string_ptr == NULL )
+	  {
+		  rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+		  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+	  }
+	  else
+	  {
+		  switch (source_string_ptr->cmd_mode)
+		  {
+			  case RMMI_TEST_MODE: //AT%CALDT=?
+			  case RMMI_READ_MODE:	//AT%CALDT?
+			  case RMMI_ACTIVE_MODE: //AT%CALDT
+			  case RMMI_SET_OR_EXECUTE_MODE:  //AT%CALDT=
+			  {
+				  RMMI_PTR->arg_list[0] = (void*)&rmmi_main_ptr->caldt_check;
+				  rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "%d", RMMI_PTR->arg_list, 1);
+				  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+				  break;
+			  }
+			  default:
+			  {
+				  /* unrecognized format of AT command line */
+				  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+				  break;
+			  }
+		  }
+		  /* end of the switch */
+		  rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len);
+	  /* ---------------------------- End of Implementation----------------------*/
+	  }
+	  return;
+  }
+
+  /*****************************************************************************
+   * FUNCTION
+   *  rmmi_simimsi_hdlr
+   * DESCRIPTION
+   *  response the value of IMSI of SIM
+   * PARAMETERS
+   *  source_string_ptr 	  [IN]		  At cmd string
+   * RETURNS
+   *  void
+   *****************************************************************************/
+  void rmmi_simimsi_hdlr(rmmi_string_struct *source_string_ptr)
+  {
+	  kal_uint8 *			  rspstr_ptr		  = NULL;		 /* response string and initialization */
+	  kal_uint16			  rspstr_len		  = 0;			 /* string length variable */
+  #ifdef __GEMINI__
+	  kal_uint8 			  imsi_str[40]		  = {0,};
+  #else
+	  kal_uint8 			  imsi_str[20]		  = {0,};
+  #endif
+
+	  kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+	  rspstr_ptr = &rmmi_rsp_buf[0];
+
+
+	  if ( source_string_ptr == NULL )
+	  {
+		  rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+		  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+	  }
+	  else
+	  {
+		  /* ---------------------------- Implement here ---------------------------*/
+		  switch (source_string_ptr->cmd_mode)
+		  {
+			  case RMMI_TEST_MODE:
+			  case RMMI_SET_OR_EXECUTE_MODE:
+			  case RMMI_READ_MODE:
+			  {
+				  rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NOT IMPLEMENT", RMMI_PTR->arg_list, 0);
+				  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+			  }
+			  break;
+
+			  case RMMI_ACTIVE_MODE:
+			  {
+				  if(is_sim_inserted(SIM1) == SMU_SIM_INSERTED
+                 #ifdef __GEMINI__
+					 || is_sim_inserted(SIM2) == SMU_SIM_INSERTED
+                 #endif
+					)
+				  {
+					  if(l4c_cntxt_g[0].pin_lock_check == KAL_TRUE
+                     #ifdef __GEMINI__
+						 || l4c_cntxt_g[1].pin_lock_check == KAL_TRUE
+                     #endif
+						)
+					  {
+                      #ifdef __GEMINI__
+						  if(	(l4c_cntxt_g[0].is_imsi_valid == KAL_TRUE && is_sim_inserted(SIM1) == SMU_SIM_INSERTED)
+							 && (l4c_cntxt_g[1].is_imsi_valid == KAL_TRUE && is_sim_inserted(SIM2) == SMU_SIM_INSERTED))
+						  {
+							  rmmi_sprintf((kal_int8*)imsi_str, (kal_int8*)"%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d, %d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",
+											   l4c_cntxt_g[SIM1].imsi_content[1]-48,  l4c_cntxt_g[SIM1].imsi_content[2]-48,
+											   l4c_cntxt_g[SIM1].imsi_content[3]-48,  l4c_cntxt_g[SIM1].imsi_content[4]-48,
+											   l4c_cntxt_g[SIM1].imsi_content[5]-48,  l4c_cntxt_g[SIM1].imsi_content[6]-48,
+											   l4c_cntxt_g[SIM1].imsi_content[7]-48,  l4c_cntxt_g[SIM1].imsi_content[8]-48,
+											   l4c_cntxt_g[SIM1].imsi_content[9]-48,  l4c_cntxt_g[SIM1].imsi_content[10]-48,
+											   l4c_cntxt_g[SIM1].imsi_content[11]-48, l4c_cntxt_g[SIM1].imsi_content[12]-48,
+											   l4c_cntxt_g[SIM1].imsi_content[13]-48, l4c_cntxt_g[SIM1].imsi_content[14]-48,
+											   l4c_cntxt_g[SIM1].imsi_content[15]-48,
+											   l4c_cntxt_g[SIM2].imsi_content[1]-48,  l4c_cntxt_g[SIM2].imsi_content[2]-48,
+											   l4c_cntxt_g[SIM2].imsi_content[3]-48,  l4c_cntxt_g[SIM2].imsi_content[4]-48,
+											   l4c_cntxt_g[SIM2].imsi_content[5]-48,  l4c_cntxt_g[SIM2].imsi_content[6]-48,
+											   l4c_cntxt_g[SIM2].imsi_content[7]-48,  l4c_cntxt_g[SIM2].imsi_content[8]-48,
+											   l4c_cntxt_g[SIM2].imsi_content[9]-48,  l4c_cntxt_g[SIM2].imsi_content[10]-48,
+											   l4c_cntxt_g[SIM2].imsi_content[11]-48, l4c_cntxt_g[SIM2].imsi_content[12]-48,
+											   l4c_cntxt_g[SIM2].imsi_content[13]-48, l4c_cntxt_g[SIM2].imsi_content[14]-48,
+											   l4c_cntxt_g[SIM2].imsi_content[15]-48
+							  );
+							  RMMI_PTR->arg_list[0] = (void*)imsi_str;
+							  rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "%s", RMMI_PTR->arg_list, 1);
+						  }
+						  else if(l4c_cntxt_g[1].is_imsi_valid == KAL_TRUE	&& is_sim_inserted(SIM2) == SMU_SIM_INSERTED)
+						  {
+							  rmmi_sprintf((kal_int8*)imsi_str, (kal_int8*)"%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",
+											   l4c_cntxt_g[SIM2].imsi_content[1]-48,  l4c_cntxt_g[SIM2].imsi_content[2]-48,
+											   l4c_cntxt_g[SIM2].imsi_content[3]-48,  l4c_cntxt_g[SIM2].imsi_content[4]-48,
+											   l4c_cntxt_g[SIM2].imsi_content[5]-48,  l4c_cntxt_g[SIM2].imsi_content[6]-48,
+											   l4c_cntxt_g[SIM2].imsi_content[7]-48,  l4c_cntxt_g[SIM2].imsi_content[8]-48,
+											   l4c_cntxt_g[SIM2].imsi_content[9]-48,  l4c_cntxt_g[SIM2].imsi_content[10]-48,
+											   l4c_cntxt_g[SIM2].imsi_content[11]-48, l4c_cntxt_g[SIM2].imsi_content[12]-48,
+											   l4c_cntxt_g[SIM2].imsi_content[13]-48, l4c_cntxt_g[SIM2].imsi_content[14]-48,
+											   l4c_cntxt_g[SIM2].imsi_content[15]-48
+							  );
+							  RMMI_PTR->arg_list[0] = (void*)imsi_str;
+							  rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "%s", RMMI_PTR->arg_list, 1);
+						  }
+						  else
+                      #endif
+						  if(l4c_cntxt_g[0].is_imsi_valid == KAL_TRUE && is_sim_inserted(SIM1) == SMU_SIM_INSERTED)
+						  {
+							  rmmi_sprintf((kal_int8*)imsi_str, (kal_int8*)"%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",
+											   l4c_cntxt_g[SIM1].imsi_content[1]-48,  l4c_cntxt_g[SIM1].imsi_content[2]-48,
+											   l4c_cntxt_g[SIM1].imsi_content[3]-48,  l4c_cntxt_g[SIM1].imsi_content[4]-48,
+											   l4c_cntxt_g[SIM1].imsi_content[5]-48,  l4c_cntxt_g[SIM1].imsi_content[6]-48,
+											   l4c_cntxt_g[SIM1].imsi_content[7]-48,  l4c_cntxt_g[SIM1].imsi_content[8]-48,
+											   l4c_cntxt_g[SIM1].imsi_content[9]-48,  l4c_cntxt_g[SIM1].imsi_content[10]-48,
+											   l4c_cntxt_g[SIM1].imsi_content[11]-48, l4c_cntxt_g[SIM1].imsi_content[12]-48,
+											   l4c_cntxt_g[SIM1].imsi_content[13]-48, l4c_cntxt_g[SIM1].imsi_content[14]-48,
+											   l4c_cntxt_g[SIM1].imsi_content[15]-48
+							  );
+							  RMMI_PTR->arg_list[0] = (void*)imsi_str;
+							  rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "%s", RMMI_PTR->arg_list, 1);
+						  }
+						  else
+						  {
+							  rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "IMSI READ FAIL", RMMI_PTR->arg_list, 0);
+						  }
+					  }
+					  else
+					  {
+						  rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR", RMMI_PTR->arg_list, 0);
+					  }
+				  }
+				  else
+				  {
+					  rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR", RMMI_PTR->arg_list, 0);
+				  }
+
+				  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+			  }
+			  break;
+
+			  default:
+			  {
+				  /* unrecognized format of AT command line */
+				  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+			  }
+			  break;
+		  }   /* end of the switch */
+		  /* ---------------------------- End of Implementation----------------------*/
+	  }
+
+	  rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len);
+	  return;
+  }
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_pgcheck_hdlr
+ * DESCRIPTION
+ *  Check MT CS Paging
+ * PARAMETERS
+ *  source_string_ptr         [IN]         At cmd string
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_pgcheck_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_uint8 *             rspstr_ptr  = NULL;        /* response string and initialization */
+    kal_uint16              rspstr_len  = 0;           /* string length variable */
+    kal_bool                ret_val = KAL_FALSE;
+    rmmi_context_struct *   rmmi_ptr    = RMMI_PTR;
+
+    kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+    rspstr_ptr = &rmmi_rsp_buf[0];
+
+    if ( source_string_ptr == NULL )
+    {
+        rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+        //RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+    }
+    else
+    {
+        /* ---------------------------- Implement here ---------------------------*/
+        switch (source_string_ptr->cmd_mode)
+        {
+            case RMMI_ACTIVE_MODE:  /* AT%PGCHECK */
+            case RMMI_TEST_MODE:    /* AT%PGCHECK=? */
+            case RMMI_READ_MODE:    /* AT%PGCHECK? */
+                {
+                    ret_val= KAL_TRUE;
+                }
+                break;
+
+            case RMMI_SET_OR_EXECUTE_MODE: /* AT%PGCHECK=X... */
+                {
+                    kal_uint8 error_cause;
+                    kal_uint8 rat_mode;
+
+                    rat_mode = rmmi_int_validator_u8_check(&error_cause, source_string_ptr, rmmi_ptr->s_reg.s3 /* separator */);
+                    if (error_cause != RMMI_PARSE_OK){
+                        rmmi_custom_dbg_trace("error_cause(RMMI_RARSE) is not ok");
+                        break;
+                    }
+
+                    if(rat_mode == 0){
+                        ret_val= KAL_TRUE;
+                    }else if(rat_mode == 1){
+                        rspstr_len = kal_sprintf( (char*)rspstr_ptr, "%cGSM PG monitoring OK%c",0x02,0x03);
+                    }else if(rat_mode == 2){
+                        rspstr_len = kal_sprintf( (char*)rspstr_ptr, "%cWCDMA PG monitoring OK%c",0x02,0x03);
+                    }else if(rat_mode == 3){
+                        rspstr_len = kal_sprintf( (char*)rspstr_ptr, "%cLTE PG monitoring OK%c",0x02,0x03);
+                    }else if(rat_mode == 4){
+                        rspstr_len = kal_sprintf( (char*)rspstr_ptr, "%cALL RAT PG monitoring OK%c",0x02,0x03);
+                    }else{
+                        rmmi_custom_dbg_trace("PGCHECK is out of rat_mode range");
+                        break;
+                    }
+                    ret_val = l4c_nw_set_pgcheck_req(rat_mode);
+                }
+                break;
+
+            default:
+                ret_val= KAL_FALSE;
+                break;
+        }
+        /* ---------------------------- End of Implementation----------------------*/
+        rmmi_final_rsp_generator(source_string_ptr->src_id, ret_val, (kal_uint8*) rspstr_ptr, rspstr_len);
+    }
+    return;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_pgcheckext_hdlr
+ * DESCRIPTION
+ *  Check MT CS Paging
+ * PARAMETERS
+ *  source_string_ptr         [IN]         At cmd string
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_pgcheckext_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_uint8 *             rspstr_ptr  = NULL;        /* response string and initialization */
+    kal_uint16              rspstr_len  = 0;           /* string length variable */
+    kal_bool                ret_val = KAL_FALSE;
+
+    kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+    rspstr_ptr = &rmmi_rsp_buf[0];
+
+    if ( source_string_ptr == NULL )
+    {
+        rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+    }
+    else
+    {
+        switch (source_string_ptr->cmd_mode)
+        {
+            case RMMI_ACTIVE_MODE:  /* AT%PGCHECKEXT */
+            case RMMI_TEST_MODE:    /* AT%PGCHECKEXT=? */
+            case RMMI_READ_MODE:    /* AT%PGCHECKEXT? */
+                ret_val = KAL_TRUE;
+                break;
+
+            case RMMI_SET_OR_EXECUTE_MODE: /* AT%PGCHECKEXT=X... */
+                {
+                    kal_uint8 error_cause;
+                    kal_uint32 rat_mode;
+                    kal_uint32 cause;
+
+                    /*
+                     * 0: off
+                     * 1: gsm
+                     * 2: wcdma
+                     * 3: lte
+                     * 4: all
+                     */
+                    rat_mode = rmmi_int_validator_range_check(&error_cause, source_string_ptr, RMMI_COMMA, 4);
+                    if (error_cause == RMMI_PARSE_NOT_FOUND){
+                        rmmi_custom_dbg_trace("rat_mode value not found!!");
+                        break;
+                    }
+                    else if (error_cause != RMMI_PARSE_OK){
+                        rmmi_custom_dbg_trace("rat_mode value is over max(4)");
+                        break;
+                    }
+
+                    /*
+                     *  0 or empty: (none=off),
+                     *  1 (0x01): (RRC_PAGE_CAUSE_TERM_CONV_CALL)
+                     *  2 (0x02): (RRC_PAGE_CAUSE_TERM_STREAM_CALL)
+                     *  4 (0x04): (RRC_PAGE_CAUSE_TERM_INTERACT_CALL)
+                     *  8 (0x08): (RRC_PAGE_CAUSE_TERM_BACKGND_CALL)
+                     * 16 (0x10): (RRC_PAGE_CAUSE_HIGH_PRI_SIGNALLING)
+                     * 32 (0x20): (RRC_PAGE_CAUSE_LOW_PRI_SIGNALLING)
+                     * 64 (0x40): (RRC_PAGE_CAUSE_UNKNOWN)
+                     */
+                    cause = rmmi_int_validator_range_check(&error_cause, source_string_ptr, RMMI_COMMA, 0x7f);
+                    if (error_cause == RMMI_PARSE_NOT_FOUND)
+                        cause = 0;
+                    else if (error_cause != RMMI_PARSE_OK){
+                        rmmi_custom_dbg_trace_int("cause value is over max(%d)", 0x7f);
+                        break;
+                    }
+
+                    kal_prompt_trace(MOD_L4C, "rat_mode:%d, cause:%x", rat_mode, cause);
+                    ret_val = l4c_nw_set_pgcheckext_req(rat_mode, cause);
+                }
+                break;
+
+            default:
+                ret_val = KAL_FALSE;
+                break;
+        }
+        rmmi_final_rsp_generator(source_string_ptr->src_id, ret_val, (kal_uint8*) rspstr_ptr, rspstr_len);
+    }
+    return;
+}
+
+/* AT%LTECALL */
+/*****************************************************************************
+  * FUNCTION
+  *  rmmi_ltecall_hdlr
+  * DESCRIPTION
+  *
+  * PARAMETERS
+  *  source_string_ptr         [IN]         At cmd string
+  * RETURNS
+  *  void
+ *****************************************************************************/
+void rmmi_ltecall_hdlr(rmmi_string_struct *source_string_ptr)
+ {
+     kal_uint8 *             rspstr_ptr  = NULL;        /* response string and initialization */
+     kal_uint16              rspstr_len  = 0;           /* string length variable */
+     rmmi_context_struct *   rmmi_ptr    = RMMI_PTR;
+     kal_uint8               status      = 2;
+     kal_uint8               rat_mode    = 0xFF;
+     rat_enum                prefer_rat  = RAT_NONE;
+
+    /* LTE Call improvement */
+    /* Combine LTE call with specific chennel search */ /* MOLY00165083 */
+    custom_factory_band_context_struct* rac_factory_ptr_g = cust_fac_ptr_global;
+
+     kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+     rspstr_ptr = &rmmi_rsp_buf[0];
+
+     if ( source_string_ptr == NULL )
+     {
+         rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+         RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+     }
+     else
+     {
+         /* ---------------------------- Implement here ---------------------------*/
+         switch (source_string_ptr->cmd_mode)
+         {
+             case RMMI_ACTIVE_MODE:  /* AT%LTECALL */
+             case RMMI_TEST_MODE:    /* AT%LTECALL=? */
+             case RMMI_READ_MODE:    /* AT%LTECALL? */
+                 {
+                     if (l4c_check_state_is_registered(rmmi_convert_atci_state_to_reg(rmmi_ptr->ps_register_status.state))){
+                         status = 1;
+                     }else{
+                         status = 0;
+                     }
+                     rmmi_ptr->arg_list[0] = (void*)&status;
+
+                     rspstr_len = kal_sprintf( (char*)rspstr_ptr, "%c%d%c\n%cOK%c",0x02,status,0x03,0x02,0x03 );
+                     RMMI_CUST_SET_RSP_TYPE(RMMI_CUST_RSP_ONLY);
+                 }
+                 break;
+
+             case RMMI_SET_OR_EXECUTE_MODE: /* AT%LTECALL=XXX... */
+                 {
+                     kal_uint8 gprs_state;
+                     kal_uint8 error_cause;
+                     kal_uint8 opcode;
+
+                 #ifndef __IMS_SUPPORT__
+                     // Not allow perform PS attach before SIM ready
+                     if (is_sim_verified() == KAL_FALSE)
+                     {
+                         RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+                         break;
+                     }
+                 #endif
+
+                     gprs_state = rmmi_ptr->ps_register_status.state;
+                     opcode = rmmi_int_validator_u8_check(&error_cause, source_string_ptr, rmmi_ptr->s_reg.s3 /* separator */);
+                     if (opcode == 0)
+                     {
+                         rmmi_ptr->cgatt_last_action = 0;
+                         opcode = RAC_DETACH;
+                     }
+                     else if (opcode == 1)
+                     {
+                        if( (rac_factory_ptr_g->factory_dynamic_band != 18) || (l4c_get_active_rat() != RAT_LTE))
+                        {
+                           /* Save LTE call command string */
+                           /* LTE Call improvement */
+                           rac_factory_ptr_g->initial_lte_call = 1;
+                           rmmi_start_specific_chennal_search(source_string_ptr->src_id, (kal_uint8)18 );
+                           return;
+                        }
+                        /* To avoid CGATT delay problem, always send SET_RAT_MODE requset */
+                        {
+                            RMMI_PTR->action_cmd = RMMI_CMD_LTECALL;
+                            l4c_nw_get_rat_mode_ext_req(source_string_ptr->src_id, &rat_mode, (kal_uint8 *)&prefer_rat);
+                            rmmi_ptr->ltecall_flag = 2;
+                            l4c_nw_set_rat_mode_ext_req(source_string_ptr->src_id, rat_mode, prefer_rat,1);
+                            return;
+                        }
+                     #ifdef __SGLTE__
+                        if(l4c_check_ps_attach_allowed() == KAL_FALSE)
+                        {
+                            rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "PS Attache is NOT allowed", rmmi_ptr->arg_list, 0);
+                            RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+                            break;
+                        }
+                     #endif
+
+                         if ((  (rmmi_ptr->cgatt_last_action == 1)
+                             && (l4c_check_state_is_registered(rmmi_convert_atci_state_to_reg(gprs_state))))
+                        #if 0 // at%ltecall TO-DO, #ifdef __SGLTE__  //Exclude the at+cgatt=1 for ps switch, because PS_REG_REQ must be sent to do RAU
+/* under construction !*/
+                        #endif
+                             )
+                         {
+                             //to avoid continous +CGATT=1 (for example : script )
+                             rspstr_len = kal_sprintf( (char*)rspstr_ptr, "%c[1]LTE ON%c\n%cOK%c",0x02,0x03,0x02,0x03 );
+                             RMMI_CUST_SET_RSP_TYPE(RMMI_CUST_RSP_ONLY);
+                             break;
+                         }
+
+                         rmmi_ptr->cgatt_last_action = 1;
+                         opcode = RAC_ATTACH;
+                     }
+                     else
+                     {
+                         rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ECALL ERROR", rmmi_ptr->arg_list, 0);
+                         RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ONLY);
+                         break;
+                     }
+
+                     if (l4c_nw_exe_att_req(source_string_ptr->src_id, RAC_PS, opcode, KAL_FALSE) == KAL_TRUE)
+                     {
+                         if(opcode == RAC_ATTACH){
+                             rmmi_ptr->ltecall_flag = 2;
+                             rspstr_len = kal_sprintf( (char*)rspstr_ptr, "%c[1]LTE ON%c\n%cOK%c",0x02,0x03,0x02,0x03 );
+                         }else{
+                             rmmi_ptr->ltecall_flag = 1;
+                             rspstr_len = kal_sprintf( (char*)rspstr_ptr, "%c[0]LTE OFF%c\n%cOK%c",0x02,0x03,0x02,0x03 );
+                         }
+                         RMMI_CUST_SET_RSP_TYPE(RMMI_CUST_RSP_ONLY);
+                         break;
+                     }
+                     else
+                     {
+                         rmmi_ptr->cgatt_last_action = 0;
+						 /* MOLY00186156 */
+                         rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ECALL ERROR", rmmi_ptr->arg_list, 0);
+                         RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ONLY);
+                         break;
+						 /* MOLY00186156 */
+                     }
+                 }
+                 break;
+
+             default:
+                 RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+                 break;
+          }
+          /* ---------------------------- End of Implementation----------------------*/
+          rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len );
+      }
+      return;
+  }
+
+/* MOLY00165083 */
+void rmmi_init_ltecall_rrsp()
+{
+    kal_uint8 *             rspstr_ptr  = NULL;        /* response string and initialization */
+    kal_uint16              rspstr_len  = 0;           /* string length variable */
+    rmmi_context_struct *   rmmi_ptr    = RMMI_PTR;
+    // kal_uint8 gprs_state;
+    /* LTE Call improvement */
+    /* Combine LTE call with specific chennel search */
+    custom_factory_band_context_struct* rac_factory_ptr_g = cust_fac_ptr_global;
+
+    kal_prompt_trace(MOD_L4C, "rmmi_init_ltecall_rrsp");
+
+    kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+    rspstr_ptr = &rmmi_rsp_buf[0];
+
+    #ifdef __AS_SPECIFIC_CHANNEL_SRCH__
+    rmmi_ptr->current_src = rmmi_ptr->cust_cmd_src_id;
+    #endif
+    rac_factory_ptr_g->initial_lte_call = 0;
+
+#ifdef __SGLTE__
+    if(l4c_check_ps_attach_allowed() == KAL_FALSE)
+    {
+        rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "PS Attache is NOT allowed", rmmi_ptr->arg_list, 0);
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+        break;
+    }
+#endif
+
+    rmmi_ptr->cgatt_last_action = 1;
+    rmmi_ptr->ltecall_flag = 2;
+
+    rspstr_len = kal_sprintf( (char*)rspstr_ptr, "%c[1]LTE ON%c\n%cOK%c",0x02,0x03,0x02,0x03 );
+    RMMI_CUST_SET_RSP_TYPE(RMMI_CUST_RSP_ONLY);
+
+    rmmi_cust_final_rsp_generator(rmmi_ptr->current_src, (kal_uint8*) rspstr_ptr, rspstr_len );
+
+    return;
+}
+/* MOLY00165083 */
+
+/* MOLY00186156 */
+void rmmi_ltecall_rrsp()
+{
+    kal_uint8 *             rspstr_ptr  = NULL;        /* response string and initialization */
+    kal_uint16              rspstr_len  = 0;           /* string length variable */
+    rmmi_context_struct *   rmmi_ptr    = RMMI_PTR;
+    // kal_uint8 gprs_state;
+
+    RMMI_PTR->action_cmd = RMMI_MAX_CMD_NUM;
+
+    kal_prompt_trace(MOD_L4C, "rmmi_ltecall_rrsp");
+    kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+    rspstr_ptr = &rmmi_rsp_buf[0];
+
+#ifdef __SGLTE__
+    if(l4c_check_ps_attach_allowed() == KAL_FALSE)
+    {
+        rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "PS Attache is NOT allowed", rmmi_ptr->arg_list, 0);
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+        break;
+    }
+#endif
+
+    rmmi_ptr->cgatt_last_action = 1;
+
+    rspstr_len = kal_sprintf( (char*)rspstr_ptr, "%c[1]LTE ON%c\n%cOK%c",0x02,0x03,0x02,0x03 );
+    RMMI_CUST_SET_RSP_TYPE(RMMI_CUST_RSP_ONLY);
+
+    rmmi_cust_final_rsp_generator(rmmi_ptr->current_src, (kal_uint8*) rspstr_ptr, rspstr_len );
+
+    return;
+}
+/* MOLY00186156 */
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_rfdevchk_hdlr
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  source_string_ptr         [IN]         At cmd string
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_rfdevchk_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    rmmi_context_struct *   rmmi_ptr    = RMMI_PTR;
+    kal_uint8   * rspstr_ptr    = NULL;        /* response string and initialization */
+    kal_uint16    rspstr_len    = 0;           /* string length variable */
+    kal_uint32 i;
+    em_info_status_enum *info_request = NULL;
+
+    kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+    rspstr_ptr = &rmmi_rsp_buf[0];
+    rmmi_custom_dbg_trace("rmmi_rfdevchk_hdlr()");
+
+    if ( source_string_ptr == NULL )
+    {
+        rmmi_custom_dbg_trace("rmmi_rfdevchk_hdlr(), source_string_ptr is NULL!!!");
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+    }
+    else
+    {
+        switch(source_string_ptr->cmd_mode)
+        {
+            case RMMI_TEST_MODE:
+            {
+                rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NOT IMPLEMENT", RMMI_PTR->arg_list, 0);
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+                break;
+            }
+            case RMMI_ACTIVE_MODE:
+            case RMMI_READ_MODE:
+            case RMMI_SET_OR_EXECUTE_MODE:
+            {
+                if(rmmi_ptr->mipi_result.is_excuted == KAL_FALSE)
+                {
+                    info_request = (em_info_status_enum*)get_ctrl_buffer(NUM_OF_EM_INFO * sizeof(em_info_status_enum));
+
+                    for(i=0; i<NUM_OF_EM_INFO; i++)
+                    {
+                        info_request[i] = EM_NC;
+                    }
+                    info_request[108] = EM_ON;
+                    RMMI_PTR->action_cmd = RMMI_CMD_RFDEVCHK;
+                    l4c_em_update_req(EM_FROM_RMMI, info_request);
+                    free_ctrl_buffer(info_request);
+                }
+                else
+                {
+                    l4c_em_get_mipi_hw_info_rrsp();
+                }
+
+                return;
+            }
+            default:
+            {
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+                break;
+            }
+        }
+    }
+    rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len );
+    return;
+}
+
+
+
+ /*****************************************************************************
+  * FUNCTION
+  *  rmmi_sbp_hdlr
+  * DESCRIPTION
+  *
+  * PARAMETERS
+  *  source_string_ptr		   [IN] 		At cmd string
+  * RETURNS
+  *  void
+  *****************************************************************************/
+#if defined (__TC01_NVRAM__) || defined(__TC01__) // __TC01_CUST_SBP__
+static kal_uint32 rmmi_sbp_str2int(kal_uint8 * string, kal_uint8 sbp_type)
+{
+    kal_uint32 ret_val = SBP_MAX_MD_FEATURE;
+    kal_uint32 i = 0;
+    kal_uint32 max_sbp_feature = SBP_MAX_MD_FEATURE;
+
+    if (sbp_type == 0)
+    {
+        max_sbp_feature = SBP_MAX_MD_FEATURE;
+        for(i = 0; i < SBP_MAX_MD_FEATURE; i++)
+        {
+            if(0 == strcmp((kal_char*)string, sbp_feature_string_table[i]))
+                break;
+        }
+
+    }
+    else if (sbp_type == 1)
+    {
+        max_sbp_feature = SBP_CUSTOM_MAX_MD_FEATURE;
+        for(i = 0; i < SBP_CUSTOM_MAX_MD_FEATURE; i++)
+        {
+            if(0 == strcmp((kal_char*)string, sbp_cust_feature_string_table[i]))
+                break;
+        }
+    }
+    else
+    {
+        return ret_val;
+    }
+
+    if(i < max_sbp_feature)
+    {
+        ret_val = i;
+    }
+
+    return ret_val;
+}
+
+
+static void rmmi_sbp_set_md_feature_by_ps_common(kal_uint8 sbp_type,
+        kal_uint32 feature,
+        kal_uint8 value,
+        kal_uint8 by_ps,
+        kal_uint8 ps_id)
+{
+    if(sbp_type == 0)
+    {
+        if (by_ps)
+        {
+            sbp_set_md_feature_by_ps((sbp_md_feature_enum)feature, (kal_bool)value, ps_id);
+        }
+        else
+        {
+            sbp_general_set_md_feature((sbp_md_feature_enum)feature, (kal_bool)value);
+            sbp_update_features_to_nvram();
+        }
+    }
+    else
+    {
+        if (by_ps)
+        {
+            sbp_set_md_feature_by_ps_custom((sbp_md_feature_custom_enum)feature, (kal_bool)value, ps_id);
+        }
+        else
+        {
+            sbp_general_set_md_feature_custom((sbp_md_feature_custom_enum)feature, (kal_bool)value);
+            sbp_update_features_to_nvram_custom();
+        }
+    }
+    return;
+}
+
+static kal_bool rmmi_validator_int_value_check(kal_uint32 value, kal_uint32 min, kal_uint32 max)
+{
+    kal_bool ret_val = KAL_TRUE;
+
+    if( (value < min) || (value > max) || (value == RMMI_VALIDATOR_ERROR))
+    {
+         ret_val = KAL_FALSE;
+         rmmi_custom_dbg_trace("Int value validate failed!");
+    }
+
+    return ret_val;
+}
+#endif
+
+ void rmmi_sbp_hdlr(rmmi_string_struct *source_string_ptr)
+{
+#if defined (__TC01_NVRAM__) || defined(__TC01__) // __TC01_CUST_SBP__
+#define SBP_CUSTOM_MAX_MODE_STR 16
+#define SBP_FEATURE_MAX_NAME_STR 200
+
+    kal_uint8 * rspstr_ptr = NULL;		 /* response string and initialization */
+    kal_uint16 rspstr_len = 0;			 /* string length variable */
+    kal_uint8 * feature_str = NULL;
+
+    feature_str = get_ctrl_buffer(SBP_FEATURE_MAX_NAME_STR+1);
+
+    kal_mem_set(rmmi_rsp_buf,0,sizeof(rmmi_rsp_buf));
+    rspstr_ptr = &rmmi_rsp_buf[0];
+
+    rmmi_custom_dbg_trace("rmmi_sbp_hdlr()");
+
+    if ( source_string_ptr == NULL )
+    {
+        rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+    }
+    else
+    {
+        /* ---------------------------- Implement here ---------------------------*/
+        switch (source_string_ptr->cmd_mode)
+        {
+            case RMMI_TEST_MODE:
+            case RMMI_ACTIVE_MODE:
+            case RMMI_READ_MODE:
+            {
+                rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr,
+                        (kal_uint8*) "%SBP=<type>,<cmd_mode>,<ps_id>, <sbpStr>[,<sbpVal>,[<ps independent>]]", RMMI_PTR->arg_list, 0);
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+            }
+            break;
+            case RMMI_SET_OR_EXECUTE_MODE:
+            {
+                kal_uint8 error_cause;
+                kal_uint8 sbp_type = 0;
+                kal_uint8 cmd_mode = 0;
+                kal_uint32 ps_id = (kal_uint32)(rmmi_current_mod_id - MOD_ATCI);
+                kal_uint32 feature = SBP_MAX_MD_FEATURE;
+                kal_uint8 value   = 0;
+                kal_uint8 by_ps = 0;
+
+                /* <type> 0 : mtk_sbp,  1 : custom_sbp  */
+                sbp_type = (kal_uint8) rmmi_int_validator(source_string_ptr, (kal_uint8) RMMI_COMMA);
+                if (!rmmi_validator_int_value_check((kal_uint32)sbp_type, 0,1))
+                {
+                    goto error_handler;
+                }
+                /* <cmd_ mod> 0 : query,  1 : set  */
+                cmd_mode = (kal_uint8) rmmi_int_validator(source_string_ptr, (kal_uint8) RMMI_COMMA);
+                if (!rmmi_validator_int_value_check((kal_uint32)cmd_mode, 0,1))
+                {
+                    goto error_handler;
+                }
+                /* <ps_id> 0 : PS1, 1 : PS2 */
+                ps_id = (kal_uint8) rmmi_int_validator(source_string_ptr, (kal_uint8) RMMI_COMMA);
+                if (!rmmi_validator_int_value_check((kal_uint32)ps_id, 0,(MAX_SIM_NUM-1)))
+                {
+                    goto error_handler;
+                }
+                //Get feature name string
+                rmmi_string_validator_ext(&error_cause,source_string_ptr,
+                            RMMI_COMMA, /* separator */
+                            SBP_FEATURE_MAX_NAME_STR,
+                            (kal_uint8*) feature_str);
+
+                if(error_cause != RMMI_PARSE_OK)
+                {
+                    goto error_handler;
+                }
+                else
+                {
+                    feature = rmmi_sbp_str2int(feature_str, sbp_type);
+                    if(feature == INVALID_SBP_FEATURE)
+                    {
+                        rmmi_custom_dbg_trace("Invalid SBP feature!");
+                        goto error_handler;
+                    }
+                }
+
+                if(cmd_mode == 1) /* Set SBP */
+                {
+                    /* <value> 0 : DISABLE, 1 : ENABLE */
+                    value = (kal_uint8) rmmi_int_validator(source_string_ptr, (kal_uint8) RMMI_COMMA);
+                    if (!rmmi_validator_int_value_check((kal_uint32)ps_id, 0,1))
+                    {
+                        goto error_handler;
+                    }
+
+                    /* <by_ps> 0 : common, 1 : for each PS ID */
+                    by_ps = (kal_uint8) rmmi_int_validator(source_string_ptr, (kal_uint8) RMMI_COMMA);
+                    if (!rmmi_validator_int_value_check((kal_uint32)by_ps, 0,1))
+                    {
+                        by_ps = 0;
+                    }
+                    rmmi_sbp_set_md_feature_by_ps_common(sbp_type, feature, value, by_ps, ps_id);
+                }
+                else  /* SBP query */
+                {
+                    if(sbp_type == 0)
+                    {
+                        rspstr_len = kal_sprintf((char*)rspstr_ptr, "%d",
+                                sbp_query_md_feature_by_ps((sbp_md_feature_enum)feature, (protocol_id_enum)ps_id));
+                    }
+                    else
+                    {
+                        rspstr_len = kal_sprintf((char*)rspstr_ptr, "%d",
+                                sbp_query_md_feature_by_ps_custom((sbp_md_feature_custom_enum)feature, (protocol_id_enum)ps_id));
+                    }
+                }
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+            }
+            break;
+            default:
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+            break;
+        }
+        /* ---------------------------- End of Implementation----------------------*/
+        rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len );
+    }
+    if (feature_str != NULL)
+    {
+        free_ctrl_buffer(feature_str);
+    }
+    return;
+
+    error_handler:
+    RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+    rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len );
+
+    if (feature_str != NULL)
+    {
+        free_ctrl_buffer(feature_str);
+    }
+#endif
+    return;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_dataStatic_hdlr
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ **************************************************************************** */
+void rmmi_dataStatic_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    extern kal_bool l4c_ps_get_context_state_req(kal_uint8 src_id, kal_uint8 *num, kal_uint8 *state_list);
+
+    kal_bool ret_val = KAL_FALSE;
+    int epsb_count=0;
+    kal_uint8 *buffer=NULL;
+    kal_uint16 string_length = 0;
+
+    rmmi_custom_dbg_trace("rmmi_dataStatic_hdlr");
+
+    buffer = (kal_uint8 *)get_ctrl_buffer(128);
+
+    if (buffer == NULL)
+    {
+        ASSERT(0);
+    }
+
+    switch (source_string_ptr->cmd_mode)
+    {
+        case RMMI_READ_MODE:
+            {
+                upcm_query_epsb_statistics_struct query_result;
+                kal_uint8 state_list[L4C_TOT_CONTEXT][2];
+                kal_uint8 num;
+                kal_uint8 context_state = 0;
+                kal_uint8 i=0;
+                kal_uint8 bearer_id[8];
+                kal_int8 validCid = -1;
+                kal_uint8 bearer = 0;
+                kal_mem_set(&query_result, 0, sizeof(upcm_query_epsb_statistics_struct));
+                kal_mem_set(state_list, 0, sizeof(state_list));
+                kal_mem_set(bearer_id, 0, sizeof(bearer_id));
+
+                context_state = l4c_ps_get_context_state_req(source_string_ptr->src_id, &num, (kal_uint8*) state_list);
+
+                if (context_state == KAL_TRUE)
+                {
+                    for(i = 0; i < num; i++)
+                    {
+                        if ( (state_list[i][0] <= MAX_EXT_PDP_CONTEXT) && (state_list[i][1] == 1) )
+                        {
+                            kal_uint8 cid = state_list[i][0];
+
+                            if (KAL_TRUE == l4c_get_bearer_id(cid, &bearer))
+                            {
+                                bearer_id[++validCid] = bearer;
+                                kal_prompt_trace(rmmi_current_mod_id, "[PktStatic]:[%d,%d]", bearer, validCid);
+                            }
+                        }
+                    }
+                }
+
+                if (validCid > -1)
+                {
+                    upcm_query_epsb_txrx_statistics(&query_result, l4c_current_mod_id - MOD_L4C);
+#if 1 //multiful response.
+
+                    for (epsb_count=0;epsb_count<=validCid;epsb_count++) {
+                        kal_mem_set(buffer, 0, sizeof(buffer));
+                        bearer = bearer_id[epsb_count];
+                        kal_sprintf((kal_char*)buffer, "+PKTSTATICS:%d, %llu, %llu", bearer,
+                                query_result.txrx_info[bearer].tx_bytes, query_result.txrx_info[bearer].rx_bytes);
+                        string_length = (kal_uint16)strlen((char*)buffer);
+                        rmmi_write_to_uart((kal_uint8*) buffer, string_length, KAL_TRUE);
+                    }
+
+                    ret_val = KAL_TRUE;
+                    rmmi_final_rsp_generator(source_string_ptr->src_id, ret_val, NULL, 0);
+                    free_ctrl_buffer( buffer );
+                    return;
+#else //single response
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+                }
+                else
+                {
+                    kal_sprintf((kal_char*)buffer, "+PKTSTATICS:0,0,0");
+                    string_length = (kal_uint16)strlen((char*)buffer);
+                    ret_val = KAL_TRUE;
+                }
+                break;
+            };
+
+        case RMMI_SET_OR_EXECUTE_MODE :
+        case RMMI_ACTIVE_MODE:
+        case RMMI_TEST_MODE:
+            {
+                kal_sprintf((kal_char*)buffer, "+PKTSTATICS:0,0,0");
+                string_length = (kal_uint16)strlen((char*)buffer);
+                ret_val = KAL_TRUE;
+                break;
+            };
+        default:
+            {
+                /* unrecognized format of AT command line */
+                break;
+            }
+    }
+
+    rmmi_final_rsp_generator(source_string_ptr->src_id, ret_val, (kal_uint8*)buffer, string_length);
+    if (buffer != NULL)
+        free_ctrl_buffer( buffer );
+}
+
+/*****************************************************************************
+   * FUNCTION
+   *  rmmi_lgcgatt_hdlr
+   * DESCRIPTION
+   *
+   * PARAMETERS
+   *  source_string_ptr 		[IN]		 At cmd string
+   * RETURNS
+   *  void
+   *****************************************************************************/
+  void rmmi_lgcgatt_hdlr(rmmi_string_struct *source_string_ptr)
+  {
+	  kal_uint8    *rspstr_ptr = NULL;		  /* response string and initialization */
+	  kal_uint16 rspstr_len = 0;		   /* string length variable */
+
+	  kal_mem_set(rmmi_rsp_buf,0,sizeof(rmmi_rsp_buf));
+	  rspstr_ptr = &rmmi_rsp_buf[0];
+
+	  if ( source_string_ptr == NULL )
+	  {
+		  rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+		  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+	  }
+	  else
+	  {
+		  switch (source_string_ptr->cmd_mode)
+		  {
+			  case RMMI_TEST_MODE:
+			  case RMMI_ACTIVE_MODE:
+			  case RMMI_READ_MODE:
+			  {
+				  rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NOT IMPLEMENT", RMMI_PTR->arg_list, 0);
+				  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+			  }
+			  break;
+			  case RMMI_SET_OR_EXECUTE_MODE:
+			  {
+				  kal_uint8 opcode = (kal_uint8) rmmi_int_validator(source_string_ptr, (kal_uint8) RMMI_COMMA);
+
+				  if (opcode == RMMI_VALIDATOR_ERROR)
+				  {
+					  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+				  }
+				  else
+				  {
+					  if( opcode == 0 || opcode == 1 )
+					  {
+						  if( l4c_nw_exe_att_req(source_string_ptr->src_id, RAC_PS, opcode, KAL_FALSE) == KAL_TRUE )
+						  {
+							  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_NO_RSP );
+						  }
+						  else
+						  {
+							  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+						  }
+					  }
+					  else
+					  {
+						  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+					  }
+				  }
+				  break;
+			  }
+			  default:
+			  {
+				  /* unrecognized format of AT command line */
+				  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+				  break;
+			  }
+		  } 	/* end of the switch */
+	  }
+
+	  rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len );
+	  return;
+  }
+
+
+  /*****************************************************************************
+   * FUNCTION
+   *  rmmi_detach_hdlr
+   * DESCRIPTION
+   *
+   * PARAMETERS
+   *  source_string_ptr 		[IN]		 At cmd string
+   * RETURNS
+   *  void
+   *****************************************************************************/
+  void rmmi_detach_hdlr(rmmi_string_struct *source_string_ptr)
+  {
+	  kal_uint8 *	 rspstr_ptr = NULL; 	   /* response string and initialization */
+	  kal_uint16	 rspstr_len = 0;		   /* string length variable */
+
+	  kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+	  rspstr_ptr = &rmmi_rsp_buf[0];
+
+	  if ( source_string_ptr == NULL )
+	  {
+		  rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+		  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+	  }
+	  else
+	  {
+		   /* ---------------------------- Implement here ---------------------------*/
+		  switch (source_string_ptr->cmd_mode)
+		  {
+			  case RMMI_ACTIVE_MODE:
+				 /* AT+COPS=2 */
+				 if (l4c_nw_exe_cops_req(source_string_ptr->src_id, DEREG, NULL, 0,ENDC_SEARCH_DEFAULT, 0xFFFFFFFF, 0) == KAL_TRUE)
+					 RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+				 else
+					 RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+				 break;
+			  case RMMI_TEST_MODE: /*AT%DETACH=?*/
+			  case RMMI_READ_MODE:
+			  case RMMI_SET_OR_EXECUTE_MODE:
+				  {
+					  rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NOT IMPLEMENT", RMMI_PTR->arg_list, 0);
+					  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+				  }
+				  break;
+
+			  default:
+				  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+				  break;
+		  }
+		  /* ---------------------------- End of Implementation----------------------*/
+		  rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len );
+	  }
+	  return;
+
+  }
+
+
+/*****************************************************************************
+ * FUNCTION
+ *	  rmmi_rxmrd_hdlr
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ *****************************************************************************/
+void rmmi_rxmrd_hdlr(rmmi_string_struct *source_string_ptr)
+{
+	kal_uint8	 *	rspstr_ptr	  = NULL;		 /* response string and initialization */
+	kal_uint16		rspstr_len	  = 0;			 /* string length variable */
+	kal_bool		ret_val 	  = KAL_FALSE;
+	kal_uint8		rx_path;
+	kal_uint8		error_cause;
+	kal_bool		nvram_write   = KAL_FALSE;	 /* Not write rx_path on NVRAM */
+	kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+	rspstr_ptr = &rmmi_rsp_buf[0];
+	RMMI_PTR->action_cmd = RMMI_CMD_RXMRD;
+	if ( source_string_ptr == NULL )
+	{
+		rmmi_custom_dbg_trace("rmmi_rxmrd_hdlr(), source_string_ptr is NULL!!!");
+		RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+	}
+	else
+	{
+		switch(source_string_ptr->cmd_mode)
+		{
+			case RMMI_ACTIVE_MODE:
+			case RMMI_TEST_MODE:
+			case RMMI_READ_MODE:
+			{
+			   if(l4c_eq_set_rx_path_req(source_string_ptr->src_id, READ_RX_PATH, 12, nvram_write) == KAL_TRUE)
+				{
+					return;
+				}
+				rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR", RMMI_PTR->arg_list, 0);
+				RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+				break;
+			}
+			case RMMI_SET_OR_EXECUTE_MODE:
+			{
+				rx_path = rmmi_int_validator_range_check(&error_cause, source_string_ptr, (kal_uint8) RMMI_COMMA, 2);
+				if(error_cause == RMMI_PARSE_OK)
+				{
+					if(rx_path == CUSTOM_RX_BOTH) rx_path = UL1_RX_PATH_BASE + UL1_RX_BOTH;
+					else if(rx_path == CUSTOM_RX_PRI) rx_path = UL1_RX_PATH_BASE + UL1_RX_RXD_ONLY;
+					else if(rx_path == CUSTOM_RX_DIV) rx_path = UL1_RX_PATH_BASE + UL1_RX_MAIN_ONLY;
+					nvram_write = rmmi_int_validator_range_check(&error_cause, source_string_ptr, RMMI_PTR->s_reg.s3, 1);
+					if(error_cause == RMMI_PARSE_OK)
+					{
+						ret_val = KAL_TRUE;
+					}
+					else if(error_cause == RMMI_PARSE_NOT_FOUND)
+					{
+						ret_val = KAL_TRUE;
+						nvram_write = KAL_FALSE;
+					}
+				 }
+				if (ret_val == KAL_TRUE)
+				{
+				   if(l4c_eq_set_rx_path_req(source_string_ptr->src_id, SET_RX_PATH, rx_path, nvram_write) == KAL_TRUE)
+					{
+						return;
+					}
+				}
+				rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR", RMMI_PTR->arg_list, 0);
+				RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+				break;
+			}
+			default:
+			{
+				RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+				break;
+			}
+		}
+	}
+	rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len );
+	RMMI_PTR->action_cmd = RMMI_MAX_CMD_NUM;
+	return;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *	  rmmi_mimoantcheck_hdlr
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ *****************************************************************************/
+void rmmi_mimoantcheck_hdlr(rmmi_string_struct *source_string_ptr)
+{
+	kal_uint8	 *	rspstr_ptr	  = NULL;		 /* response string and initialization */
+	kal_uint16		rspstr_len	  = 0;			 /* string length variable */
+	kal_bool		ret_val 	  = KAL_FALSE;
+	kal_uint8		rx_path;
+	kal_uint8		error_cause;
+	kal_bool		nvram_write    = KAL_FALSE; 	  /* Not write rx_path on NVRAM */
+	kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+	rspstr_ptr = &rmmi_rsp_buf[0];
+	RMMI_PTR->action_cmd = RMMI_CMD_MIMOANTCHECK;
+	if ( source_string_ptr == NULL )
+	{
+		rmmi_custom_dbg_trace("rmmi_mimoantcheck_hdlr(), source_string_ptr is NULL!!!");
+		RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+	}
+	else
+	{
+		switch(source_string_ptr->cmd_mode)
+		{
+			case RMMI_ACTIVE_MODE:
+			case RMMI_TEST_MODE:
+			case RMMI_READ_MODE:
+			{
+			   if(l4c_eq_set_rx_path_req(source_string_ptr->src_id, READ_RX_PATH, 0, nvram_write) == KAL_TRUE)
+				{
+					return;
+				}
+				rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR", RMMI_PTR->arg_list, 0);
+				RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+				break;
+			}
+			case RMMI_SET_OR_EXECUTE_MODE:
+			{
+				rx_path = rmmi_int_validator_range_check(&error_cause, source_string_ptr, (kal_uint8) RMMI_COMMA, 2);
+				if(error_cause == RMMI_PARSE_OK)
+				{
+				#ifdef __SUPPORT_PRX_DRX_SWITCHING__
+					if(rx_path == RX_PATH_0) rx_path = CUSTOM_RX_PATH_1_SWAP;
+					else if(rx_path == RX_PATH_1) rx_path = CUSTOM_RX_PATH_0_SWAP;
+				#else
+					if(rx_path == RX_PATH_0) rx_path = CUSTOM_RX_PATH_0;
+					else if(rx_path == RX_PATH_1) rx_path = CUSTOM_RX_PATH_1;
+				#endif
+					nvram_write = rmmi_int_validator_range_check(&error_cause, source_string_ptr, RMMI_PTR->s_reg.s3, 1);
+					if(error_cause == RMMI_PARSE_OK)
+					{
+						ret_val = KAL_TRUE;
+					}
+					else if(error_cause == RMMI_PARSE_NOT_FOUND)
+					{
+						ret_val = KAL_TRUE;
+						nvram_write = KAL_FALSE;
+					}
+				}
+				if (ret_val == KAL_TRUE)
+				{
+				   if(l4c_eq_set_rx_path_req(source_string_ptr->src_id, SET_RX_PATH, rx_path, nvram_write) == KAL_TRUE)
+					{
+						return;
+					}
+				}
+				rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "MIMOANTCHECK ERROR", RMMI_PTR->arg_list, 0);
+				RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ONLY);
+				break;
+			}
+			default:
+			{
+				RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+				break;
+			}
+		}
+	}
+	rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len );
+	RMMI_PTR->action_cmd = RMMI_MAX_CMD_NUM;
+
+	return;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *    rmmi_simtray_hdlr
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ *****************************************************************************/
+void rmmi_simtray_hdlr(rmmi_string_struct *source_string_ptr)
+{
+
+    kal_uint8 *        rspstr_ptr          = NULL;        /* response string and initialization */
+    kal_uint16         rspstr_len          = 0;           /* string length variable */
+#if defined (__SIM_HOT_SWAP_SUPPORT__) && (__DUAL_SIM_HOT_SWAP_CO_DECK_SUPPORT__)
+    kal_uint8          mode                = 0;
+    kal_uint8          error_cause         = 0;
+#endif
+
+    kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+    rspstr_ptr = &rmmi_rsp_buf[0];
+
+    rmmi_custom_dbg_trace("rmmi_simtray_hdlr()");
+
+    if ( source_string_ptr == NULL )
+    {
+        rmmi_custom_dbg_trace("rmmi_simtray_hdlr(), source_string_ptr is NULL!!!");
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+    }
+    else
+    {
+        /* ---------------------------- Implement here ---------------------------*/
+        switch (source_string_ptr->cmd_mode)
+        {
+            case RMMI_TEST_MODE:              /* AT%SIMTRAY=? */
+            case RMMI_ACTIVE_MODE:            /* AT%SIMTRAY   */
+            case RMMI_READ_MODE:              /* AT%SIMTRAY?  */
+                rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NOT IMPLEMENT", RMMI_PTR->arg_list, 0);
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+                break;
+
+            case RMMI_SET_OR_EXECUTE_MODE:    /* AT%SIMTRAY=XXX... */
+            #if defined (__SIM_HOT_SWAP_SUPPORT__) && ((__DUAL_SIM_HOT_SWAP_CO_DECK_SUPPORT__) || (__DUAL_SIM_HOT_SWAP_SEPARATE_DECK_SUPPORT__))
+                mode = rmmi_int_validator_range_check(&error_cause, source_string_ptr, RMMI_PTR->s_reg.s3, 3);
+                if(error_cause == RMMI_PARSE_OK && mode > 0)
+                {
+                    mode--;
+                    if(sim_get_card_status_tc01(mode))
+                        rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "DETECT", RMMI_PTR->arg_list, 0);
+                    else
+                        rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR", RMMI_PTR->arg_list, 0);
+                    RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ONLY );
+                }
+                else
+                    RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+            #else
+                rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NOT SUPPORT", RMMI_PTR->arg_list, 0);
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ONLY );
+            #endif
+                break;
+
+            default:
+                /* unrecognized format of AT command line */
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+            break;
+        }
+        /* ---------------------------- End of Implementation----------------------*/
+    }
+
+    rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len);
+
+    return;
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_inisim_hdlr
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  source_string_ptr         [IN]         At cmd string
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_inisim_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_uint8    *     rspstr_ptr = NULL;        /* response string and initialization */
+    kal_uint16         rspstr_len = 0;           /* string length variable */
+
+    kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+    rspstr_ptr = &rmmi_rsp_buf[0];
+
+    if ( source_string_ptr == NULL )
+    {
+        rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+    }
+    else
+    {
+        switch (source_string_ptr->cmd_mode)
+        {
+            case RMMI_SET_OR_EXECUTE_MODE:  /* AT%INISIM=XXX... */
+            {
+                rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NOT IMPLEMENT", RMMI_PTR->arg_list, 0);
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+            }
+            break;
+
+            case RMMI_ACTIVE_MODE:  /* AT%INISIM */
+            case RMMI_READ_MODE:    /* AT%INISIM? */
+            case RMMI_TEST_MODE:    /* AT%INISIM=? */
+            {
+                kal_uint8 status;
+                if (L4C_PTR->smu_activated == L4C_SMU_ACTIVE)
+                {
+                    status = 1;
+                }
+                else
+                {
+                    status = 0;
+                }
+
+                RMMI_PTR->arg_list[0] = (void*)&status;
+                rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "%d", RMMI_PTR->arg_list, 1);
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+            }
+            break;
+
+            default:
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+            break;    /* unrecognized format of AT command line */
+        }     /* end of the switch */
+    }
+    rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len );
+
+    return;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *    rmmi_issim_hdlr
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ *****************************************************************************/
+void rmmi_issim_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_uint8 *        rspstr_ptr          = NULL;        /* response string and initialization */
+    kal_uint16         rspstr_len          = 0;           /* string length variable */
+    kal_uint8          check_sim_inserted  = 0;
+
+    kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+    rspstr_ptr = &rmmi_rsp_buf[0];
+
+    rmmi_custom_dbg_trace("rmmi_issim_hdlr()");
+
+    if ( source_string_ptr == NULL )
+    {
+        rmmi_custom_dbg_trace("rmmi_issim_hdlr(), source_string_ptr is NULL!!!");
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+    }
+    else
+    {
+        /* ---------------------------- Implement here ---------------------------*/
+        switch (source_string_ptr->cmd_mode)
+        {
+            /* AT%ISSIM=? */
+            case RMMI_TEST_MODE:
+            /* AT%ISSIM=XXX... */
+            case RMMI_SET_OR_EXECUTE_MODE:
+            rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NOT IMPLEMENT", RMMI_PTR->arg_list, 0);
+            RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+            break;
+            /* AT%ISSIM */
+            case RMMI_ACTIVE_MODE:
+            /* AT%ISSIM? */
+            case RMMI_READ_MODE:
+                if(is_sim_inserted(SIM1) == SMU_SIM_INSERTED)
+                    check_sim_inserted++;
+
+            #ifdef __GEMINI__
+                if(is_sim_inserted(SIM2) == SMU_SIM_INSERTED)
+                    check_sim_inserted++;
+              #if defined(GEMINI_PLUS) && (GEMINI_PLUS == 3)
+                  if(is_sim_inserted(SIM3) == SMU_SIM_INSERTED)
+                      check_sim_inserted++;
+
+                  if(check_sim_inserted == 3)
+                  {
+                      rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "3", RMMI_PTR->arg_list, 0);
+                  }
+                  else
+              #endif /* (GEMINI_PLUS) && (GEMINI_PLUS == 3) */
+                if(check_sim_inserted == 2)
+                {
+                    rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "2", RMMI_PTR->arg_list, 0);
+                }
+                else if(check_sim_inserted == 1)
+                {
+                    rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "1", RMMI_PTR->arg_list, 0);
+                }
+                else
+                {
+                    rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "0", RMMI_PTR->arg_list, 0);
+                }
+            #else     // __GEMINI__
+                RMMI_PTR->arg_list[0] = (void*)&check_sim_inserted;
+                rspstr_len  = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "%d", RMMI_PTR->arg_list, 1);
+            #endif    // __GEMINI__
+              RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+              break;
+
+
+            default:
+            /* unrecognized format of AT command line */
+            RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+            break;
+        }
+        /* ---------------------------- End of Implementation----------------------*/
+    }
+    rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len);
+    return;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *    rmmi_simid_hdlr
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ *****************************************************************************/
+void rmmi_simid_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_uint8    *     rspstr_ptr = NULL;        /* response string and initialization */
+    kal_uint16      rspstr_len = 0;           /* string length variable */
+
+    kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+    rspstr_ptr = &rmmi_rsp_buf[0];
+
+    if ( source_string_ptr == NULL )
+    {
+        rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+    }
+    else
+    {
+        /* ---------------------------- Implement here ---------------------------*/
+        switch (source_string_ptr->cmd_mode)
+        {
+            /* AT%SIMID=? */
+            case RMMI_TEST_MODE:
+            /* AT%SIMID=XXX... */
+            case RMMI_SET_OR_EXECUTE_MODE:
+            {
+                rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NOT IMPLEMENT", RMMI_PTR->arg_list, 0);
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+            }
+            break;
+            /* AT%SIMID */
+            case RMMI_ACTIVE_MODE:
+            /* AT%SIMID? */
+            case RMMI_READ_MODE:
+            {
+                if (L4C_PTR->sim_detected == KAL_FALSE)
+                {
+                    rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NO SIM ERROR", RMMI_PTR->arg_list, 0);
+                }
+                else
+                {
+                    kal_uint8 iccid[11]     = {0,};
+                    kal_uint8 iccid_str[21] = {0,};
+
+                    RMMI_CUST_GET_NVRAM_ICCID(l4c_current_mod_id,iccid);
+                    iccid[10] = 0xFF;
+
+                    if (iccid[0] == 0xFF)
+                    {
+                        rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NO SIM READ ERROR", RMMI_PTR->arg_list, 0);
+                    }
+                    else
+                    {
+                        convert_to_digit(iccid, iccid_str);
+                        RMMI_PTR->arg_list[0] = (void*)iccid_str;
+                        rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "%s", RMMI_PTR->arg_list, 1);
+                    }
+                }
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+                break;
+            }
+            default:
+            {
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+            }
+            break; /* unrecognized format of AT command line */
+        }
+        /* ---------------------------- End of Implementation----------------------*/
+    }
+    rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len);
+
+    return;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  rmmi_simoff_hdlr
+* DESCRIPTION
+*
+* PARAMETERS
+*  source_string_ptr         [IN]         At cmd string
+* RETURNS
+*  void
+*****************************************************************************/
+#ifdef __VSIM__
+#if !defined(__FEATURE_TC01_SIMOFF_EXTENTION__)
+void rmmi_simoff_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_uint8    *    rspstr_ptr   = NULL;        /* response string and initialization */
+    kal_uint16        rspstr_len   = 0;           /* string length variable */
+    kal_uint8         error_cause  = 0;
+    kal_uint8         mode         = 0;
+    kal_uint8         profile_id   = 0;
+
+    kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+    rspstr_ptr = &rmmi_rsp_buf[0];
+    RMMI_PTR->action_cmd = RMMI_CMD_SIMOFF;
+
+    rmmi_custom_dbg_trace("rmmi_simoff_hdlr()");
+
+    if ( source_string_ptr == NULL )
+    {
+        rmmi_custom_dbg_trace("rmmi_simoff_hdlr(), source_string_ptr is NULL!!!");
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+    }
+    else
+    {
+        switch (source_string_ptr->cmd_mode)
+        {
+            /* ---------------------------- Start of Implementation----------------------*/
+            /* AT%SIMOFF */
+            case RMMI_ACTIVE_MODE:
+            /* AT%SIMOFF? */
+            case RMMI_READ_MODE:
+            /* AT%SIMOFF=? */
+            case RMMI_TEST_MODE:
+            {
+                rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NOT IMPLEMENT", RMMI_PTR->arg_list, 0);
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+            }
+            break;
+            /* AT%SIMOFF=XXX... */
+            case RMMI_SET_OR_EXECUTE_MODE:
+            {
+                /* Get the mode, 1:switch_on 0:switch_off */
+                mode = rmmi_int_validator_range_check(&error_cause, source_string_ptr, (kal_uint8) RMMI_COMMA, 2);
+                if (error_cause == RMMI_PARSE_OK)
+                {
+                    if(mode == 1)
+                    {
+                        /* Get the profile_id, 1:UIM 0:GSM (default) */
+                        profile_id = rmmi_int_validator_range_check(&error_cause, source_string_ptr, RMMI_PTR->s_reg.s3, 1);
+
+                        if (error_cause == RMMI_PARSE_NOT_FOUND)
+                        {
+                            error_cause = RMMI_PARSE_OK;
+                            profile_id = 0;
+                        }
+                    }
+                }
+
+                if((error_cause == RMMI_PARSE_OK) && (mode != switch_on))
+                {
+                    if (l4c_sim_vsim_req(source_string_ptr->src_id, mode, profile_id, 0) == KAL_TRUE)
+                    {
+                        switch_on = mode;
+                        if(switch_on == 1)
+                            l4crac_save_auto_attach_context(KAL_TRUE);
+                        return;
+                    }
+                }
+                rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR", RMMI_PTR->arg_list, 0);
+
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ONLY );
+            }
+            break;
+
+            default:
+                /* unrecognized format of AT command line */
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ONLY );
+            break;
+        /* ---------------------------- End of Implementation----------------------*/
+        }     /* end of the switch */
+    }
+
+    rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len);
+    RMMI_PTR->action_cmd = RMMI_MAX_CMD_NUM;
+    return;
+}
+#else
+kal_bool rmmi_util_atoi(kal_char src, kal_uint8* dest){
+  if((src>=0x30) && (src<=0x39)){
+    *dest = (kal_uint8)(src - 0x30);
+  }
+  else{
+    return KAL_FALSE;
+  }
+  return KAL_TRUE;
+}
+kal_bool rmmi_util_atoh(kal_char src, kal_uint8* dest){
+  if((src>=0x30) && (src<=0x39)){
+    *dest = (kal_uint8)(src - 0x30);
+  }
+  else if((src>=0x41) && (src<=0x5A)){
+    *dest = (kal_uint8)(src - 0x37);
+  }
+  else if((src>=0x61) && (src<=0x7A)){
+    *dest = (kal_uint8)(src - 0x57);
+  }
+  else{
+    return KAL_FALSE;
+  }
+  return KAL_TRUE;
+}
+void rmmi_util_upper(kal_uint8* src, kal_uint16 paramstr_len){
+  kal_uint16 idx = 0;
+  for(idx=0; idx<paramstr_len; idx++){
+    if((src[idx]>=0x61) && (src[idx]<=0x7A)){
+      src[idx] = src[idx] - 0x20;
+    }
+  }
+}
+kal_uint16 rmmi_remove_space(kal_uint8* src){
+  kal_uint8* temp = NULL;
+  kal_uint16 srclen = 0;
+  kal_uint16 idx = 0;
+  kal_uint16 idx2 = 0;
+  srclen = strlen((char*)src);
+  kal_prompt_trace(rmmi_current_mod_id, "rmmi_remove_space srclen=%d", srclen);
+  temp = (kal_uint8*)get_ctrl_buffer(srclen);
+  kal_mem_set(temp, 0x00, srclen);
+  kal_mem_cpy(temp, src, srclen);
+  kal_mem_set(src, 0x00, srclen);
+  for(idx=0; idx<srclen; idx++){
+    if(temp[idx] != 0x20){
+      src[idx2++] = temp[idx];
+    }
+  }
+  free_ctrl_buffer(temp);
+  return idx2;
+}
+kal_bool rmmi_simoff_set_vsim_mode(rmmi_string_struct *source_string_ptr, kal_uint8 mode){
+  kal_uint8 profile_id = 0;
+  kal_bool result = KAL_FALSE;
+  rmmi_context_struct* rmmi_ptr = RMMI_PTR;
+  kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_set_vsim_mode mode=%d, switch_on=%d", mode, rmmi_ptr->switch_on);
+  if(mode != rmmi_ptr->switch_on){
+    if (l4c_sim_vsim_req(source_string_ptr->src_id, mode, profile_id, 0) == KAL_TRUE){
+        rmmi_ptr->switch_on = mode;
+        if(rmmi_ptr->switch_on == 1){
+          l4crac_save_auto_attach_context(KAL_TRUE);
+        }
+        result = KAL_TRUE;
+      }
+      else{
+        kal_prompt_trace(rmmi_current_mod_id, " rmmi_simoff_set_vsim_mode l4c_sim_vsim_req fail");
+        result = KAL_FALSE;
+      }
+  }
+  else{
+    result = KAL_FALSE;
+  }
+  return result;
+}
+kal_bool rmmi_simoff_normal_process(rmmi_string_struct *source_string_ptr, kal_uint8* paramstr, kal_uint16 paramstr_len){
+  kal_char modechar = 0x00;
+  kal_uint8 mode = 0;
+  kal_bool result = 0;
+  modechar = (kal_char)paramstr[0];
+  kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_normal_process modechar=0x%02x", modechar);
+  if(rmmi_util_atoi(modechar, &mode) == KAL_FALSE){
+    kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_normal_process wrong mode");
+    return KAL_FALSE;
+  }
+  kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_normal_process mode=%d", mode);
+  if(mode > 1){ result = KAL_FALSE; }
+  else{
+    result = rmmi_simoff_set_vsim_mode(source_string_ptr, mode);
+  }
+  return result;
+}
+kal_bool rmmi_simoff_modem_reset(rmmi_string_struct *source_string_ptr, kal_uint8* paramstr, kal_uint16 paramstr_len){
+  kal_bool result = 0;
+  kal_uint8 mode[3];
+  kal_uint8 auth[256];
+
+  kal_mem_set(auth, 0, sizeof(auth));
+  kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_modem_reset");
+  kal_mem_set(mode, 0x00, 3);
+  kal_mem_cpy(mode, paramstr, paramstr_len);
+  rmmi_util_upper(mode, paramstr_len);
+  if(strncmp((kal_char*)mode, "0RE", paramstr_len) == 0){
+    kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_modem_reset VISM off and reset");
+    RMMI_PTR->action_cmd = RMMI_CMD_SIMOFF_RESET;
+    result = rmmi_simoff_set_vsim_mode(source_string_ptr, 0);
+  }
+  else if(strncmp((kal_char*)mode, "1,1", paramstr_len) == 0){ // To set RUIM_ONLY_INSIDE profile for AT%SIMOFF=1,1
+    kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_modem_reset set RUIM profile");
+
+    /* Set the vsim_profile profile = 2 & vsim_type = RUIM_ONLY_INSIDE*/
+    l4c_vsim_profile_write_req(source_string_ptr->src_id, 1, 7, 0, auth, 0xFF);
+
+    return KAL_TRUE;
+  }
+  else{
+    result = KAL_FALSE;
+  }
+  return result;
+}
+kal_bool rmmi_simoff_update_reset_process(rmmi_string_struct *source_string_ptr, kal_uint8* paramstr, kal_uint16 paramstr_len){
+  kal_uint8 mode = 0;
+  kal_uint8 mccmnc[MAX_LEN_MCCMNC];
+  kal_uint8 iin[MAX_LEN_IIN];
+  kal_uint8 gid1[MAX_LEN_GID1];
+  kal_uint8 spn[MAX_LEN_SPN];
+  kal_uint16 offset = 0;
+  kal_uint16 remain = 0;
+  kal_uint16 idx = 0;
+  kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_update_reset_process paramstr_len=%d", paramstr_len);
+  kal_mem_set(mccmnc, 0x00, MAX_LEN_MCCMNC);
+  kal_mem_set(iin, 0x00, MAX_LEN_IIN);
+  kal_mem_set(gid1, 0x00, MAX_LEN_GID1);
+  kal_mem_set(spn, 0x00, MAX_LEN_SPN);
+  RMMI_PTR->action_cmd = RMMI_CMD_SIMOFF_UPDATE_PARAM;
+  if(rmmi_util_atoi((kal_char)paramstr[offset], &mode) == KAL_FALSE){
+    kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_update_reset_process wrong mode");
+    return KAL_FALSE;
+  }
+  offset++;
+  kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_update_reset_process mode=%d, offset=%d, switch_on=%d", mode, offset, RMMI_PTR->switch_on);
+  if((mode != 1) || (mode == RMMI_PTR->switch_on)){ return KAL_FALSE; }
+  for(idx=0; idx<MAX_LEN_MCCMNC; idx++){
+    if(rmmi_util_atoh((kal_char)paramstr[offset], &mccmnc[idx]) ==  KAL_FALSE){
+      kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_update_reset_process wrong mccmnc");
+      return KAL_FALSE;
+    }
+    if(mccmnc[idx] == 0x0F){ mccmnc[idx] = 0x00; }
+    offset++;
+    kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_update_reset_process mccmnc[%d]=%x, offset=%d", idx, mccmnc[idx], offset);
+  }
+  for(idx=0; idx<MAX_LEN_IIN; idx++){
+    if(rmmi_util_atoi((kal_char)paramstr[offset], &iin[idx]) ==  KAL_FALSE){
+      kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_update_reset_process wrong iin");
+    }
+    offset++;
+    kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_update_reset_process iin[%d]=%x, offset=%d", idx, iin[idx], offset);
+  }
+  for(idx=0; idx<MAX_LEN_GID1; idx++){
+    if(rmmi_util_atoi((kal_char)paramstr[offset], &gid1[idx]) ==  KAL_FALSE){
+      kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_update_reset_process wrong gid1");
+    }
+    offset++;
+    kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_update_reset_process gid1[%d]=%x, offset=%d", idx, gid1[idx], offset);
+  }
+  remain = paramstr_len-offset;
+  for(idx=0; ((idx<remain) && (idx<MAX_LEN_SPN)); idx++){
+    if(idx == 0){
+      if(rmmi_util_atoi((kal_char)paramstr[offset], &spn[idx]) == KAL_FALSE){
+        kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_update_reset_process wrong spn");
+        return KAL_FALSE;
+      }
+      offset++;
+    }
+    else{
+      spn[idx] = paramstr[offset];
+      offset++;
+    }
+    kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_update_reset_process spn[%d]=%x, offset=%d", idx, spn[idx], offset);
+  }
+  if(l4c_sim_vsim_update_req(source_string_ptr->src_id, RMMI_PTR->switch_on, 0, mode, mccmnc, iin, gid1, spn) == KAL_FALSE){
+    kal_prompt_trace(rmmi_current_mod_id, "rmmi_simoff_update_reset_process sending fail");
+    return KAL_FALSE;
+  }
+  return KAL_TRUE;
+}
+void rmmi_simoff_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_uint8 *rspstr_ptr = NULL;        /* response string and initialization */
+    kal_uint16 rspstr_len = 0;           /* string length variable */
+    kal_bool result = KAL_FALSE;
+    kal_uint16 srclen = 0;
+    kal_uint8* paramstr = NULL;
+    kal_uint16 paramstr_len = 0;
+    kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+    rspstr_ptr = &rmmi_rsp_buf[0];
+    RMMI_PTR->action_cmd = RMMI_CMD_SIMOFF;
+    rmmi_custom_dbg_trace("rmmi_simoff_hdlr()");
+    if ( source_string_ptr == NULL ) {
+        rmmi_custom_dbg_trace("rmmi_simoff_hdlr(), source_string_ptr is NULL!!!");
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+    }
+    else{
+      switch (source_string_ptr->cmd_mode){
+          /* AT%SIMOFF */
+          case RMMI_ACTIVE_MODE:
+          /* AT%SIMOFF? */
+          case RMMI_READ_MODE:
+          /* AT%SIMOFF=? */
+          case RMMI_TEST_MODE:
+            rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NOT IMPLEMENT", RMMI_PTR->arg_list, 0);
+            RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+            break;
+          case RMMI_SET_OR_EXECUTE_MODE:
+            srclen = rmmi_remove_space(source_string_ptr->string_ptr);
+            paramstr_len = srclen - LEN_SIMOFF_PREFIX;
+            kal_prompt_trace(rmmi_current_mod_id, " rmmi_simoff_hdlr srclen=%d, paramstr_len=%d", srclen, paramstr_len);
+            paramstr = (kal_uint8*)get_ctrl_buffer(paramstr_len);
+            kal_mem_cpy(paramstr, &source_string_ptr->string_ptr[LEN_SIMOFF_PREFIX-1], paramstr_len);
+            kal_prompt_trace(rmmi_current_mod_id, " strlen((char*)paramstr)=%d, paramstr_len=%d", strlen((char*)paramstr), paramstr_len);
+            if(paramstr_len == 1){
+              result = rmmi_simoff_normal_process(source_string_ptr, paramstr, paramstr_len);
+              if(result == KAL_TRUE){ return; }
+            }
+            else if(paramstr_len == 3){
+              result = rmmi_simoff_modem_reset(source_string_ptr, paramstr, paramstr_len);
+              if(result == KAL_TRUE){ return; }
+            }
+            else if(paramstr_len > 3){
+              result = rmmi_simoff_update_reset_process(source_string_ptr, paramstr, paramstr_len);
+              if(result == KAL_TRUE){ return; }
+            }
+            if(result == KAL_FALSE){
+              rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR", RMMI_PTR->arg_list, 0);
+              RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ONLY );
+            }
+            break;
+          default:
+            /* unrecognized format of AT command line */
+            RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ONLY );
+            break;
+      }
+    }
+    rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len);
+    RMMI_PTR->action_cmd = RMMI_MAX_CMD_NUM;
+}
+#endif
+#endif
+
+
+/*****************************************************************************
+  * FUNCTION
+  *    rmmi_bndi_hdlr
+  * DESCRIPTION
+  *
+  * PARAMETERS
+  *
+  * RETURNS
+  *
+  *****************************************************************************/
+ void rmmi_bndi_hdlr(rmmi_string_struct *source_string_ptr)
+{
+	kal_uint8	 *rspstr_ptr = NULL;		/* response string and initialization */
+	kal_uint16 rspstr_len = 0;			 /* string length variable */
+	rmmi_band_T band;
+    kal_uint8  gsm_band, supported_gsm_band;
+    kal_uint32  umts_band, supported_umts_fdd_band;
+
+    kal_uint32 lte_band[MAX_SUPPORTED_LTE_BAND], supported_lte_band[MAX_SUPPORTED_LTE_BAND];
+    kal_uint32 nr_band[MAX_SUPPORTED_NR_BAND], supported_nr_band[MAX_SUPPORTED_NR_BAND];
+
+	if ( source_string_ptr == NULL )
+	{
+		rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+	}
+	else
+	{
+		kal_uint8 percent_char = RMMI_CUST_PERSENT;
+		kal_uint8 stx = RMMI_CUST_STX;
+		kal_uint8 etx = RMMI_CUST_ETX;
+
+		kal_mem_set(rmmi_rsp_buf,0,sizeof(rmmi_rsp_buf));
+		rspstr_ptr = &rmmi_rsp_buf[0];
+
+			rmmi_band_init( &band );
+		/* ---------------------------- Implement here ---------------------------*/
+		switch (source_string_ptr->cmd_mode)
+		{
+			case RMMI_TEST_MODE:
+			{
+				RMMI_PTR->arg_list[0] = (void*)&stx;
+				RMMI_PTR->arg_list[1] = (void*)&percent_char;
+				RMMI_PTR->arg_list[2] = (void*)&etx;
+
+				rspstr_len = rmmi_fast_string_print( rspstr_ptr,
+				(kal_uint8*) "%cAT%cBNDI=[BAND : 3, 4, 6, 8]%c\r\n[3] : PCS\r\n[4] : DCS\r\n[6] : DUAL EXT\r\n[8] : DUAL US",
+				RMMI_PTR->arg_list, 3);
+				RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+			}
+			break;
+
+			case RMMI_ACTIVE_MODE:
+			case RMMI_READ_MODE:
+			{
+				if( l4c_nw_get_band_req( source_string_ptr->src_id,
+										 &gsm_band,
+										 &umts_band,
+										 &lte_band[0],
+										 &nr_band[0],
+										 &supported_gsm_band,
+										 &supported_umts_fdd_band,
+										 &supported_lte_band[0],
+										 &supported_nr_band[0]) == KAL_TRUE )
+				{
+					RMMI_CUST_SET_RSP_TYPE(RMMI_CUST_RSP_WITH_OK);
+
+					switch( gsm_band )
+					{
+						case RMMI_CUST_BAND_PCS:
+						{
+							rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "PCS", RMMI_PTR->arg_list, 0);
+						}
+						break;
+						case RMMI_CUST_BAND_DCS:
+						{
+							rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "DCS", RMMI_PTR->arg_list, 0);
+						}
+						break;
+						case (RMMI_CUST_BAND_EGSM |RMMI_CUST_BAND_DCS):
+						{
+							rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "DUAL EXT", RMMI_PTR->arg_list, 0);
+						}
+						break;
+						case (RMMI_CUST_BAND_GSM850 |RMMI_CUST_BAND_PCS):
+						{
+							rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "DUAL US", RMMI_PTR->arg_list, 0);
+						}
+						break;
+
+						default:
+						; /* NOP */
+					}
+				}
+
+			}
+			break;
+
+			case RMMI_SET_OR_EXECUTE_MODE:
+			{
+				kal_uint8 opcode = (kal_uint8) rmmi_int_validator(source_string_ptr, (kal_uint8) RMMI_COMMA);
+
+				if (opcode == RMMI_VALIDATOR_ERROR)
+				{
+					RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+					break; //invalid format
+				}
+				else
+				{
+					band.gsm_band= rmmi_cust_band_map( opcode );
+					kal_prompt_trace(MOD_L4C, "BNDI Opcode: %d, gsm band: %x", opcode, band.gsm_band);
+					if( band.gsm_band != RMMI_CUST_BNAD_NOT_SUPPORT )
+					{
+						if(l4c_nw_set_preferred_band_req( source_string_ptr->src_id,
+														  band.gsm_band,
+														  band.umts_band,
+														  &band.lte_band[0],
+														  &band.nr_band[0],
+                                                          KAL_TRUE ) == KAL_TRUE )
+						{
+							rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "BNDI OK", RMMI_PTR->arg_list, 0);
+							// the final "OK" will be print out after band selection succeed.
+							RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ONLY );
+						}
+						else
+						{
+							/*rmmi_custom_dbg_trace("l4c_nw_set_preferred_band_req(), failed !!");*/
+							RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+						}
+					}
+					else
+					{	 /* band.gsm_band == RMMI_CUST_BNAD_NOT_SUPPORT */
+						rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "BNDI ERROR", RMMI_PTR->arg_list, 0);
+						// the final "OK" will be print out after band selection succeed.
+						RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+					}
+				}
+			}
+			break;
+
+			default:
+			{
+				/* unrecognized format of AT command line */
+				/*rmmi_custom_dbg_trace("Unrecognized format of AT command line!");*/
+				RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+			}
+		}
+		/* ---------------------------- End of Implementation----------------------*/
+		rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len );
+	}
+	return;
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *	  rmmi_cust_band_map
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ *****************************************************************************/
+static kal_uint8 rmmi_cust_band_map( kal_uint8 opcode )
+{
+	kal_uint8 ret;
+
+	switch( opcode )
+	{
+		case RMMI_CUST_BNDI_PARAM_PCS:
+			ret = RMMI_CUST_BAND_PCS;
+		break;
+		case RMMI_CUST_BNDI_PARAM_DCS:
+			ret = RMMI_CUST_BAND_DCS;
+		break;
+		case RMMI_CUST_BNDI_PARAM_DUAL_EXT:
+			ret = ( RMMI_CUST_BAND_EGSM |RMMI_CUST_BAND_DCS );
+		break;
+		case RMMI_CUST_BNDI_PARAM_DUAL_US:
+			ret = ( RMMI_CUST_BAND_GSM850 |RMMI_CUST_BAND_PCS );
+		break;
+		default:
+			ret = RMMI_CUST_BNAD_NOT_SUPPORT;
+	}
+
+	return ret;
+}
+
+/* For MOLY00165083 */
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_is_LTE_band_exist
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ * kal_uint32 *
+ * RETURNS
+ * kal_bool
+ *****************************************************************************/
+static kal_bool rmmi_is_LTE_band_exist(kal_uint32 * lte_band)
+{
+    kal_uint8 i = 0;
+    kal_uint8 ret_val = KAL_FALSE; // invalid byte number
+
+    for(i = 0; i  < MAX_SUPPORTED_LTE_BAND; i ++)
+    {
+        if(lte_band[i] != 0)
+        {
+            ret_val = KAL_TRUE;
+            break;
+        }
+    }
+    return ret_val;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_is_supported_band
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ * kal_uint32 *, kal_uint32 *
+ * RETURNS
+ * kal_bool
+ *****************************************************************************/
+
+/* For MOLY00165083 */
+ static kal_bool rmmi_is_supported_band( kal_uint32 * supported_lte_band, const kal_uint32 * requested_lte_band )
+ {
+	 kal_bool ret_val = KAL_FALSE;
+	 if( ((supported_lte_band[0] & requested_lte_band[0]) == requested_lte_band[0])
+		 && ((supported_lte_band[1] & requested_lte_band[1]) == requested_lte_band[1])
+		 && ((supported_lte_band[2] & requested_lte_band[2]) == requested_lte_band[2])
+		 && ((supported_lte_band[3] & requested_lte_band[3]) == requested_lte_band[3])
+		 && ((supported_lte_band[4] & requested_lte_band[4]) == requested_lte_band[4])
+		 && ((supported_lte_band[5] & requested_lte_band[5]) == requested_lte_band[5])
+		 && ((supported_lte_band[6] & requested_lte_band[6]) == requested_lte_band[6])
+		 && ((supported_lte_band[7] & requested_lte_band[7]) == requested_lte_band[7]) )
+	 {
+		 ret_val = KAL_TRUE;
+	 }
+	 return ret_val;
+ }
+
+/* For MOLY00165083 */
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_construct_band_value_and_string
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ *****************************************************************************/
+static kal_uint16 rmmi_construct_band_value_and_string(	kal_uint8	 *rspstr_ptr,
+																kal_uint8	 custom_band_value,
+																rmmi_band_T * band_ptr ,
+																kal_uint32 supported_gsm_band,
+																kal_uint32 supported_umts_fdd_band,
+																kal_uint32 * supported_lte_band,
+																kal_uint32 * supported_nr_band  )
+{
+	kal_uint16 rspstr_len = 0;			 /* string length variable */
+	kal_bool result = KAL_FALSE;
+	kal_uint8 i = 0;
+
+	for(i=0; i<MAX_CAMPREQ_BAND; )
+	{
+		kal_prompt_trace(MOD_L4C, "table: %d,  requested: %d", custom_band_table[i].custom_band, custom_band_value);
+
+		if( custom_band_table[i].custom_band == custom_band_value )
+		{
+			if( custom_band_value < CUST_BAND_WCDMA_I )
+			{
+				if( custom_band_value == CUST_BAND_GSM_ONLY )
+				{
+					if( supported_gsm_band != 0 )
+					{
+						band_ptr->band_present_bitmap |= GSM_BAND_PRESENT_BITMAP;
+						band_ptr->gsm_band = supported_gsm_band;
+						result = KAL_TRUE;
+					}
+				}
+				else if( (supported_gsm_band & (kal_uint8) custom_band_table[i].band[0])
+												== (kal_uint8) custom_band_table[i].band[0] )
+				{
+					band_ptr->band_present_bitmap |= GSM_BAND_PRESENT_BITMAP;
+					band_ptr->gsm_band |= (kal_uint8) custom_band_table[i].band[0];
+					result = KAL_TRUE;
+				}
+			}
+			else if( custom_band_value < CUST_BAND_LTE_ONLY )
+			{
+				if( custom_band_value == CUST_BAND_1X_ONLY )
+				{
+					;// NOP
+				}
+				else if( custom_band_value == CUST_BAND_HDR_ONLY )
+				{
+					;// NOP
+				}
+				else if( custom_band_value == CUST_BAND_TDSCDMA_ONLY )
+				{
+					;// NOP
+				}
+				else if( custom_band_value == CUST_BAND_WCDMA_ONLY )
+				{
+					if( supported_umts_fdd_band != 0 )
+					{
+						band_ptr->band_present_bitmap |= UMTS_BAND_PRESENT_BITMAP;
+						band_ptr->umts_band = supported_umts_fdd_band;
+						result = KAL_TRUE;
+					}
+				}
+				else if( custom_band_value == CUST_BAND_Automatic )
+				{
+					if( supported_gsm_band != 0 )
+					{
+						band_ptr->band_present_bitmap |= GSM_BAND_PRESENT_BITMAP;
+						band_ptr->gsm_band = supported_gsm_band;
+						result = KAL_TRUE;
+					}
+					if( supported_umts_fdd_band != 0 )
+					{
+						band_ptr->band_present_bitmap |= UMTS_BAND_PRESENT_BITMAP;
+						band_ptr->umts_band = supported_umts_fdd_band;
+						result = KAL_TRUE;
+					}
+					if (rmmi_is_LTE_band_exist(&supported_lte_band[0]))
+					{
+						band_ptr->band_present_bitmap |= LTE_BAND_PRESENT_BITMAP;
+						kal_mem_cpy(&(band_ptr->lte_band[0]), &supported_lte_band[0], sizeof(kal_uint32)*MAX_SUPPORTED_LTE_BAND);
+						result = KAL_TRUE;
+					}
+				}
+				else if ( custom_band_value == CUST_BAND_GSM_WCDMA )
+				{
+					if( supported_gsm_band != 0 )
+					{
+						band_ptr->band_present_bitmap |= GSM_BAND_PRESENT_BITMAP;
+						band_ptr->gsm_band = supported_gsm_band;
+						result = KAL_TRUE;
+					}
+					if( supported_umts_fdd_band != 0 )
+					{
+						band_ptr->band_present_bitmap |= UMTS_BAND_PRESENT_BITMAP;
+						band_ptr->umts_band = supported_umts_fdd_band;
+						result = KAL_TRUE;
+					}
+				}
+				else if( (supported_umts_fdd_band & custom_band_table[i].band[0])
+													== custom_band_table[i].band[0] )
+				{
+					band_ptr->band_present_bitmap |= UMTS_BAND_PRESENT_BITMAP;
+					band_ptr->umts_band |= custom_band_table[i].band[0];
+					result = KAL_TRUE;
+				}
+			}
+			else
+			{
+				if( custom_band_value == CUST_BAND_LTE_ONLY )
+				{
+					if(rmmi_is_LTE_band_exist(&supported_lte_band[0]) )
+					{
+						band_ptr->band_present_bitmap |= LTE_BAND_PRESENT_BITMAP;
+						kal_mem_cpy(&(band_ptr->lte_band[0]), &supported_lte_band[0], sizeof(kal_uint32)*MAX_SUPPORTED_LTE_BAND);
+						result = KAL_TRUE;
+					}
+				}
+				else // specific LTE band request
+				{
+					if (rmmi_is_supported_band(&supported_lte_band[0], &(custom_band_table[i].band[0])))
+					{
+						band_ptr->band_present_bitmap |= LTE_BAND_PRESENT_BITMAP;
+						kal_mem_cpy(&(band_ptr->lte_band[0]), &(custom_band_table[i].band[0]), sizeof(kal_uint32)*MAX_SUPPORTED_LTE_BAND);
+						result = KAL_TRUE;
+					}
+				}
+			}
+		}
+
+		if (result == KAL_TRUE)
+		{
+			kal_prompt_trace(MOD_L4C, "Requested band: Band bitmap: [%x]  LTE: [%x][%x], UMTS: [%x], GSM [%x]",
+			band_ptr->band_present_bitmap, band_ptr->lte_band[0], band_ptr->lte_band[1], band_ptr->umts_band, band_ptr->gsm_band);
+
+			if(rspstr_ptr != NULL)
+			{
+				rspstr_len = kal_sprintf( (char*)rspstr_ptr, "%c%s%c\n", 0x02, custom_band_table[i].band_str,0x03 );
+			}
+			break;
+		}
+		i++;
+	}
+
+	if(rspstr_ptr != NULL)
+	{
+		if ( result == KAL_TRUE )
+		{
+			rspstr_len += kal_sprintf( (char*)rspstr_ptr+rspstr_len, "%cOK%c", 0x02, 0x03);
+		}
+		else
+		{
+			rspstr_len += kal_sprintf( (char*)rspstr_ptr+rspstr_len, "%cNOT SUPPORT%c", 0x02, 0x03);
+		}
+	}
+
+	return rspstr_len;
+}
+
+rat_enum l4c_get_factory_rat_mode()
+{
+    return cust_fac_ptr_global->factory_change_rat;
+}
+
+void set_factory_rat_mode( kal_uint8 rat_band_bitmap )
+{
+	cust_fac_ptr_global->factory_change_rat = RAT_NONE;
+	if( (rat_band_bitmap & GSM_BAND_PRESENT_BITMAP) == GSM_BAND_PRESENT_BITMAP ) cust_fac_ptr_global->factory_change_rat |= RAT_GSM;
+	if( (rat_band_bitmap & UMTS_BAND_PRESENT_BITMAP) == UMTS_BAND_PRESENT_BITMAP ) cust_fac_ptr_global->factory_change_rat |= RAT_UMTS;
+	if( (rat_band_bitmap & LTE_BAND_PRESENT_BITMAP) == LTE_BAND_PRESENT_BITMAP ) cust_fac_ptr_global->factory_change_rat |= RAT_LTE;
+
+	return;
+}
+
+//AT_CAMPREQ MOLY00303967
+#ifdef __TC01__
+/*****************************************************************************
+* FUNCTION
+*  rmmi_band_init
+* DESCRIPTION
+*
+* PARAMETERS
+*
+* RETURNS
+*
+*****************************************************************************/
+static void rmmi_band_init( rmmi_band_T * band )
+{
+    band->band_present_bitmap = 0;
+    band->gsm_band = 0;
+    band->umts_band = 0;
+    kal_mem_set(&band->lte_band[0], 0, sizeof(kal_uint32)*MAX_SUPPORTED_LTE_BAND);
+    kal_mem_set(&band->nr_band[0], 0, sizeof(kal_uint32)*MAX_SUPPORTED_NR_BAND); /* at%ltecall */
+    return;
+
+}
+#if 0 //block for warning
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+
+#ifdef __AS_SPECIFIC_CHANNEL_SRCH__
+/*****************************************************************************
+* FUNCTION
+*  rmmi_initial_campreq_with_set_rft_mode
+* DESCRIPTION
+*
+* PARAMETERS
+*  void
+* RETURNS
+*  boolean
+*****************************************************************************/
+kal_bool rmmi_initial_campreq_with_set_rft_mode(  )
+{
+    kal_bool ret_val = KAL_FALSE;
+
+    if( L4C_COMM_PTR->cust_rft_mode == CUST_RFT_MODE_ENTERING )
+    {
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+        ret_val = KAL_FALSE;
+    }
+    else
+    {
+        ret_val = l4c_nw_efun_state_req(RMMI_PTR->cust_cmd_src_id, 1, RFOFF_CAUSE_UNSPECIFIED);
+        if (ret_val == KAL_TRUE)
+        {
+            L4C_COMM_PTR->cust_rft_mode = CUST_RFT_MODE_ENTERING;
+        }
+    }
+
+    return ret_val;
+}
+#endif
+#ifdef __AS_SPECIFIC_CHANNEL_SRCH__
+/*****************************************************************************
+* FUNCTION
+*  rmmi_cust_init_campreq_rrsp
+* DESCRIPTION
+*
+* PARAMETERS
+*  void
+* RETURNS
+*  void
+*****************************************************************************/
+void rmmi_cust_init_campreq_rrsp( )
+{
+  kal_uint8    *rspstr_ptr = NULL;        /* response string and initialization */
+  kal_uint16 rspstr_len = 0;           /* string length variable */
+  custom_factory_band_context_struct* rac_factory_ptr_g = cust_fac_ptr_global;
+  rmmi_band_T band;
+  kal_uint8  gsm_band, supported_gsm_band;
+  kal_uint32 umts_band, supported_umts_fdd_band;
+  kal_uint32 lte_band[MAX_SUPPORTED_LTE_BAND], supported_lte_band[MAX_SUPPORTED_LTE_BAND];
+  kal_uint32 nr_band[MAX_SUPPORTED_NR_BAND], supported_nr_band[MAX_SUPPORTED_NR_BAND];
+
+
+  kal_mem_set(rmmi_rsp_buf,0,sizeof(rmmi_rsp_buf));
+  rspstr_ptr = &rmmi_rsp_buf[0];
+
+  RMMI_PTR->current_src = RMMI_PTR->cust_cmd_src_id;
+
+  L4C_COMM_PTR->cust_rft_mode = CUST_RFT_MODE_ON;
+  kal_prompt_trace(MOD_L4C, "rmmi_cust_init_campreq_rrsp()");
+  rmmi_band_init(&band);
+  if( l4c_nw_get_band_req(    RMMI_PTR->cust_cmd_src_id,
+                              &gsm_band,
+                              &umts_band,
+                              lte_band,
+                              nr_band,
+                              &supported_gsm_band,
+                              &supported_umts_fdd_band,
+                              supported_lte_band,
+                              supported_nr_band) == KAL_TRUE )
+  {
+      rspstr_len = rmmi_construct_band_value_and_string (  rspstr_ptr,
+      L4C_COMM_PTR->init_campreq_mode,
+      &band,
+      supported_gsm_band,
+      supported_umts_fdd_band,
+      &supported_lte_band[0],
+      &supported_nr_band[0] );
+  }
+  else
+  {
+      rmmi_custom_dbg_trace("campreq - get supported band - failure!");
+      RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+  }
+
+  if( band.band_present_bitmap )
+  {
+      set_factory_rat_mode(band.band_present_bitmap);
+      if(l4c_nw_set_preferred_band_req(   RMMI_PTR->cust_cmd_src_id,
+                                          band.gsm_band,
+                                          band.umts_band,
+                                          band.lte_band,
+                                          band.nr_band,
+                                          KAL_TRUE ) == KAL_TRUE )
+      {
+          rac_factory_ptr_g->factory_dynamic_band = L4C_COMM_PTR->init_campreq_mode;
+          RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ONLY );
+      }
+      else
+      {
+          RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+      }
+  }
+  else
+  {
+      RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ONLY );
+  }
+
+ if( rac_factory_ptr_g->initial_lte_call )
+ {
+    return;
+ }
+
+  rmmi_cust_final_rsp_generator(RMMI_PTR->current_src, (kal_uint8*) rspstr_ptr, rspstr_len );
+
+  return;
+
+  }
+#endif
+
+/*****************************************************************************
+* FUNCTION
+*  rmmi_campreq_hdlr
+* DESCRIPTION
+*
+* PARAMETERS
+*  source_string_ptr         [IN]         At cmd string
+* RETURNS
+*  void
+*****************************************************************************/
+
+void rmmi_campreq_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_uint8    *rspstr_ptr = NULL;        /* response string and initialization */
+    kal_uint16 rspstr_len = 0;           /* string length variable */
+    custom_factory_band_context_struct* rac_factory_ptr_g = cust_fac_ptr_global;
+    rmmi_band_T band;
+    kal_uint8  gsm_band, supported_gsm_band;
+    kal_uint32 umts_band, supported_umts_fdd_band;
+    kal_uint32 lte_band[MAX_SUPPORTED_LTE_BAND], supported_lte_band[MAX_SUPPORTED_LTE_BAND];
+    kal_uint32 nr_band[MAX_SUPPORTED_NR_BAND], supported_nr_band[MAX_SUPPORTED_NR_BAND];
+    kal_uint8 custom_band_value;
+
+    rmmi_band_init( &band );
+
+    kal_mem_set(rmmi_rsp_buf,0,sizeof(rmmi_rsp_buf));
+    rspstr_ptr = &rmmi_rsp_buf[0];
+
+    if ( source_string_ptr == NULL )
+    {
+        rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+    }
+    else
+    {
+        switch (source_string_ptr->cmd_mode)
+        {
+            case RMMI_TEST_MODE:
+            case RMMI_READ_MODE:
+            case RMMI_ACTIVE_MODE:
+            //    RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+            //break;
+            case RMMI_SET_OR_EXECUTE_MODE:  /* at%campreq */
+            {
+                kal_uint8 error_cause;
+
+                /* Get the mode */
+                custom_band_value = rmmi_int_validator_u8_check(&error_cause, source_string_ptr,RMMI_PTR->s_reg.s3 );
+                kal_prompt_trace(MOD_L4C, "campreq param: %d", custom_band_value);
+                if (custom_band_value == RMMI_VALIDATOR_ERROR)
+                {
+                    RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+                }
+                else
+                {
+#ifdef __AS_SPECIFIC_CHANNEL_SRCH__
+                    gas_custom_set_specific_channel_srch( KAL_TRUE );
+                    uas_custom_set_specific_channel_srch( KAL_TRUE );
+                    eas_custom_set_specific_channel_srch( KAL_TRUE );
+
+                    RMMI_PTR->cust_cmd_src_id = source_string_ptr->src_id;
+                    /* Start MUSE - ALPS01198329 */
+                    /* The device will make SIM2 flight mode in the MUSE factory test state. */
+                    if( L4C_COMM_PTR->cust_rft_mode == CUST_RFT_MODE_OFF )
+                    {
+                        L4C_COMM_PTR->init_campreq_mode = custom_band_value;
+                        if (L4C_ROOT_PTR->efun_state == SIM1_RADIO_ON)
+                        {
+                            L4C_COMM_PTR->cust_rft_mode = CUST_RFT_MODE_ON;
+                        }
+                        else
+                        {
+                            if ( rmmi_initial_campreq_with_set_rft_mode( ) == KAL_TRUE)
+                            {
+                                return;
+                            }
+                            else
+                            {
+                                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+                                rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len );
+                                return;
+                            }
+                        }
+                    }
+                    else if (L4C_COMM_PTR->cust_rft_mode == CUST_RFT_MODE_ENTERING )
+                    {
+                        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+                        rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len );
+                        return;
+                    }
+#endif /* __AS_SPECIFIC_CHANNEL_SRCH__ */
+
+                    rmmi_band_init(&band);
+
+                    if( l4c_nw_get_band_req(    source_string_ptr->src_id,
+                                                &gsm_band,
+                                                &umts_band,
+                                                lte_band,
+                                                nr_band,
+                                                &supported_gsm_band,
+                                                &supported_umts_fdd_band,
+                                                supported_lte_band,
+                                                supported_nr_band) == KAL_TRUE )
+                    {
+                        kal_prompt_trace(MOD_L4C, "Supported Band  GSM[%x], UMTS[%x], LTE[%x][%x]",
+                        supported_gsm_band,  supported_umts_fdd_band, supported_lte_band[0], supported_lte_band[1]);
+
+                        rspstr_len = rmmi_construct_band_value_and_string ( rspstr_ptr,
+                                                                            custom_band_value,
+                                                                            &band,
+                                                                            supported_gsm_band,
+                                                                            supported_umts_fdd_band,
+                                                                            &supported_lte_band[0],
+                                                                            &supported_nr_band[0] );
+                    }
+                    else
+                    {
+                        rmmi_custom_dbg_trace("campreq - get supported band - failure!");
+                        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+                    }
+
+                    if( band.band_present_bitmap )
+                    {
+                        rac_factory_ptr_g->factory_dynamic_band = custom_band_value;
+                        set_factory_rat_mode(band.band_present_bitmap);
+
+                        if(l4c_nw_set_preferred_band_req( source_string_ptr->src_id,
+                        band.gsm_band,
+                        band.umts_band,
+                        band.lte_band,
+                        band.nr_band,
+                        KAL_TRUE ) == KAL_TRUE )
+                        {
+                            RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ONLY );
+                        }
+                        else
+                        {
+                            RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+                        }
+                    }
+                    else
+                    {
+                        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ONLY );
+                    }
+
+                    }
+            }
+            break;
+
+            default:
+            {
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+                /* unrecognized format of AT command line */
+            }
+            break;
+        }   /* end of the switch */
+    }
+    rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len );
+    return;
+
+}
+
+//Gen93_porting //AT_CAMP
+/*****************************************************************************
+* FUNCTION
+*  rmmi_camp_hdlr
+* DESCRIPTION
+*
+* PARAMETERS
+*  source_string_ptr         [IN]         At cmd string
+* RETURNS
+*  void
+*****************************************************************************/
+void rmmi_camp_hdlr(rmmi_string_struct *source_string_ptr)
+{
+   kal_uint8    *rspstr_ptr = NULL;        /* response string and initialization */
+   kal_uint16 rspstr_len = 0;           /* string length variable */
+   kal_uint8 status;
+
+   kal_mem_set(rmmi_rsp_buf,0,sizeof(rmmi_rsp_buf));
+   rspstr_ptr = &rmmi_rsp_buf[0];
+
+   if ( source_string_ptr == NULL )
+   {
+       rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+       RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+   }
+   else
+   {
+       switch (source_string_ptr->cmd_mode)
+       {
+           case RMMI_TEST_MODE:
+           case RMMI_ACTIVE_MODE:
+           case RMMI_READ_MODE:
+           case RMMI_SET_OR_EXECUTE_MODE:
+           {
+               //l4crac_get_attach_status(&fake, &fake, &status);
+               status=l4crac_get_gsm_status();
+               if ((status == L4C_RAC_LIMITED_SERVICE) || (status == L4C_RAC_OK))
+               {
+                   rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "CAMP OK", RMMI_PTR->arg_list, 0);
+                   RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+               }
+               else
+               {
+                   RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+               }
+               break;
+           }
+           default:
+           {
+               /* unrecognized format of AT command line */
+               break;
+           }
+       }     /* end of the switch */
+   }
+
+   rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len );
+   return;
+
+}
+#endif /* (__TC01__) */
+
+/*****************************************************************************
+  * FUNCTION
+  *  rmmi_lbcall_hdlr
+  * DESCRIPTION
+  *
+  * PARAMETERS
+  *  source_string_ptr         [IN]         At cmd string
+  * RETURNS
+  *  void
+  *****************************************************************************/
+void rmmi_lbcall_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_uint8 *             rspstr_ptr  = NULL;        /* response string and initialization */
+    kal_uint16              rspstr_len  = 0;           /* string length variable */
+    kal_uint8               mode        = 0;
+    kal_uint8               error_cause;
+
+
+    kal_mem_set(rmmi_rsp_buf, 0, sizeof(rmmi_rsp_buf));
+    rspstr_ptr = &rmmi_rsp_buf[0];
+
+    if ( source_string_ptr == NULL )
+    {
+        rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+    }
+    else
+    {
+       /* ---------------------------- Implement here ---------------------------*/
+        switch (source_string_ptr->cmd_mode)
+        {
+            case RMMI_ACTIVE_MODE:  /* AT%LBCALL */
+            case RMMI_TEST_MODE:    /* AT%LBCALL=? */
+            case RMMI_READ_MODE:    /* AT%LBCALL? */
+            {
+                rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NOT IMPLEMENT", RMMI_PTR->arg_list, 0);
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+            }
+            case RMMI_SET_OR_EXECUTE_MODE: /* AT%LBCALL=XXX... */
+            {
+                mode = rmmi_int_validator_range_check(&error_cause, source_string_ptr, RMMI_PTR->s_reg.s3, 1);
+                if (error_cause != RMMI_PARSE_OK)
+                {
+                    rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "ERROR", RMMI_PTR->arg_list, 0);
+                    RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ONLY );
+                    break;
+                }
+                l4c_c2k_set_1x_loop_back_call_req(source_string_ptr->src_id, mode);
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+            }
+            break;
+
+            default:
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+            break;
+        }
+        /* ---------------------------- End of Implementation----------------------*/
+        rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len );
+    }
+    return;
+}
+
+ /* AT%ECALL */
+/*****************************************************************************
+  * FUNCTION
+  *    rmmi_ecall_hdlr
+  * DESCRIPTION
+  *
+  * PARAMETERS
+  *
+  * RETURNS
+  *
+  *****************************************************************************/
+ void rmmi_ecall_hdlr(rmmi_string_struct *source_string_ptr)
+ {
+	 kal_uint8 * rspstr_ptr = NULL; 	   /* response string and initialization */
+	 kal_uint16 rspstr_len = 0; 		  /* string length variable */
+	 kal_uint8 ecc_mode  = 0;
+	 kal_uint8 error_cause = 0;
+	 kal_uint8 sim_id;
+
+	 /*rmmi_custom_dbg_trace("rmmi_ecall_hdlr()");*/
+
+	 if ( source_string_ptr == NULL )
+	 {
+		 rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+	 }
+	 else
+	 {
+		 kal_mem_set(rmmi_rsp_buf,0,sizeof(rmmi_rsp_buf));
+			rspstr_ptr = &rmmi_rsp_buf[0];
+
+ /* ---------------------------- Implement here ---------------------------*/
+		 switch (source_string_ptr->cmd_mode)
+		 {
+			 case RMMI_ACTIVE_MODE: //AT%ECALL
+			 case RMMI_TEST_MODE: //AT%ECALL=?
+			 case RMMI_READ_MODE:  //AT%ECALL?
+			 {
+				 if( rmmi_is_ecc_ongoing() == KAL_TRUE	&& RMMI_GET_ECALL_ACTION_STATE() == RMMI_ECALL_SETUP )
+				 {
+					 rspstr_len = rmmi_fast_string_print_custom( rspstr_ptr, (kal_uint8*) "1", RMMI_PTR->arg_list, 0);
+				 }
+				 else
+				 {
+					 rspstr_len = rmmi_fast_string_print_custom( rspstr_ptr, (kal_uint8*) "0", RMMI_PTR->arg_list, 0);
+				 }
+			  RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+				 break;
+			 }
+
+			 case RMMI_SET_OR_EXECUTE_MODE:  //AT%ECALL=<val>
+			 {
+				 ecc_mode = rmmi_int_validator_u8_check(&error_cause,source_string_ptr, (kal_uint8) RMMI_COMMA);
+
+				 if (error_cause != RMMI_PARSE_OK)
+				 {
+					 /* Response "ECALL ERROR" */
+					 rspstr_len = rmmi_fast_string_print_custom( rspstr_ptr, (kal_uint8*) "ECALL ERROR", RMMI_PTR->arg_list, 0);
+					 RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+					 break;
+				 }
+
+				 switch ( ecc_mode )
+				 {
+					 /* Behave just like ATH ,except the response data to PC*/
+					 case RMMI_CUST_ECC_HUP:
+					 {
+						 if( rmmi_is_ecc_ongoing() == KAL_TRUE && RMMI_GET_ECALL_ACTION_STATE() == RMMI_ECALL_SETUP )
+						 {
+											 /* we use this flag to distinguish the request is from at%ecall. In order to output the response data for at%ecall */
+							 RMMI_SET_ECALL_ACTION( RMMI_ECALL_CLEAR );
+							 sim_id = rmmi_get_simid_call_exist();
+							 rmmi_cust_invoke_ecc_call_clearing( source_string_ptr->src_id, sim_id );
+									  rspstr_len = rmmi_fast_string_print_custom( rspstr_ptr, (kal_uint8*) "[0]ECALL OFF", RMMI_PTR->arg_list, 0);
+							 RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+						 }
+						 else
+						 {
+										  /* Response "ECALL ERROR" "ERROR" */
+									 rspstr_len = rmmi_fast_string_print_custom( rspstr_ptr, (kal_uint8*) "ECALL ERROR", RMMI_PTR->arg_list, 0);
+							 RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+						 }
+						 break;
+					 }
+
+					 /* Behave just like ATD112; except the response data to PC*/
+					 case RMMI_CUST_ECC_INVOKE:
+					 {
+						 /* Assume in service	  */
+				 RMMI_ECALL_SET_NO_SRV_STATE( KAL_FALSE );
+
+						 if( l4crac_get_gsm_status()  == L4C_RAC_NO_CELL)
+						 {
+							  /* MAUI_02610201: this flag is used to prevent dialing ecc for a long time if MS is in no service */
+							  RMMI_ECALL_SET_NO_SRV_STATE( KAL_TRUE );
+						 }
+
+						 sim_id = rmmi_get_simid_call_exist();
+
+						 if ( sim_id  != RMMI_INVALID_SIM_ID )
+						 {
+							 /* Response "ECALL ERROR" "ERROR" */
+							 rspstr_len = rmmi_fast_string_print_custom( rspstr_ptr, (kal_uint8*) "ECALL ERROR", RMMI_PTR->arg_list, 0);
+							 RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+							 break;
+						 }
+						 else
+						 {
+					if( rmmi_is_rac_activated( ) == KAL_TRUE )
+							 {
+								 /* we use this flag to distinguish the request is from at%ecall. In order to output the response data for at%ecall */
+								 RMMI_SET_ECALL_ACTION( RMMI_ECALL_SETUP );
+								 sim_id = RMMI_L4CID_MAP2_SIMID(l4c_current_mod_id);
+								 rmmi_cust_invoke_ecc_call_setup( source_string_ptr->src_id, sim_id);
+										  rspstr_len = rmmi_fast_string_print_custom( rspstr_ptr, (kal_uint8*) "[1]ECALL ON", RMMI_PTR->arg_list, 0);
+								 RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+								 break;
+							 }
+							 else
+							 {
+								 rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "NETWORK NOT AVAILABLE", RMMI_PTR->arg_list, 0);
+								 RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+								 break;
+							 }
+						 }
+					 }
+
+					 default:
+					 {
+						 /* Response "ECALL ERROR" */
+						 rspstr_len = rmmi_fast_string_print_custom( rspstr_ptr, (kal_uint8*) "ECALL ERROR", RMMI_PTR->arg_list, 0);
+						 RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+						 break;
+					 }
+				 }
+
+				 break;
+			 }
+
+			 default:
+			 {
+				 /* unrecognized format of AT command line */
+				 rmmi_custom_dbg_trace("Unrecognized format of AT command line!");
+
+				 RMMI_CUST_SET_CMEE( RMMI_ERR_UNSPECIFIED );
+				 RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+				 break;
+			 }
+		 }
+		 rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len);
+ /* ---------------------------- End of Implementation----------------------*/
+	 }
+
+	 return;
+ }
+
+/*****************************************************************************
+  * FUNCTION
+  *    rmmi_is_ecc_ongoing
+  * DESCRIPTION
+  *
+  * PARAMETERS
+  *
+  * RETURNS
+  *
+  *****************************************************************************/
+ static kal_bool rmmi_is_ecc_ongoing( )
+ {
+	 kal_bool				 ret			 = KAL_FALSE;
+	 kal_uint8				 call_id		 = 0;
+	 l4c_call_entry_struct	 call_info;
+	 kal_bool				 ecc_exist		 = KAL_FALSE;
+	 kal_uint8				 sim_id 		 = RMMI_INVALID_SIM_ID;
+	 kal_uint8				 restore_sim_if  = 0;
+
+	 sim_id = rmmi_get_simid_call_exist();
+
+	 if ( sim_id != RMMI_L4CID_MAP2_SIMID(l4c_current_mod_id) )
+	 {
+		 /* call context is in SIM1 now ,switch to get SIM2 call information */
+		 csmcc_context_selection( sim_id );
+		 restore_sim_if = RMMI_L4CID_MAP2_SIMID(l4c_current_mod_id);
+	 }
+
+	 if((l4ccsm_cc_get_in_call	(&call_id)			   == KAL_TRUE) &&
+		(l4ccsm_cc_get_call_info(call_id,&call_info,0) == KAL_TRUE)   )
+	 {
+		 ecc_exist = ecc_custom_verify_emergency_number(
+							 call_info.number.addr_bcd,
+							 call_info.number.addr_length,
+							 ECC_ENCODING_BCD,
+							 RMMI_L4CID_MAP2_SIMID( l4c_current_mod_id ),
+							 NULL, NULL, NULL);
+	 }
+
+	 if( restore_sim_if != RMMI_INVALID_SIM_ID )
+	 {
+		 /* after checking call info in the other side , we switch the call context back */
+		 csmcc_context_selection( restore_sim_if );
+	 }
+
+	 /* check if there is ECC callsetup request ongoing */
+	 for( sim_id = 0; sim_id < L4_MAX_SIM_NUM; sim_id ++ )
+	 {
+		 if((l4c_search_all_src(RMMI_SIMID_MAP2_L4CID(sim_id), ATD_ECC)== KAL_TRUE) || (ecc_exist == KAL_TRUE) )
+		 {
+			 ret = KAL_TRUE;
+		 }
+	 }
+
+	 return ret;
+ }
+
+/*****************************************************************************
+   * FUNCTION
+   *    rmmi_get_simid_call_exist
+   * DESCRIPTION
+   *
+   * PARAMETERS
+   *
+   * RETURNS
+   *
+   *****************************************************************************/
+  static kal_uint8 rmmi_get_simid_call_exist( )
+  {
+      kal_uint8 sim_id;
+
+          for( sim_id = 0; sim_id < L4_MAX_SIM_NUM; sim_id ++ )
+          {
+              if ( RMMI_IS_CALL_EXIST( sim_id ) == KAL_TRUE )
+              {
+                  return sim_id;
+              }
+          }
+
+      return RMMI_INVALID_SIM_ID;
+  }
+
+ /*****************************************************************************
+ * FUNCTION
+ *	  rmmi_cust_invoke_ecc_call_clearing
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ *****************************************************************************/
+static void rmmi_cust_invoke_ecc_call_clearing ( l4c_source_id_enum src_id, kal_uint8 sim_id  )
+{
+
+	  kal_sleep_task(KAL_TICKS_100_MSEC * 5);
+
+	  l4c_cc_exe_chld_req(src_id, CSMCC_REL_ALL, l4c_cntxt_g->mo_call_id );
+
+	  return;
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *	  rmmi_cust_invoke_ecc_call_setup
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ *****************************************************************************/
+static void rmmi_cust_invoke_ecc_call_setup ( l4c_source_id_enum src_id, kal_uint8 sim_id )
+{
+	l4c_number_struct call_num;
+
+	call_num.type = 0xA1;
+	   call_num.length = kal_sprintf ( (char*)&call_num.number[0], "112" );
+
+	   l4c_cc_exe_call_setup_req(src_id, call_num, 0, CSMCC_VOICE_CALL, CLIR_AUTO, KAL_FALSE, ALS_DIAL_BY_SETTING, INFO_ECC_CALL);
+	   l4c_cc_exe_call_setup_req(src_id, call_num, 0, CSMCC_VOICE_CALL, CLIR_AUTO, KAL_FALSE, ALS_DIAL_BY_SETTING, INFO_ECC_CALL);
+
+	return;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *	  rmmi_is_rac_activated
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *
+ *****************************************************************************/
+static kal_bool rmmi_is_rac_activated()
+{
+	kal_uint8 sim_id;
+
+	for( sim_id = 0; sim_id < L4_MAX_SIM_NUM; sim_id ++ )
+	{
+		if ( RMMI_IS_RAC_ACTIVATED( sim_id ) == KAL_TRUE )
+		{
+			return KAL_TRUE;
+		}
+	}
+	return KAL_FALSE;
+}
+
+/* AT%FLIGHT */
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_flight_hdlr
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  source_string_ptr       [IN]        At cmd string
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_flight_hdlr(rmmi_string_struct *source_string_ptr)
+{
+    kal_uint8    *rspstr_ptr = NULL;        /* response string and initialization */
+    kal_uint16 rspstr_len = 0;           /* string length variable */
+    kal_bool            ret_val                     = KAL_FALSE;
+
+#ifdef __GEMINI__
+#define RF_ON 3
+#define RF_OFF 0
+#else
+#define RF_ON 1
+#define RF_OFF 4
+#endif
+
+    kal_mem_set(rmmi_rsp_buf,0,sizeof(rmmi_rsp_buf));
+    rspstr_ptr = &rmmi_rsp_buf[0];
+
+    if ( source_string_ptr == NULL )
+    {
+        rmmi_custom_dbg_trace("source_string_ptr is NULL!!!");
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+    }
+    else
+    {
+        switch (source_string_ptr->cmd_mode)
+        {
+            case RMMI_ACTIVE_MODE:  /* AT%FLIGHT */
+            case RMMI_READ_MODE:    /* AT%FLIGHT? */
+            case RMMI_TEST_MODE:    /* AT%FLIGHT=? */
+            {
+          #if defined(__GEMINI__)
+                if (L4C_ROOT_PTR->efun_state != SIM_RADIO_OFF)
+          #else
+                if (L4C_PTR->cfun_state == 1 )
+          #endif
+                {
+                    rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "0", RMMI_PTR->arg_list, 0);
+                }
+                else
+                {
+                    rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "1", RMMI_PTR->arg_list, 0);
+                }
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+                break;
+            }
+            case RMMI_SET_OR_EXECUTE_MODE: /* AT%FLIGHT=X */
+            {
+                kal_uint8 error_cause;
+                kal_uint8 flight_state;
+                kal_uint8 fun_state;
+
+                /* parse <flight> */
+                flight_state = (kal_uint8)rmmi_int_validator_range_check(&error_cause, source_string_ptr, RMMI_PTR->s_reg.s3, 0xFF);
+                if (error_cause != RMMI_PARSE_OK)
+                {
+                    RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+                    break;
+                }
+
+                if(flight_state == 1)
+                {
+                    fun_state = RF_OFF;
+              #if defined(__GEMINI__)
+                    if (L4C_ROOT_PTR->efun_state == SIM_RADIO_OFF)
+              #else
+                    if (L4C_PTR->cfun_state == 4 )
+              #endif
+                    {
+                        rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "[1] FLIGHT Mode ON", RMMI_PTR->arg_list, 0);
+                        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+                        break;
+                    }
+                }
+                else if (flight_state == 0)
+                {
+                    fun_state = RF_ON;
+                    #ifdef __GEMINI__
+                    if (L4C_ROOT_PTR->efun_state == (SIM1_RADIO_ON |SIM2_RADIO_ON))
+              #else
+                    if (L4C_PTR->cfun_state == 1 )
+              #endif
+                    {
+                        rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "[0] FLIGHT Mode OFF", RMMI_PTR->arg_list, 0);
+                        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+                        break;
+                    }
+                }
+                else
+                {
+                    RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+                    break;
+                }
+
+            #if defined(__GEMINI__)
+                ret_val = l4c_nw_efun_state_req(source_string_ptr->src_id, fun_state,RFOFF_CAUSE_UNSPECIFIED);
+            #else
+                ret_val = l4c_nw_cfun_state_req(source_string_ptr->src_id, fun_state);
+            #endif
+                if (ret_val == KAL_TRUE)
+                {
+                    L4C_COMM_PTR->cust_flight_mode = KAL_TRUE;
+                    RMMI_PTR->cust_cmd_src_id = source_string_ptr->src_id;
+                    return;
+                }
+                RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+                break;
+            }
+
+            default:
+            RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_ERROR );
+            break;
+        }
+    }
+    rmmi_cust_final_rsp_generator(source_string_ptr->src_id, (kal_uint8*) rspstr_ptr, rspstr_len );
+
+    return;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_custom_bndi_read_rrsp
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  result      [IN]
+ *  length      [IN]
+ *  data        [?]
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void rmmi_custom_flight_rrsp(kal_uint8 src_id)
+{
+    kal_uint8    *rspstr_ptr = NULL;        /* response string and initialization */
+    kal_uint16 rspstr_len = 0;           /* string length variable */
+
+    kal_mem_set(rmmi_rsp_buf,0,sizeof(rmmi_rsp_buf));
+    rspstr_ptr = &rmmi_rsp_buf[0];
+
+    L4C_COMM_PTR->cust_flight_mode = KAL_FALSE;
+    RMMI_PTR->current_src = RMMI_PTR->cust_cmd_src_id;
+
+#ifdef __GEMINI__
+    if (L4C_ROOT_PTR->efun_state == SIM_RADIO_OFF) //at_flight_patch
+#else
+    if (L4C_PTR->cfun_state==4)
+#endif
+    {
+        rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "[1] FLIGHT Mode ON", RMMI_PTR->arg_list, 0);
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+    }
+    else
+    {
+        rspstr_len = rmmi_fast_string_print_custom(rspstr_ptr, (kal_uint8*) "[0] FLIGHT Mode OFF", RMMI_PTR->arg_list, 0);
+        RMMI_CUST_SET_RSP_TYPE( RMMI_CUST_RSP_WITH_OK );
+    }
+    rmmi_cust_final_rsp_generator(RMMI_PTR->current_src, (kal_uint8*) rspstr_ptr, rspstr_len );
+}
+
+/*** END of rrsp functions *****/
+
+
+/****************************************/
+/* End of Custom AT command                             */
+/****************************************/
+RMMI_CUSTOM_CMD_FUNCTION const rmmi_custom_validator_ft[RMMI_MAX_CUSTOM_CMD_NUM] =
+{
+ #define CUSTOM_CMD(AT_NAME, HASH1, HASH2, TEST_STRING, ENUM, FUNC) FUNC,
+     #include "at_custom_cmd_tc01.h"
+ #undef CUSTOM_CMD
+};
+
+#endif /* __RMMI_EXTEND_CUSTOM_CMD__ */
+#endif /* __TC01__ */
diff --git a/mcu/custom/protocol/common/atp/include/atp_custom_block_cmd.h b/mcu/custom/protocol/common/atp/include/atp_custom_block_cmd.h
new file mode 100644
index 0000000..8af0fe3
--- /dev/null
+++ b/mcu/custom/protocol/common/atp/include/atp_custom_block_cmd.h
@@ -0,0 +1,81 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * atp_custom_cmd.h
+ *
+ * Description:
+ * ------------
+ *   This file is intends for ....
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+/********************************************************************************
+*  Copyright Statement:
+*  --------------------
+*
+*  This product has been developed using a protocol stack
+*  developed by Sasken Communication Technologies Limited.
+*
+********************************************************************************/
+
+/* Please add BLOCK_CMD() in uppercase and remove AT prefix */
+/* If the number of commands increases beyond 256, please request MTK to increase the size*/
+/* Command added in the table below, will be blocked only when LDU is enabled. */
+/* Sample command below*/
+BLOCK_CMD("D")
+BLOCK_CMD("A")
+BLOCK_CMD("+EFUN")
+BLOCK_CMD("+CFUN")
+BLOCK_CMD("+COPS")
+BLOCK_CMD("+CMGS")
+BLOCK_CMD("+CPIN")
+
diff --git a/mcu/custom/protocol/common/atp/include/atp_custom_block_standard_cmd.h b/mcu/custom/protocol/common/atp/include/atp_custom_block_standard_cmd.h
new file mode 100644
index 0000000..c851cbe
--- /dev/null
+++ b/mcu/custom/protocol/common/atp/include/atp_custom_block_standard_cmd.h
@@ -0,0 +1,263 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * atp_custom_block_standard_cmd.h
+ *
+ * Description:
+ * ------------
+ *   This file is intended for listing the 3GPP/3GPP2 AT commands which needs to be blocked based on OEM API oem_get_3gpp_command_block_status() status.
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+/********************************************************************************
+*  Copyright Statement:
+*  --------------------
+*
+*  This product has been developed using a protocol stack
+*  developed by Sasken Communication Technologies Limited.
+*
+********************************************************************************/
+
+/* Please add BLOCK_CMD() in uppercase and remove AT prefix */
+/* If the number of commands increases beyond 256, please request MTK to increase the size*/
+/* Command added in the table below, will be blocked only when oem_get_3gpp_command_block_status() returns TRUE */
+
+/* 3GPP command list dispatched to C2K */
+BLOCK_CMD("+VTD")
+BLOCK_CMD("+VTS")
+BLOCK_CMD("+GSN")
+
+/* 3GPP2 command list */
+BLOCK_CMD("+CDV")
+BLOCK_CMD("+CHV")
+BLOCK_CMD("+CRM")
+BLOCK_CMD("+CTA")
+
+/* 3GPP command list */
+BLOCK_CMD("D")
+BLOCK_CMD("+CFUN")
+BLOCK_CMD("+CPIN")
+BLOCK_CMD("+COPS")
+BLOCK_CMD("+CSQ")
+BLOCK_CMD("+CESQ")
+BLOCK_CMD("+CREG")
+BLOCK_CMD("+CGATT")
+BLOCK_CMD("+CGREG")
+BLOCK_CMD("+CGCLASS")
+BLOCK_CMD("+COPN")
+BLOCK_CMD("+CTZR")
+BLOCK_CMD("+WS46")
+BLOCK_CMD("+CVDP")
+BLOCK_CMD("+CAVIMS")
+BLOCK_CMD("+CASIMS")
+BLOCK_CMD("+CEUS")
+BLOCK_CMD("+CEVDP")
+BLOCK_CMD("+CEMODE")
+BLOCK_CMD("+CEREG")
+BLOCK_CMD("+CSRA")
+BLOCK_CMD("+CIREG")
+BLOCK_CMD("+CIREP")
+BLOCK_CMD("+CNEM")
+BLOCK_CMD("+CSCM")
+BLOCK_CMD("+CSSAC")
+BLOCK_CMD("+CMMIVT")
+BLOCK_CMD("+CISRVCC")
+BLOCK_CMD("+CEPPI")
+BLOCK_CMD("+CSCON")
+BLOCK_CMD("+CSCS")
+BLOCK_CMD("+CMEE")
+BLOCK_CMD("+CIND")
+BLOCK_CMD("+CEER")
+BLOCK_CMD("+GCAP")
+BLOCK_CMD("+CMUX")
+BLOCK_CMD("+CLAC")
+BLOCK_CMD("+CGMR")
+BLOCK_CMD("+CMER")
+BLOCK_CMD("+IFC")
+BLOCK_CMD("+IPR")
+BLOCK_CMD("+CALA")
+BLOCK_CMD("+CALD")
+BLOCK_CMD("+CCLK")
+BLOCK_CMD("+CGMM")
+BLOCK_CMD("+CMEC")
+BLOCK_CMD("+CLAN")
+BLOCK_CMD("+CLAE")
+BLOCK_CMD("+VGR")
+BLOCK_CMD("+VGT")
+BLOCK_CMD("+CBC")
+BLOCK_CMD("+CLVL")
+BLOCK_CMD("+CMUT")
+BLOCK_CMD("+CRSL")
+BLOCK_CMD("+CGMI")
+BLOCK_CMD("+CGSN")
+
+/* SMS commands */
+BLOCK_CMD("+CSMS")
+BLOCK_CMD("+CPMS")
+BLOCK_CMD("+CMGF")
+BLOCK_CMD("+CSCA")
+BLOCK_CMD("+CSMP")
+BLOCK_CMD("+CSDH")
+BLOCK_CMD("+CSCB")
+BLOCK_CMD("+CSAS")
+BLOCK_CMD("+CRES")
+BLOCK_CMD("+CNMI")
+BLOCK_CMD("+CMGL")
+BLOCK_CMD("+CMGR")
+BLOCK_CMD("+CNMA")
+BLOCK_CMD("+CMGS")
+BLOCK_CMD("+CMSS")
+BLOCK_CMD("+CMGW")
+BLOCK_CMD("+CMGD")
+BLOCK_CMD("+CMGC")
+BLOCK_CMD("+CMMS")
+BLOCK_CMD("+CPNER")
+BLOCK_CMD("+CGSMS")
+
+/* Mobile termination control and status commands */
+BLOCK_CMD("+CGPIAF")
+
+/* Packet domain commands */ 
+BLOCK_CMD("+CGDCONT")
+BLOCK_CMD("+CGDSCONT")
+BLOCK_CMD("+CGTFT")
+BLOCK_CMD("+CGQREQ")
+BLOCK_CMD("+CGQMIN")
+BLOCK_CMD("+CGEQREQ")
+BLOCK_CMD("+CGEQMIN")
+BLOCK_CMD("+CGEQNEG")
+BLOCK_CMD("+CGACT")
+BLOCK_CMD("+CGCMOD")
+BLOCK_CMD("+CGPADDR")
+BLOCK_CMD("+CGAUTO")
+BLOCK_CMD("+CGANS")
+BLOCK_CMD("+CGEREP")
+BLOCK_CMD("+CGSCONTRDP")
+BLOCK_CMD("+CGTFTRDP")
+BLOCK_CMD("+CGEQOS")
+BLOCK_CMD("+CGEQOSRDP")
+BLOCK_CMD("+CGDEL")
+BLOCK_CMD("+CGAUTH")
+
+/*Call control related command*/
+BLOCK_CMD("+CACM")
+BLOCK_CMD("+CAMM")
+BLOCK_CMD("+CLCC")
+BLOCK_CMD("+CHUP")
+BLOCK_CMD("+CHLD")
+BLOCK_CMD("+CECALL")
+BLOCK_CMD("+CAOC")
+BLOCK_CMD("+CCWE")
+BLOCK_CMD("+CCUG")
+BLOCK_CMD("+CPAS")
+BLOCK_CMD("+CVHU")
+BLOCK_CMD("+CTFR")
+BLOCK_CMD("+CRC")
+BLOCK_CMD("+CR")
+BLOCK_CMD("+CSTA")
+
+/*PHB related command*/
+BLOCK_CMD("+CNUM")
+BLOCK_CMD("+CPBS")
+BLOCK_CMD("+CPBR")
+BLOCK_CMD("+CPBW")
+BLOCK_CMD("+CPBF")
+BLOCK_CMD("+CEN")
+
+/*SIM related command*/
+BLOCK_CMD("+CIMI")
+BLOCK_CMD("+CPIN")
+BLOCK_CMD("+CPUC")
+BLOCK_CMD("+CPOL")
+BLOCK_CMD("+CPLS")
+BLOCK_CMD("+CRSM")
+BLOCK_CMD("+CSIM")
+BLOCK_CMD("+CGLA")
+BLOCK_CMD("+CRLA")
+BLOCK_CMD("+CCHO")
+BLOCK_CMD("+CCHC")
+BLOCK_CMD("+CUAD")
+BLOCK_CMD("+CUSATE")
+BLOCK_CMD("+CUSATR")
+BLOCK_CMD("+CUSATW")
+BLOCK_CMD("+CUSATD")
+BLOCK_CMD("+CUSATA")
+BLOCK_CMD("+CSUS")
+
+/* SS commands */
+BLOCK_CMD("+CCWA")
+BLOCK_CMD("+CLIP")
+BLOCK_CMD("+CAEMLPP")
+BLOCK_CMD("+CDIP")
+BLOCK_CMD("+CLCK")
+BLOCK_CMD("+CLIR")
+BLOCK_CMD("+COLP")
+BLOCK_CMD("+CNAP")
+BLOCK_CMD("+CPWD")
+BLOCK_CMD("+CSSN")
+BLOCK_CMD("+CUSD")
+BLOCK_CMD("+COLR")
+
+/* CC commands */
+BLOCK_CMD("A")
+BLOCK_CMD("S")
+BLOCK_CMD("V")
+BLOCK_CMD("H")
+BLOCK_CMD("O")
+BLOCK_CMD("Q")
+BLOCK_CMD("I")
+BLOCK_CMD("L")
+BLOCK_CMD("M")
+BLOCK_CMD("T")
+BLOCK_CMD("Z")
+BLOCK_CMD("X")
+
+/* DATA commands */
+BLOCK_CMD("+CBST")
+
diff --git a/mcu/custom/protocol/common/atp/include/atp_custom_factm_cmd.h b/mcu/custom/protocol/common/atp/include/atp_custom_factm_cmd.h
new file mode 100644
index 0000000..fefeda6
--- /dev/null
+++ b/mcu/custom/protocol/common/atp/include/atp_custom_factm_cmd.h
@@ -0,0 +1,96 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * atp_custom_factm_cmd.h
+ *
+ * Description:
+ * ------------
+ *   This file is intends for ....
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+/********************************************************************************
+*  Copyright Statement:
+*  --------------------
+*
+*  This product has been developed using a protocol stack
+*  developed by Sasken Communication Technologies Limited.
+*
+********************************************************************************/
+
+/* Please add FACTM_CMD() in uppercase and remove AT prefix */
+FACTM_CMD("+ESLBLOBF")
+FACTM_CMD("+ESMLRSUF")
+FACTM_CMD("+ESIMTEST")
+FACTM_CMD("+ECSMLCK")
+
diff --git a/mcu/custom/protocol/common/atp/src/atp_custom_block_cmd.c b/mcu/custom/protocol/common/atp/src/atp_custom_block_cmd.c
new file mode 100644
index 0000000..4cbd023
--- /dev/null
+++ b/mcu/custom/protocol/common/atp/src/atp_custom_block_cmd.c
@@ -0,0 +1,125 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * atp_custom_cmd.c
+ *
+ * Description:
+ * ------------
+ *   This file is intends for ....
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "kal_general_types.h"
+#include "kal_trace.h"
+#include "ps_public_struct.h"
+#include "kal_public_defs.h"
+#include "kal_public_api.h"
+
+const atp_block_at_cmd_table_item atp_block_at_cmd_table[] = {
+#define BLOCK_CMD(CMD_STR) {CMD_STR},
+    #include "atp_custom_block_cmd.h"
+#undef BLOCK_CMD
+};
+
+const atp_block_at_cmd_table_item atp_block_standard_at_cmd_table[] = {
+#define BLOCK_CMD(CMD_STR) {CMD_STR},
+    #include "atp_custom_block_standard_cmd.h"
+#undef BLOCK_CMD
+};
+
+const atp_block_at_cmd_table_item* atp_get_block_at_cmd_table(atp_at_cmd_block_enum cause)
+{
+    if (ATP_AT_CMD_BLOCK_STANDARD == cause)
+    {
+        return atp_block_standard_at_cmd_table;
+    }
+    else if (ATP_AT_CMD_BLOCK_FOR_LDU == cause)
+    {
+        return atp_block_at_cmd_table;
+    }
+    else
+    {
+        /* invalid cause */
+        ASSERT(0);
+    }
+
+    return NULL;
+}
+
+kal_uint16 atp_get_block_at_cmd_table_size(atp_at_cmd_block_enum cause)
+{
+    if (ATP_AT_CMD_BLOCK_STANDARD == cause)
+    {
+        return (sizeof(atp_block_standard_at_cmd_table)/ sizeof(atp_block_at_cmd_table_item));
+    }
+    else if (ATP_AT_CMD_BLOCK_FOR_LDU == cause)
+    {
+        return (sizeof(atp_block_at_cmd_table)/ sizeof(atp_block_at_cmd_table_item));
+    }
+    else
+    {
+        /* invalid cause */
+        DEBUG_ASSERT(0);
+    }
+
+    return 0;
+}
+
diff --git a/mcu/custom/protocol/common/atp/src/atp_custom_factm_cmd.c b/mcu/custom/protocol/common/atp/src/atp_custom_factm_cmd.c
new file mode 100644
index 0000000..d9168f7
--- /dev/null
+++ b/mcu/custom/protocol/common/atp/src/atp_custom_factm_cmd.c
@@ -0,0 +1,82 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * atp_custom_factm_cmd.c
+ *
+ * Description:
+ * ------------
+ *   This file is intends for ....
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "kal_general_types.h"
+#include "kal_trace.h"
+#include "ps_public_struct.h"
+
+const atp_factory_at_cmd_table_item atp_factory_at_cmd_table[] = {
+#ifdef __ENGFACT_MODE__
+#define FACTM_CMD(CMD_STR) {CMD_STR},
+    #include "atp_custom_factm_cmd.h"
+#undef FACTM_CMD
+#endif
+    {"ffffffff"},
+};
+
+const atp_factory_at_cmd_table_item* atp_get_factory_at_cmd_table(void)
+{
+    return atp_factory_at_cmd_table;
+}
+ 
+kal_uint8 atp_get_factory_at_cmd_table_size(void)
+{
+    return (sizeof(atp_factory_at_cmd_table)/ sizeof(atp_factory_at_cmd_table_item));
+}
+
diff --git a/mcu/custom/protocol/common/ps/custom_atcmd_parse.c b/mcu/custom/protocol/common/ps/custom_atcmd_parse.c
new file mode 100644
index 0000000..e7b5646
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_atcmd_parse.c
@@ -0,0 +1,5270 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ * Filename:
+ * ---------
+ * custom_atcmd_parse.c
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *   This file is for parsing general proprietary AT command.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ ****************************************************************************/
+
+#define RMMI_PARSER_C
+
+/* The custom_atcmd_parse.c is no need for L1-only build, so disable building it to avoid mcd_xxx.h including error for L1-only build. */
+/* Please do NOT add L1 related features here!!! */
+
+#ifndef L4_NOT_PRESENT
+
+#include "kal_general_types.h"
+#ifdef __BTMTK__
+#include "bluetooth_msgid.h"
+#endif
+#ifdef __GPS_SUPPORT__
+#include "gps_msgid.h"
+#endif
+#include "tst_sap.h"
+#ifdef __FM_AT_SUPPORT__
+#include "mmiapi_msgid.h"
+#endif
+
+
+#include <stdio.h>
+#include <string.h>
+
+
+#include "kal_public_defs.h" //MSBB change #include "stack_msgs.h"
+
+#include "stacklib.h"        	/* Basic type for dll, evshed, stacktimer */
+#include "kal_public_api.h"
+#include "nvram_editor_data_item.h"
+#include "nvram_interface.h"
+
+#include "ims_nvram_def.h"
+#include "ims_nvram_editor.h"
+
+#include "l4_nvram_def.h"
+
+//#include "custom_nvram_editor_data_item.h"
+#include "dcl.h"
+#include "dcm_sw.h"
+#if defined(__MTK_TARGET__) 
+extern kal_uint32 PLL_FrequencyMeter_GetFreq(kal_uint32 index);
+#include "kal_debug.h"
+#endif
+
+#include "uart_sw.h"
+#include "tst_msgid.h"
+#ifdef __CDMA2000_RAT__
+#include "hsc_msgid.h"
+#endif
+#ifdef __BTMTK__
+#include "Bluetooth_struct.h"
+extern void rmmi_send_msg_to_bt (msg_type msg_name, void *param_ptr);
+#endif
+
+#ifndef __L1_STANDALONE__
+extern kal_bool tst_process_pc_command_from_ATCmd(kal_int32 len, kal_uint8 *param);
+#endif
+
+#if defined(__GPS_SUPPORT__)
+#include "gps_struct.h"
+#endif /* __GPS_SUPPORT__ */
+
+#ifdef __FM_AT_SUPPORT__
+#include "FMATCommand.h"
+#endif
+
+
+#ifdef __MOD_SMU__
+#include "ps2sim_struct.h"
+#include "ps2sat_struct.h"
+#include "sim_common_enums.h"
+#include "smu_common_enums.h"
+#endif /* __MOD_SMU__ */ 
+
+#include "gmss_public.h"
+
+#ifdef __AGPS_SUPPORT__
+//#include "ipc_msgsvc_msgid.h"
+//#include "ipc_msgsvc.h"
+//#include "l4c_aux_struct.h"
+#include "md_mmi_sap.h"
+#include "agps_md_interface.h"
+#endif
+
+extern module_type l4c_current_mod_id;
+
+//extern rmmi_context_struct *rmmi_ptr_g;
+
+
+#include "rmmi_struct.h"
+//#include "rmmi_common_enum.h"
+#include "rmmi_context.h"
+#include "ps_public_l4_msgid.h"
+
+#include "DVFS_drv_public.h"
+#include "DVFS_drv_md_public.h"
+#include "DVFS_drv_modem_public.h"
+
+#if defined(__MTK_TARGET__)
+#include "sleepdrv_interface.h"
+#endif
+
+#if defined(__MTK_TARGET__) && defined(__MD97__)
+extern kal_bool serdes_test(kal_uint32 data_len, kal_uint8 *data_str);
+#include "scc.h"
+#endif
+
+#if defined(__MD97__) && defined(__MTK_TARGET__) && defined(MT6297)  //for apollo dram index
+#include "RM_public.h"
+#if defined(__HIF_CCCI_SUPPORT__)
+#include "nccci_if.h"
+#endif
+#endif
+
+#if defined(__MTK_TARGET__) 
+#include "ptp_public.h"
+#endif
+
+#if defined(__FORCE_EMI_LATENCY_ENABLE__) || defined(__BW_RUNTIME_PF__)
+#include "spv_api.h"
+#endif
+
+#if defined(__MTK_TARGET__)
+#if defined(__USIP_DYNAMIC_PMU_ENABLE__)
+#include "cuif_l1core_public.h"
+#include "dsp_header_define_cuif_inner_brp.h"
+#include "dsp_header_define_cuif_fec_wbrp.h"
+#include "dsp_header_define_cuif_speech.h"
+#endif	
+#endif	
+
+#if defined(__MTK_TARGET__)
+extern kal_bool Set_EMI_ELM_ExceptionType(kal_uint8 exception_type);
+extern kal_bool Set_EMI_ELM_Threshold(kal_uint8 info, kal_uint32 threshold);
+extern kal_bool Set_EMI_ELM_Config(kal_uint8 id, kal_uint8 m_sel, kal_uint8 rw);
+extern kal_bool Set_EMI_ELM_Mode(kal_uint8 mode);
+extern kal_bool Set_EMI_ELM_VPE(kal_uint8 id, kal_uint8 vpe_sel);
+extern kal_bool Set_EMI_ELM_uSIP_Core(kal_uint8 id, kal_uint8 vpe_sel, kal_uint8 port_sel);
+
+#endif
+
+#if defined(__MTK_TARGET__)
+#if defined(__MD95__)
+extern kal_bool drv_sfu_AT_Config(kal_uint8 *data_str);
+#endif
+#endif
+
+#if defined(__MTK_TARGET__)
+# if defined(__MIPS_IA__)
+# define __MIPS_IA_PMU_AUTO_INC_L2_PMU__
+# include "mcu_pmu_montr.h"
+# elif defined(__MIPS_I7200__)
+#  include "mdmcu_pmu.h"
+# endif
+# include "system_profiler_public.h"
+#endif	
+
+#ifdef __AGPS_CONTROL_PLANE__
+extern kal_uint8 l4c_get_csmss_g_ss_id(void);
+#endif
+
+#include "rmmi_utility.h"
+
+#ifndef L4_NOT_PRESENT
+extern kal_bool l4c_drx_setting_req_hdlr(kal_uint8* data);
+#endif
+/* mtk01616_080104: 
+  * This is used to define default <time> and <pause> value for AT+CKPD.
+  * <time> * 0.1 sec is the time to stroke each key
+  * <pause> * 0.1 sec  is the length between two strokes.  
+  * <time> or <pause> should not larger than 255 (25.5 sec)
+  * Default value is manufacturer specific,but should be so long that a normal MT can handle keystrokes correctly
+  * Please refer to spec 07.07 section 8.7 for more detailed information
+  */
+#define CUSTOM_AT_CKPD_DEFAULT_TIME 2
+#define CUSTOM_AT_CKPD_DEFAULT_PAUSE 4 
+
+//Define AT command URC "RING" interval , the unit is 0.1 sec , default value is 4 sec = 40 x 0.1 sec
+#define CUSTOM_URC_RING_INTERVAL 40
+
+#ifdef __TC01__
+/* MT call indication is delayed since the first Ring is not handled in AP's RIL */
+/* 2nd Ring will be shorter than the sheduled interval. */
+#define CUSTOM_URC_1ST_SCHED_RING_INTERVAL 5
+kal_uint16 custom_ring_interval[2] = {CUSTOM_URC_1ST_SCHED_RING_INTERVAL, CUSTOM_URC_RING_INTERVAL};
+kal_bool is_1st_shed_ring = KAL_FALSE;
+#endif
+
+extern UART_PORT PS_UART_PORT;
+
+#ifdef __UMTS_RAT__
+#define CUSTOM_MAX_MOD_NAME (8)
+#define MAX_MODULE_MAP_SIZE (sizeof(mod_map)/sizeof(mod_map[0]))
+
+typedef struct {
+kal_char ModuleName[CUSTOM_MAX_MOD_NAME];
+kal_uint32 ModuleEnum;
+kal_uint32 ModuleEnum_1;
+kal_uint8  SimIndex; // 0~3 for SIM1~SIM4
+} module_name_enum_map_struct;
+#endif
+
+#if defined(__SEC_TEST__)
+extern void chl_test_main();
+#endif
+
+#ifdef __CTP_GOODIX_GT818_TRUE_MULTIPLE__
+#include "fs_type.h"
+#include "fs_func.h"
+#include "kal_public_api.h"
+
+static kal_bool process_gt818_ctp_cmd( kal_uint8 action, kal_uint32 data_len, kal_uint8 *data_str )
+{
+    kal_uint16 ret_len = 0;
+    kal_uint16 i;
+    kal_uint16 inlen;
+    kal_uint16 offset;
+    STS_CTRL_COMMAND_T cmd;
+    DCL_HANDLE handle;
+    kal_uint8 *ctp_buffer = NULL;
+    kal_uint8 *result = NULL;
+    
+    ctp_buffer = (kal_uint8 *)get_ctrl_buffer( 1024 );
+    
+    if ( ctp_buffer == NULL )
+        EXT_ASSERT(0, (int)ctp_buffer, 0, 0);
+        
+    cmd.u4Command = action;
+    cmd.pVoid1 = (void *)data_str;
+    cmd.pVoid2 = (void *)&result;
+    
+    handle = DclSTS_Open( DCL_TS, 0 );
+    DclSTS_Control( handle, STS_CMD_COMMAND, (DCL_CTRL_DATA_T *)&cmd );   
+    DclSTS_Close(handle);     
+    
+    if ( action == DCL_CTP_COMMAND_GET_VERSION )
+        ret_len = 6;
+        
+    if ( action == DCL_CTP_COMMAND_GET_CONFIG )
+        ret_len = 106;
+            
+    if ( action == DCL_CTP_COMMAND_GET_DIFF_DATA )
+        ret_len = 162;      
+
+    if ( action == DCL_CTP_COMMAND_GET_FW_BUFFER )
+    {
+        offset = data_str[0]*256 + data_str[1];
+        inlen = data_str[2];
+        memcpy( &result[offset], &data_str[3], inlen);
+        
+        if ( inlen != 128 )
+        {
+            #define GT818_FW_STRING  "ctp_firmware_rusklmeoxkwjadfjnklruo3"
+            kal_int16   drv_letter;
+            FS_HANDLE fs_handle;
+            UINT writen;
+            kal_wchar   CTP_FIRMWARE_PATH[64];
+                    
+            drv_letter = FS_GetDrive(FS_DRIVE_V_NORMAL, 2, FS_DRIVE_I_SYSTEM | FS_DRIVE_V_NORMAL);
+            kal_wsprintf( CTP_FIRMWARE_PATH, "%c:\\%s", drv_letter, GT818_FW_STRING );    
+            fs_handle = FS_Open( CTP_FIRMWARE_PATH, FS_CREATE_ALWAYS | FS_READ_WRITE );
+            FS_Write(fs_handle, (kal_uint8 *) result , offset+inlen, &writen);
+            FS_Close( fs_handle );
+        }            
+    }
+    
+    kal_sprintf( (kal_char *)ctp_buffer, "+EGCMD: " );
+            
+    for ( i = 0 ; i < ret_len ; i++ )
+        kal_sprintf( (kal_char *)&ctp_buffer[strlen((char *)(ctp_buffer))], "%02X", result[i] );            
+        
+    rmmi_write_unsolicitedResultCode( ctp_buffer, strlen((kal_char *)(ctp_buffer)), KAL_TRUE, 1, NULL );    
+    
+    free_ctrl_buffer( ctp_buffer );
+    
+    return KAL_TRUE;
+}
+#endif
+
+kal_bool custom_send_sm_stress_inject_msg( kal_char *cmd_str, module_type dst_mod )
+{
+#if defined(__MTK_TARGET__) && defined(MTK_SLEEP_ENABLE)
+    tst_module_string_inject_struct *tst_inject;
+    tst_inject = (tst_module_string_inject_struct *)
+                construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+    strncpy((kal_char*)tst_inject->string, cmd_str, strlen(cmd_str));
+    msg_send5(MOD_L4C, dst_mod, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+    
+    return KAL_TRUE;
+#else
+    return KAL_FALSE;
+#endif
+}
+
+#ifdef __CDMA2000_RAT__
+kal_bool custom_send_c2k_sleep_ctrl_msg(kal_char *cmd_str)
+{
+#if defined(__MTK_TARGET__) && defined(MTK_SLEEP_ENABLE)
+    tst_module_string_inject_struct *sleep_ctrl;
+    sleep_ctrl = construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+    strncpy((kal_char*)sleep_ctrl->string, cmd_str, strlen(cmd_str));
+    msg_send5(MOD_L4C, MOD_CHSC, 0, MSG_ID_C2K_SLEEP_CTRL_MSG, (local_para_struct*)sleep_ctrl);
+    
+    return KAL_TRUE;
+#else
+    return KAL_FALSE;
+#endif
+}
+#endif
+
+
+#ifdef __UMTS_TDD128_MODE__
+static const module_name_enum_map_struct mod_map[] = 
+    {                        
+            {"0MDDBG", MOD_MDDBG0, MOD_MDDBG0, 0},//0                    
+            {"MEME", MOD_MEME_FDD, MOD_MEME_TDD, 0},//0                    
+            {"CSE", MOD_CSE_FDD, MOD_CSE_TDD, 0},
+            {"CSCE", MOD_CSCE_FDD, MOD_CSCE_TDD, 0},
+            {"SIBE", MOD_SIBE_FDD, MOD_SIBE_TDD, 0}, 
+            {"USIME", MOD_USIME_FDD, MOD_USIME_TDD, 0},
+            {"RRCE", MOD_RRCE_FDD, MOD_RRCE_TDD, 0},//5
+            {"SLCE", MOD_SLCE_FDD, MOD_SLCE_TDD, 0},
+            {"ADR", MOD_ADR_FDD, MOD_ADR_TDD, 0},
+            {"URR", MOD_URR_FDD, MOD_URR_TDD, 0}, 
+            {"URLC", MOD_URLC_FDD, MOD_URLC_TDD, 0},
+            {"UMAC", MOD_UMAC_FDD, MOD_UMAC_TDD, 0},//10
+            {"UL2", MOD_UL2_FDD, MOD_UL2_TDD, 0},                    
+            {"MM", MOD_MM, MOD_MM, 0},
+            {"CC", MOD_CC, MOD_CC, 0}, 
+            {"CISS", MOD_CISS, MOD_CISS, 0},
+            {"SMS", MOD_SMS, MOD_SMS, 0},//15
+            {"SIM", MOD_SIM, MOD_SIM, 0},
+            {"L4C", MOD_L4C, MOD_L4C, 0},
+            #if defined(__GEMINI__) || defined(__MMDS_DC__)
+            {"L4C2", MOD_L4C_2, MOD_L4C_2, 1},
+            #else
+            {"L4C2", MOD_L4C, MOD_L4C, 0},
+            #endif
+            {"TCM", MOD_TCM, MOD_TCM, 0}, 
+            {"SMSAL", MOD_SMSAL, MOD_SMSAL, 0},//20
+            {"UEM", MOD_UEM, MOD_UEM, 0},
+            {"RAC", MOD_RAC, MOD_RAC, 0},
+            {"SMU", MOD_SMU, MOD_SMU, 0},
+            {"USAT", MOD_USAT, MOD_USAT, 0}, 
+            {"CSM", MOD_CSM, MOD_CSM, 0},//25
+            {"ENG", MOD_ENG, MOD_ENG, 0},
+            {"PHB", MOD_PHB, MOD_PHB, 0},
+            {"RRM", MOD_RRM_FDD, MOD_RRM_TDD, 0},
+            {"RLC", MOD_RLC_FDD, MOD_RLC_TDD, 0}, 
+            {"MAC", MOD_MAC_FDD, MOD_MAC_TDD, 0},//30
+            {"LAPDM", MOD_LAPDM_FDD, MOD_LAPDM_TDD, 0}, 
+            {"MPAL", MOD_MPAL_FDD, MOD_MPAL_TDD, 0},
+            {"SNDCP", MOD_SNDCP, MOD_SNDCP, 0},
+            {"SM", MOD_SM, MOD_SM, 0}, 
+            {"LLC", MOD_LLC, MOD_LLC, 0},//35
+            {"MBMSAL", MOD_MBMSAL, MOD_MBMSAL, 0}, 
+            {"GMSS", MOD_GMSS,MOD_GMSS, 0}, 
+            {"NWSEL", MOD_NWSEL,MOD_NWSEL, 0},
+            {"ERRC", MOD_ERRC,MOD_ERRC, 0},
+            {"EMM", MOD_EMM, MOD_EMM, 0},
+            {"SDM", MOD_SDM, MOD_SDM, 0},
+            {"ESM", MOD_ESM, MOD_ESM, 0},
+            {"PAM", MOD_PAM, MOD_PAM, 0},
+            {"UL1", MOD_UL1, MOD_UL1, 0},
+            {"EMAC", MOD_EMAC, MOD_EMAC, 0},
+            {"MRS", MOD_MRS, MOD_MRS, 0},
+            #if defined(__GEMINI_WCDMA__)
+            {"RRCE2", MOD_RRCE_FDD_2, MOD_RRCE_TDD, 1},
+            #else
+            {"RRCE2", MOD_RRCE_FDD, MOD_RRCE_TDD, 0},
+            #endif
+            #if defined(__SPV_SIB_SSPROF_TASK__)
+            {"SSPROF", MOD_SS_PROF, MOD_SS_PROF, 0},
+            #endif
+            #if (CUR_GEN >= MD_GEN97)
+            #ifdef __NR_RAT__
+            {"NRRC", MOD_NRRC, MOD_NRRC, 0},            
+            {"NL1MOB", MOD_NL1_MOB, MOD_NL1_MOB, 0},
+            {"VGMM", MOD_VGMM, MOD_VGMM, 0},
+            {"NL1", MOD_NL1, MOD_NL1, 0},
+            #endif /* __NR_RAT__ */
+            #endif /* (CUR_GEN >= MD_GEN97) */
+            #if defined(__SEC_DRV_TEST__)
+	    {"SEC0", MOD_SECTEST, MOD_SECTEST, 0},
+	    #endif
+            #ifdef __GEMINI__
+            #ifdef __GEMINI_LTE__
+            {"ERRC2", MOD_ERRC_2, MOD_ERRC_2, 0},
+            #endif /*_ _GEMINI_LTE__ */
+            #if (CUR_GEN >= MD_GEN97)
+            #ifdef __NR_RAT__
+            #if (MAX_NR_NUM>=2)
+            {"NRRC2", MOD_NRRC_2, MOD_NRRC_2, 0},
+            {"NL1MOB2", MOD_NL1_MOB_2, MOD_NL1_MOB_2, 0},
+            #endif /* (MAX_NR_NUM>=2) */
+            #endif /* __NR_RAT__ */
+            #endif /* (CUR_GEN >= MD_GEN97) */
+            #endif /* __GEMINI__ */
+        };
+#else  /* __UMTS_TDD128_MODE__ */
+static const module_name_enum_map_struct mod_map[] = 
+    {                        
+            {"0MDDBG", MOD_MDDBG0, MOD_MDDBG0, 0},//0                    
+            {"MEME", MOD_MEME_FDD, MOD_NIL, 0},//0                    
+            {"CSE", MOD_CSE_FDD, MOD_NIL, 0},
+            {"CSCE", MOD_CSCE_FDD, MOD_NIL, 0},
+            {"SIBE", MOD_SIBE_FDD, MOD_NIL, 0}, 
+            {"USIME", MOD_USIME_FDD, MOD_NIL, 0},
+            {"RRCE", MOD_RRCE_FDD, MOD_NIL, 0},//5
+            {"SLCE", MOD_SLCE_FDD, MOD_NIL, 0},
+            {"ADR", MOD_ADR_FDD, MOD_NIL, 0},
+            {"URR", MOD_URR_FDD, MOD_NIL, 0}, 
+            {"URLC", MOD_URLC_FDD, MOD_NIL, 0},
+            {"UMAC", MOD_UMAC_FDD, MOD_NIL, 0},//10
+            {"UL2", MOD_UL2_FDD, MOD_NIL, 0},                    
+            {"MM", MOD_MM, MOD_MM, 0},
+            {"CC", MOD_CC, MOD_CC, 0}, 
+            {"CISS", MOD_CISS, MOD_CISS, 0},
+            {"SMS", MOD_SMS, MOD_SMS, 0},//15
+            {"SIM", MOD_SIM, MOD_SIM, 0},
+            {"L4C", MOD_L4C, MOD_L4C, 0},
+            #if defined(__GEMINI__) || defined(__MMDS_DC__)
+            {"L4C2", MOD_L4C_2, MOD_L4C_2, 1},
+            #else
+            {"L4C2", MOD_L4C, MOD_L4C, 0},
+            #endif
+            {"TCM", MOD_TCM, MOD_TCM, 0}, 
+            {"SMSAL", MOD_SMSAL, MOD_SMSAL, 0},//20
+            {"UEM", MOD_UEM, MOD_UEM, 0},
+            {"RAC", MOD_RAC, MOD_RAC, 0},
+            {"SMU", MOD_SMU, MOD_SMU, 0},
+            {"USAT", MOD_USAT, MOD_USAT, 0}, 
+            {"CSM", MOD_CSM, MOD_CSM, 0},//25
+            {"ENG", MOD_ENG, MOD_ENG, 0},
+            {"PHB", MOD_PHB, MOD_PHB, 0},
+            {"RRM", MOD_RRM_FDD, MOD_NIL, 0},
+            {"RLC", MOD_RLC_FDD, MOD_NIL, 0}, 
+            {"MAC", MOD_MAC_FDD, MOD_NIL, 0},//30
+            {"LAPDM", MOD_LAPDM_FDD, MOD_NIL, 0}, 
+            {"MPAL", MOD_MPAL_FDD, MOD_NIL, 0},
+            {"SNDCP", MOD_SNDCP, MOD_SNDCP, 0},
+            {"SM", MOD_SM, MOD_SM, 0}, 
+            {"LLC", MOD_LLC, MOD_LLC, 0},//35
+            {"MBMSAL", MOD_MBMSAL, MOD_MBMSAL, 0}, 
+            {"GMSS", MOD_GMSS,MOD_GMSS, 0}, 
+            {"NWSEL", MOD_NWSEL,MOD_NWSEL, 0},
+            {"ERRC", MOD_ERRC,MOD_ERRC, 0},
+            {"EMM", MOD_EMM, MOD_EMM, 0},
+            {"SDM", MOD_SDM, MOD_SDM, 0},
+            {"ESM", MOD_ESM, MOD_ESM, 0},
+            {"PAM", MOD_PAM, MOD_PAM, 0},
+            {"UL1", MOD_UL1, MOD_UL1, 0},
+            {"EMAC", MOD_EMAC, MOD_EMAC, 0},
+            {"MRS", MOD_MRS, MOD_MRS, 0},
+            #if defined(__GEMINI_WCDMA__)
+            {"RRCE2", MOD_RRCE_FDD_2, MOD_NIL, 1},
+            #else
+            {"RRCE2", MOD_RRCE_FDD, MOD_NIL, 0},
+            #endif
+            #if defined(__SPV_SIB_SSPROF_TASK__)
+            {"SSPROF", MOD_SS_PROF, MOD_SS_PROF, 0},
+            #endif
+            #if (CUR_GEN >= MD_GEN97)
+            #ifdef __NR_RAT__
+            {"NRRC", MOD_NRRC, MOD_NRRC, 0},
+            {"NL1MOB", MOD_NL1_MOB, MOD_NL1_MOB, 0},
+            {"VGMM", MOD_VGMM, MOD_VGMM, 0},
+            {"NL1", MOD_NL1, MOD_NL1, 0},
+            #endif /* __NR_RAT__ */
+            #endif /* (CUR_GEN >= MD_GEN97) */
+            #if defined(__SEC_DRV_TEST__)
+	    {"SEC0", MOD_SECTEST, MOD_SECTEST, 0},
+	    #endif
+            #ifdef __GEMINI__
+            #ifdef __GEMINI_LTE__
+            {"ERRC2", MOD_ERRC_2, MOD_ERRC_2, 0},
+            #endif /* __GEMINI_LTE__ */
+            #if (CUR_GEN >= MD_GEN97)
+            #ifdef __NR_RAT__
+            #if (MAX_NR_NUM>=2)
+            {"NRRC2", MOD_NRRC_2, MOD_NRRC_2, 0},
+            {"NL1MOB2", MOD_NL1_MOB_2, MOD_NL1_MOB_2, 0},
+            #endif /* (MAX_NR_NUM>=2) */
+            #endif /* __NR_RAT__ */
+            #endif /* (CUR_GEN >= MD_GEN97) */
+            #endif /* __GEMINI__ */
+        };
+#endif  /* __UMTS_TDD128_MODE__ */
+
+#include "ossl_ecies.h"
+#include "mspm_public_api.h"
+
+/*****************************************************************************
+* FUNCTION
+*  	rmmi_get_data_ps_id()
+* DESCRIPTION
+*   	This function will use mspm_is_proc_ongoing API to derive the data sim PS_ID.
+*       please be aware that mspm_sim_index_enum is PS_ID 
+* PARAMETERS
+* RETURNS
+*	kal_int8: PS 0~3 or -1
+*****************************************************************************/
+kal_int8 rmmi_get_data_ps_id(void)
+{
+    mspm_sim_index_enum i=0;
+#ifdef __GEMINI__
+    for(i=0; i<MAX_SIM_NUM; i++)
+    {
+        if(mspm_is_proc_ongoing(i, MSPM_DATA_SIM))
+            break;
+    }
+    //No Data SIM
+    if(i == MAX_SIM_NUM)
+        return -1;
+    else
+        return (kal_int8)i;
+#else
+    return (kal_int8)i;
+#endif
+}
+/*****************************************************************************
+* FUNCTION
+*  	rmmi_general_command_parsing()
+* DESCRIPTION
+*   	This function should parse general proprietary AT command request.
+*     Each owner should maintain and modify the code.
+* PARAMETERS
+*   	kal_uint32 op 
+*	kal_uint32 data_len 
+*	kal_uint8 *data_str
+* RETURNS
+*	KAL_TRUE or KAL_FALSE
+*****************************************************************************/
+kal_bool rmmi_general_command_parsing(kal_uint32 op, 
+												kal_uint32 data_len, 
+												kal_uint8 *data_str)
+{
+	kal_bool ret_val = KAL_FALSE;
+	
+#ifndef L4_NOT_PRESENT
+
+	switch(op)
+	{
+		
+		case 2: /* add by stanley 2006-07-03*/
+		{
+#if  defined(__BTMTK__)
+			bt_test_cmd_req_struct  *param_ptr;
+			param_ptr = (bt_test_cmd_req_struct *)construct_local_para(
+															(kal_uint16)sizeof(bt_test_cmd_req_struct),
+															TD_CTRL);   
+
+			kal_mem_cpy(param_ptr->test_cmd_content, data_str, data_len);
+			rmmi_send_msg_to_bt(MSG_ID_BT_TEST_CMD_REQ, param_ptr);	 
+			ret_val = KAL_TRUE;
+#endif /* __BTMTK__ */
+      break;
+		}
+        
+    case 6:
+    {
+#ifdef __UMTS_RAT__
+        kal_char *pp, *strModuleName, *strTstInject, *tt;
+        kal_uint32 module_enum = 0, input_str_data_len = 0;
+
+        input_str_data_len = strlen((kal_char*)data_str);
+
+
+        if( input_str_data_len > 0 && input_str_data_len < 255)
+        {
+        pp = NULL;
+        strModuleName = (kal_char*) kal_strtok_r((kal_char*)data_str, "_", &pp);
+
+	tt = (kal_char*) kal_strtok_r(NULL, "", &pp);
+	if(NULL != tt)
+	{
+		strTstInject = tt;
+	}
+	else
+	{
+		strTstInject = "";
+	}
+
+        /* Length of module name should be less than 8 bytes and Length of TST inject string shall be less than 128 bytes */
+        if((CUSTOM_MAX_MOD_NAME > strlen(strModuleName)) && (128 > strlen(strTstInject)))
+        {
+            kal_uint8 idx;
+
+            for(idx = 0; idx < MAX_MODULE_MAP_SIZE; idx++)
+            {
+                if(strcmp(strModuleName, mod_map[idx].ModuleName) == 0)
+                {
+                    module_enum = (gmss_is_wcdma_mode_activated(mod_map[idx].SimIndex) == KAL_TRUE) ? mod_map[idx].ModuleEnum : mod_map[idx].ModuleEnum_1;
+                    break;
+                }
+            }
+
+            if(idx != MAX_MODULE_MAP_SIZE)
+            {
+                /* The target module is found, and send the TST to the module */
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                                        construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                strncpy((kal_char*)tst_inject->string, strTstInject, strlen(strTstInject));
+                tst_inject->index = data_len;
+
+                {
+                    msg_send5(MOD_L4C, (module_type)module_enum, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+                }
+            }
+        }
+        	
+	ret_val = KAL_TRUE;
+        }
+#endif /* __UMTS_RAT__ */
+    }
+    break;
+
+    #if defined(__AGPS_CONTROL_PLANE__)            
+        case 14:
+        {
+            ret_val = KAL_TRUE;
+            break;
+        }
+    #endif
+
+/************************sample code begin************************/			
+//		case op: /*owner_date: purpose*/
+//		{
+//			/*call proprietary parsing function here and AT will give result  */
+//			/*code OK/ERROR according to return value of parsing function*/	
+//
+//			break;
+//		}
+/************************sample code end*************************/
+    #ifdef __CTP_GOODIX_GT818_TRUE_MULTIPLE__
+        case 15:
+        case 16:
+        case 17:
+        case 18:
+        case 19:
+        case 20:
+        case 21:
+        case 22:
+        case 23:
+        case 24:
+        {
+            ret_val = process_gt818_ctp_cmd( (kal_uint8)(op - 15), data_len, data_str );
+            break;
+        }   
+    #endif
+
+#if defined(__AGPS_SUPPORT__)
+        /* below codes are for auto-test */
+        case 25:
+        case 26:
+        {
+            /*agps_auto_test_ind_struct *param_ptr = construct_local_para(
+            (kal_uint16)sizeof(agps_auto_test_ind_struct), TD_RESET);
+
+            param_ptr->mode = (op == 25)? 1 : 0;*/
+
+            /* Send the message to the module in AP */
+            //ret_val = custom_send_agps_autotest_ipc(IPC_MSG_ID_AGPS_AUTO_TEST_IND, param_ptr);
+#if defined(__SMART_PHONE_MODEM__)
+            agps_md_auto_test_ind data;
+            data.mode = (op == 25)? 1 : 0;
+            rmmi_lbs_send_data(AGPS_MD_TYPE_AUTO_TEST_IND, (kal_uint8*)&data, sizeof(data));
+#endif
+            ret_val = KAL_TRUE;
+            break;
+        }
+        case 27:
+        case 28:
+        case 29:
+        case 30:
+        case 31:
+        case 32:
+        {
+            /*agps_cp_up_status_ind_struct *param_ptr = construct_local_para(
+            (kal_uint16)sizeof(agps_cp_up_status_ind_struct), TD_RESET);
+
+            param_ptr->mode = (op-27);*/
+
+            /* Send the message to the module in AP */
+            //ret_val = custom_send_agps_autotest_ipc(IPC_MSG_ID_AGPS_CP_UP_STATUS_IND, param_ptr);
+#if defined(__SMART_PHONE_MODEM__)
+            agps_md_auto_cp_up_status_ind data;
+            data.mode = (op-27);
+            rmmi_lbs_send_data(AGPS_MD_TYPE_AUTO_CP_UP_STATUS_IND, (kal_uint8*)&data, sizeof(data));
+#endif
+            ret_val = KAL_TRUE;
+            break;
+        }
+        case 33:
+        case 34:
+        {
+            /* Send the message to the module in AP */
+            //ret_val = custom_send_agps_autotest_ipc(IPC_MSG_ID_AGPS_MOLR_START_IND+(op-33), NULL);
+#if defined(__SMART_PHONE_MODEM__)
+            rmmi_lbs_send_data(AGPS_MD_TYPE_AUTO_MOLR_START_IND+(op-33), NULL, 0);
+#endif
+            ret_val = KAL_TRUE;
+            break;
+        }
+        case 35:
+        case 36:
+        {
+            /*agps_mtlr_response_ind_struct *param_ptr = construct_local_para(
+            (kal_uint16)sizeof(agps_mtlr_response_ind_struct), TD_RESET);
+
+            param_ptr->response = (op-35);*/
+            /* Send the message to the module in AP */
+            //ret_val = custom_send_agps_autotest_ipc(IPC_MSG_ID_AGPS_MTLR_RESPONSE_IND, param_ptr);
+#if defined(__SMART_PHONE_MODEM__)
+            agps_md_auto_mtlr_response_ind data;
+            data.response = (op-35);
+            data.session_id = l4c_get_csmss_g_ss_id();
+            rmmi_lbs_send_data(AGPS_MD_TYPE_AUTO_MTLR_RESPONSE_IND, (kal_uint8*)&data, sizeof(data));
+#endif
+            ret_val = KAL_TRUE;
+            break;
+        }
+#endif
+        /* Sleep Mode Stress Test */
+        case 37:
+        {
+            ret_val = custom_send_sm_stress_inject_msg( "2GStressEnable", MOD_L1);
+            break;
+        }
+        case 38:
+        {
+            if(KAL_TRUE == gmss_is_wcdma_mode_activated(l4c_current_mod_id - MOD_L4C))
+            {
+                ret_val = custom_send_sm_stress_inject_msg( "3GStressEnable", MOD_UL1);
+            }
+            break;
+        }
+        case 39:
+        {
+            ret_val = custom_send_sm_stress_inject_msg( "RTOSStressEnable", MOD_L1);
+            break;
+        }
+        case 40:
+        {
+            ret_val = custom_send_sm_stress_inject_msg( "2GStressDisable", MOD_L1);
+            break;
+        }
+        case 41:
+        {
+            if(KAL_TRUE == gmss_is_wcdma_mode_activated(l4c_current_mod_id - MOD_L4C))
+            {
+                ret_val = custom_send_sm_stress_inject_msg( "3GStressDisable", MOD_UL1);
+            }
+            break;
+        }
+        case 42:
+        {
+            ret_val = custom_send_sm_stress_inject_msg( "RTOSStressDisable", MOD_L1);
+            break;
+        }
+        /*Re  Calibration Stress */
+        case 43:
+        {
+            ret_val = custom_send_sm_stress_inject_msg( "ReKEnable", MOD_L1);
+            break;
+        }
+        case 44:
+        {
+            ret_val = custom_send_sm_stress_inject_msg( "ReKDisable", MOD_L1);
+            break;
+        }
+        case 45:
+        {
+            ret_val = custom_send_sm_stress_inject_msg( "IgnoreXtaModeL1SM", MOD_L1);
+            break;
+        }
+#ifdef __LTE_RAT__
+        case 46:
+        {
+            ret_val = custom_send_sm_stress_inject_msg( "4GStressEnable", MOD_EL1);
+            break;
+        }
+        case 47:
+        {
+            ret_val = custom_send_sm_stress_inject_msg( "4GStressDisable", MOD_EL1);
+            break;
+        }
+#endif
+        case 48:
+        {
+            ret_val = custom_send_sm_stress_inject_msg( "2GSleepEnable", MOD_L1);
+            break;
+        }
+        case 49:
+        {
+            ret_val = custom_send_sm_stress_inject_msg( "2GSleepDisable", MOD_L1);
+            break;
+        }
+        case 50:
+        {
+            if(KAL_TRUE == gmss_is_wcdma_mode_activated(l4c_current_mod_id - MOD_L4C))
+            {
+                ret_val = custom_send_sm_stress_inject_msg( "3GSleepEnable", MOD_UL1);
+            }
+            break;
+        }
+        case 51:
+        {
+            if(KAL_TRUE == gmss_is_wcdma_mode_activated(l4c_current_mod_id - MOD_L4C))
+            {
+                ret_val = custom_send_sm_stress_inject_msg( "3GSleepDisable", MOD_UL1);
+            }
+            break;
+        }
+#ifdef __LTE_RAT__
+        case 52:
+        {
+            ret_val = custom_send_sm_stress_inject_msg( "4GSleepEnable", MOD_EL1);
+            break;
+        }
+        case 53:
+        {
+            ret_val = custom_send_sm_stress_inject_msg( "4GSleepDisable", MOD_EL1);
+            break;
+        }
+#endif
+        case 54:
+        {
+            ret_val = custom_send_sm_stress_inject_msg( "OSTDSleepEnable", MOD_L1);
+            break;
+        }
+#if defined(__MTK_TARGET__) 
+        case 55:
+        {
+            //ret_val = custom_send_sm_stress_inject_msg( "OSTDSleepDisable", MOD_L1);
+            if (1 == data_str[1]) {
+                SleepDrv_LockSleep(data_str[2], data_str[0]);
+                ret_val = KAL_TRUE;
+            } else if (0 == data_str[1]) {
+                SleepDrv_UnlockSleep(data_str[2], data_str[0]);
+                ret_val = KAL_TRUE;
+            } else {
+                ret_val = KAL_FALSE;
+            }
+            break;
+        }
+#endif
+#ifdef __LTE_RAT__
+        case 56:
+        {
+            ret_val = custom_send_sm_stress_inject_msg( "4GDVFSEnable", MOD_EL1);
+            break;
+        }
+        case 57:
+        {
+            ret_val = custom_send_sm_stress_inject_msg( "4GDVFSDisable", MOD_EL1);
+            break;
+        }
+#endif
+#ifdef DVFS_ENABLE
+        case 60:
+        {
+            // lock DVFS (MIPS/DFE/VMD/VMODEM) or PTP for debug
+            if (data_len == 4) {
+                ret_val = DVFS_lock((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            } else {
+                ret_val = KAL_FALSE;
+            }
+            break;
+        }
+        case 61:
+        {
+            // dump MD DVFS SW tables for debug
+            if (data_len == 1) {
+                ret_val = DVFS_md_dumpRequestTableByTrc(data_str[0]);
+            } else {
+                ret_val = KAL_FALSE;
+            }
+            break;
+        }
+#endif // DVFS_ENABLE
+        case 62:
+        {
+            // get or set PLL for debug
+            ret_val = DVFS_atcmd_PLL_control(data_len, data_str);
+            break;
+        }
+        case 63:
+        {
+            // get or set PMIC for debug
+            ret_val = DVFS_md_atcmd_PMIC_control(data_len, data_str);
+            break;
+        }
+#ifdef DVFS_ENABLE
+        case 64:
+        {
+            ret_val = DVFS_modem_atcmd_start_drvtest( data_len, data_str );
+            break;
+        }
+        case 65:
+        {
+            ret_val = DVFS_modem_atcmd_stop_drvtest();
+            break;
+        }
+        case 66:
+        {
+        	// enable DVFS support 3CC 60M
+            ret_val = DVFS_modem_atcmd_config_3CC_60M_scenario( data_len );
+            break;
+        }
+        case 67:
+        {
+            // enable or disable DVFS MD driver test
+            ret_val = DVFS_md_atcmd_drvtest( data_len, data_str );
+            break;
+        }
+        case 68:
+        {
+            ret_val = DVFS_atcmd_dump_hw_reg( data_len, data_str );
+            break;
+        }
+#endif // DVFS_ENABLE
+        case 70:
+        {
+            switch(data_len)
+            {
+            	case 0:
+                   /* 2G force infinite sleep */
+                   ret_val = custom_send_sm_stress_inject_msg( "2GForceSleep", MOD_L1);
+                break;
+            	case 1:
+                   /* 3G FDD force infinite sleep */
+                if(KAL_TRUE == gmss_is_wcdma_mode_activated(l4c_current_mod_id - MOD_L4C))
+                {
+                   ret_val = custom_send_sm_stress_inject_msg( "3GForceSleepFDD", MOD_UL1);
+                }
+                break;
+            	case 2:
+                   /* 3G TDD force infinite sleep */
+				   ret_val = custom_send_sm_stress_inject_msg( "3GForceSleepTDD", MOD_TL1);
+                break;
+            	case 3:
+                   /* 3G C2K force infinite sleep */
+#ifdef __CDMA2000_RAT__
+                   ret_val = custom_send_c2k_sleep_ctrl_msg("C2KForceSleep");
+#endif
+                   break;
+            	case 4:
+                    /* 4G LTE force infinite sleep */
+                    if( (KAL_TRUE == gmss_is_ltefdd_mode_activated()) || (KAL_TRUE == gmss_is_ltetdd_mode_activated()) )
+                    {
+                        ret_val = custom_send_sm_stress_inject_msg( "4GForceSleep", MOD_EL1);
+                    }
+            	    break;
+#if defined(__NR_RAT__)
+                case 5:
+                   /* 5G force infinite sleep */
+                   ret_val = custom_send_sm_stress_inject_msg( "NL1_SM_5GForceSleep", MOD_NL1);
+                break;
+#endif
+              default:
+                ret_val = KAL_FALSE;
+                break;
+            }
+            break;
+        }
+        
+#if defined(__MTK_TARGET__) 
+        case 71:
+        {
+            if (data_len == 3) {
+                ret_val = MD_TOPSM_StartLPM(data_str[0], data_str[1], data_str[2]);
+            } else {
+                ret_val = KAL_FALSE;
+            }
+            break;
+        }
+        case 72:
+        {
+            ret_val = MD_TOPSM_DumpLPM();
+            break;
+        }
+        case 73:
+        {   /* C2K sleep enable */
+#ifdef __CDMA2000_RAT__
+            ret_val = custom_send_c2k_sleep_ctrl_msg("C2KSleepEnable");
+#endif
+            break;
+        }
+        case 74:
+        {   /* C2K sleep disable */
+#ifdef __CDMA2000_RAT__
+            ret_val = custom_send_c2k_sleep_ctrl_msg("C2KSleepDisable");
+#endif
+            break;
+        }
+	case 76:
+        {
+         #if defined(__MD97__) && defined(__MTK_TARGET__) && defined(MT6297)
+         #if defined(__HIF_CCCI_SUPPORT__)
+	    static kal_bool dram_profile_init = KAL_FALSE;
+	    kal_int32 ccci_ret;
+            //==============================only support @ apollo=============================
+            //AT+EGCMD=76,4,"AANNMMTT"
+	    //================================================================================
+	    if(dram_profile_init == KAL_FALSE)
+	    {
+	      ccci_ret=nccci_open(CCCI_DRAM_PROFILE);
+	      EXT_ASSERT(ccci_ret == CCCI_DRAM_PROFILE, ccci_ret, 0, 0);
+              dram_profile_init = KAL_TRUE;
+	    }
+	    ccci_ret=nccci_write(CCCI_DRAM_PROFILE,(void *)data_str,data_len);
+	    EXT_ASSERT(ccci_ret == data_len, ccci_ret, 0, 0);
+            ret_val = KAL_TRUE;
+         #endif
+	 #else
+	    ASSERT(0);
+	 #endif   
+            break;
+        }
+	case 77:
+        {
+	#if defined(__MD97__) && defined(__MTK_TARGET__) && defined(MT6297)
+	    switch(data_str[0])
+	    {
+                case 0: //md_ap_src_req
+		       MD_TOPSM_CT_SW_Control(EMI,data_str[1]); //set/clear "force on bit"
+                       ret_val = KAL_TRUE;
+                       break;
+		case 1: //md_ddren
+		       MD_TOPSM_DDR_SW_Control(data_str[1]);
+                       ret_val = KAL_TRUE;
+		       break;
+		case 2: //26m
+		       MD_TOPSM_SRCLK_SW_Control(SRCLK_FORCEON_USER_DRAM,data_str[1]);  //set/clear "force on bit"
+                       ret_val = KAL_TRUE;
+		       break;
+	    }
+	#else
+	    ASSERT(0);
+	#endif  
+            break;
+        }
+        case 78:
+        {
+            ret_val = ptp_Ctrl_API(data_len,data_str);
+            break;
+        }
+        case 79:
+        {
+            ret_val = ptp_Freq_API(data_len,data_str);
+            break;
+        }
+         case 80:
+        {
+            ret_val = ptp_Dump_API(data_len,data_str);
+            break;
+        }       
+        case 87:
+        {
+            ret_val = ptp_PMIC_API(data_len,data_str);
+            break;
+        }
+#endif
+
+        case 89:
+        {
+            ret_val = l4c_drx_setting_req_hdlr(data_str);
+            break;
+        }
+
+#ifdef __LTE_RAT__
+        case 90:
+        {   
+            //AT cmd to inject message to EMM, note that only HEX STRING can be accepted
+            if (data_str[0]  == 0x00)  
+            {
+                // stop all running T3402s
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+            
+                strncpy((kal_char*)tst_inject->string, "stop_t3402_all", strlen("stop_t3402_all"));
+                tst_inject->index = 0;
+                msg_send5(MOD_DHL_READER, MOD_EMM, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+                ret_val = KAL_TRUE;
+            }
+            
+            //AT cmd to reset VZW parameters
+            if (data_str[0]  == 0x01)  
+            { 
+                // reset EMM parameters
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+            
+                strncpy((kal_char*)tst_inject->string, "vzw_reset", strlen("vzw_reset"));
+                tst_inject->index = 0;
+                msg_send5(MOD_DHL_READER, MOD_EMM, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+                
+                // TODO: reset PAM parameters
+                
+                // TODO: reset NWSEL parameters
+
+
+                ret_val = KAL_TRUE;
+            }
+
+            //AT cmd to inject message to EMM to setup short T3430
+            if (data_str[0]  == 0x02)  
+            {
+                tst_module_string_inject_struct *tst_inject_sim1;
+                tst_inject_sim1 = (tst_module_string_inject_struct *)construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+            
+                strncpy((kal_char*)tst_inject_sim1->string, "SHORT_T3430", strlen("SHORT_T3430"));
+                tst_inject_sim1->index = 0;
+                msg_send5(MOD_DHL_READER, MOD_EMM, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim1);
+                
+#if defined(__GEMINI_LTE__)
+                tst_module_string_inject_struct *tst_inject_sim2;
+                tst_inject_sim2 = (tst_module_string_inject_struct *)construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                strncpy((kal_char*)tst_inject_sim2->string, "SHORT_T3430", strlen("SHORT_T3430"));
+                tst_inject_sim2->index = 0;
+                msg_send5(MOD_DHL_READER, MOD_EMM_2, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim2);
+
+#endif
+
+                ret_val = KAL_TRUE;
+
+            }
+
+            //AT cmd to inject message to EMM to setup normal T3430
+            if (data_str[0]  == 0x03)  
+            {
+                tst_module_string_inject_struct *tst_inject_sim1;
+                tst_inject_sim1 = (tst_module_string_inject_struct *)construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+            
+                strncpy((kal_char*)tst_inject_sim1->string, "DEFAULT_T3430", strlen("DEFAULT_T3430"));
+                tst_inject_sim1->index = 0;
+                msg_send5(MOD_DHL_READER, MOD_EMM, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim1);
+                
+#if defined(__GEMINI_LTE__)
+                tst_module_string_inject_struct *tst_inject_sim2;
+                tst_inject_sim2 = (tst_module_string_inject_struct *)construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                strncpy((kal_char*)tst_inject_sim2->string, "DEFAULT_T3430", strlen("DEFAULT_T3430"));
+                tst_inject_sim2->index = 0;
+                msg_send5(MOD_DHL_READER, MOD_EMM_2, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim2);
+
+#endif
+
+                ret_val = KAL_TRUE;
+
+            }
+
+            break;
+        }
+#endif // __LTE_RAT__
+#if defined(__NR_RAT__)
+        case 91:
+        {
+            switch(data_len)
+            {
+            	case 0:
+                   /* 5G sleep disable*/
+                   ret_val = custom_send_sm_stress_inject_msg( "NL1_SM_5GSleepDisable", MOD_NL1);
+                break;
+            	case 1:
+                   /* 5G sleep enable*/
+                   ret_val = custom_send_sm_stress_inject_msg( "NL1_SM_5GSleepEnable", MOD_NL1);
+                break;
+            	case 2:
+                   /* 5G sleep stress disable*/
+				   ret_val = custom_send_sm_stress_inject_msg( "NL1_SM_5GStressDisable", MOD_NL1);
+                break;
+            	case 3:
+                   /* 5G sleep stress enable*/
+                   ret_val = custom_send_sm_stress_inject_msg( "NL1_SM_5GStressEnable", MOD_NL1);
+                   break;
+              default:
+                ret_val = KAL_FALSE;
+                break;
+            }
+            break;
+        }
+#endif
+#if defined(__MTK_TARGET__)
+        case 100:
+        {
+            SYSPROFILER_ERROR_CODE error_code = SYSPRO_ERROR_CODE_SUCCESS;
+            if( (kal_uint8) data_str[0] == 0){
+                error_code = SysProfiler_Start();
+                if(error_code != SYSPRO_ERROR_CODE_SUCCESS){
+                    kal_sys_trace("Sysprofiler Fail to Start by AT-CMD");
+                }
+            }
+            else if( (kal_uint8) data_str[0] == 1){
+                error_code = SysProfiler_Stop();
+                if(error_code != SYSPRO_ERROR_CODE_SUCCESS){
+                    kal_sys_trace("Sysprofiler Fail to Stop by AT-CMD");
+                }      
+            }
+
+            //kal_char msg_buff[100];
+            //snprintf(msg_buff, sizeof(msg_buff), "[SWLA] SWLA_AT_CMD:%d %d %d.", (kal_uint32)data_str[0], (kal_uint32)data_str[1], (kal_uint32)data_str[2] );
+            //kal_sys_trace(msg_buff); 
+
+            ret_val = KAL_TRUE; 
+        }
+        break;
+        case 101:
+        {
+            kal_uint32 sampleRate;
+            if( IS_SWTR_MODE( (kal_uint8)data_str[0] ) ){
+                sampleRate = (kal_uint8)data_str[1] * 0x100;
+                sampleRate += (kal_uint8)data_str[2];
+                SysProfiler_SetSampleRate( sampleRate );
+            }
+            SysProfiler_SetMode( (kal_uint8)data_str[0] );
+            //kal_char msg_buff[100];
+            //snprintf(msg_buff, sizeof(msg_buff), "[SWLA] SWLA_AT_CMD:%d %d %d. ", (kal_uint32)data_str[0], (kal_uint32)data_str[1], (kal_uint32)data_str[2] );
+            //kal_sys_trace(msg_buff); 
+
+            ret_val = KAL_TRUE; 
+        }
+        break;
+
+        case 102:
+        {
+            SYSPROFILER_ERROR_CODE error_code = SYSPRO_ERROR_CODE_SUCCESS;
+            kal_char msg_buff[300] = {0};
+            kal_char tmp_buff[50] = {0};
+            kal_uint32 coreID, i;
+            snprintf(msg_buff, sizeof(msg_buff), "[Debug] Addon AT_CMD(len=%d):", data_len);
+            for(i=0;i<data_len;i++){
+                snprintf(tmp_buff, sizeof(tmp_buff), " 0x%02x", data_str[i]);
+                strncat(msg_buff, tmp_buff, strlen(tmp_buff));
+            }
+            kal_sys_trace(msg_buff); 
+
+            switch( data_str[0])
+            {
+                case 0: 
+                {
+                    error_code = SysProfiler_PassPMCParameterByATCMD(data_str);
+                    ASSERT(error_code == SYSPRO_ERROR_CODE_SUCCESS);
+                    break;
+                }
+                case 1:
+                {
+                    coreID = data_str[1];
+                    for( i=0; i< MAX_SYSPRO_NUMBER; i++){
+                        if( coreID != 0xFF && coreID != i) continue;
+                        error_code = SysProfiler_TurnOnELMAddon(i);
+                        ASSERT(error_code == SYSPRO_ERROR_CODE_SUCCESS);
+                    }
+                    break;
+                }
+                case 2:
+                {
+#if !defined(__SWLA_ADDON_EBM__) || !defined(__SS_SPV_LOAD__)
+                    kal_sys_trace("EBM addon not supported in this load");
+                    ASSERT(0);
+#endif
+                    coreID = data_str[1];
+                    for( i=0; i< MAX_SYSPRO_NUMBER; i++){
+                        if( coreID != 0xFF && coreID != i) continue;
+                        error_code = SysProfiler_TurnOnEBMAddon(i);
+                        ASSERT(error_code == SYSPRO_ERROR_CODE_SUCCESS);
+                    }
+                    break;
+                }
+#if defined(__MD95__)
+                case 3:
+                {
+                    coreID = data_str[1];
+                    kal_uint32 counter = data_str[2];
+                    kal_uint32 event = data_str[3];
+                    kal_uint32 qualifier = (data_str[4]<<24) | (data_str[5]<<16) | (data_str[6]<<8) | data_str[7]; 
+
+                    snprintf(msg_buff, sizeof(msg_buff), "Received SWLA CM2 Addon Command. CoreID:%d, Counter:%d, Event:%d, Qualifier:0x%x",
+                                coreID, counter, event, qualifier);
+                    kal_sys_trace(msg_buff);
+
+                    ASSERT(counter < 3);
+
+                    /* Config CM2 counter */
+                    if(counter == 0) {
+                        IAPMU_CM_Config(IAPMU_CM_COUNTER_0, event, qualifier);
+                    }else if(counter == 1) {
+                        IAPMU_CM_Config(IAPMU_CM_COUNTER_1, event, qualifier);
+                    }else {
+                        IAPMU_CM_Config(IAPMU_CM_CYCLE_COUNTER, 0x0, 0x0);
+                        break; // no need to register addon
+                    }
+
+                    for( i=0; i< MAX_SYSPRO_NUMBER; i++){
+                        if( coreID != 0xFF && coreID != i) continue;
+                        error_code = SysProfiler_TurnOnCM2Addon(i, counter);
+                        EXT_ASSERT(error_code == SYSPRO_ERROR_CODE_SUCCESS, error_code, i, counter);
+                    }
+                    break;
+                }
+                case 4:
+                {
+                    kal_uint16 vpemask = (data_str[1]<<8) | data_str[2];
+                    kal_uint8 counter = data_str[3];
+                    kal_uint8 event = data_str[4];
+                    kal_uint32 start_addr = (data_str[5]<<24) | (data_str[6]<<16) | (data_str[7]<<8) | data_str[8];
+                    kal_uint32 end_addr = (data_str[9]<<24) | (data_str[10]<<16) | (data_str[11]<<8) | data_str[12];
+                    kal_uint16 target_vpemask = (data_str[13]<<8) | data_str[14];
+                    kal_uint32 qualifier = (data_str[15]<<24) | (data_str[16]<<16) | (data_str[17]<<8) | data_str[18];
+
+                    snprintf(msg_buff, sizeof(msg_buff), "Received SWLA ICM2 Addon Command. VPEMask:0x%x Counter:%d, Event:%d, StartAddr:0x%x, EndAddr:0x%x, TargetVPEMask:0x%x, Qualifier:0x%x",
+                                vpemask, counter, event, start_addr, end_addr, target_vpemask, qualifier);
+                    kal_sys_trace(msg_buff);
+
+                    ASSERT(vpemask <= 0x3F);                                        // vpe id bitmask, 0x3F stands for all vpes
+                    ASSERT(counter < 6);                                            // 6 ICM2 counters
+                    ASSERT(event < 2);                                              // 2 events: request_cnt or l2_hit
+                    ASSERT((start_addr & 0x7) == 0 || (start_addr == 0xFFFFFFFF));  // 8 byte align. If 0xFFFFFFFF then filter is off
+                    ASSERT((end_addr & 0x7) == 0 || (end_addr == 0xFFFFFFFF));      // 8 byte aglin. If 0xFFFFFFFF then filter is off
+                    ASSERT(target_vpemask <= 0x3F);                                 // vpe id bitmask, 0x3F stands for all vpes
+                    
+                    /* Config ICM2 */
+                    IAPMU_ICM_StopCounter((IAPMU_ICM_CNT_T)(0x1<<counter));
+                    IAPMU_ICM_SetEvent((IAPMU_ICM_CNT_T)(0x1<<counter), (IAPMU_ICM_MONITOR_EVENT_T)event, start_addr, end_addr, target_vpemask, qualifier);
+                    IAPMU_ICM_ResetCounter((IAPMU_ICM_CNT_T)(0x1<<counter));
+                    IAPMU_ICM_StartCounter((IAPMU_ICM_CNT_T)(0x1<<counter));
+
+                    
+                    for( coreID=0; coreID< MAX_SYSPRO_NUMBER; coreID++){
+                        kal_uint16 vpesmask_this_core = 0x1<<(coreID*2) | 0x1<<(coreID*2+1);
+                        if( ( vpesmask_this_core & vpemask) == 0) 
+                            continue;  // vpemask no including this core
+
+                        error_code = SysProfiler_TurnOnICM2Addon(coreID, counter);
+                        EXT_ASSERT(error_code == SYSPRO_ERROR_CODE_SUCCESS, error_code, coreID, counter);
+                    }
+                    break;
+                }
+#elif defined(__MD97__)
+                case 3:
+                {
+                    kal_sys_trace("Received SWLA CM2 Addon Command");
+                    coreID = data_str[1];
+                    for( i=0; i< MAX_SYSPRO_NUMBER; i++){
+                        if( coreID != 0xFF && coreID != i) continue;
+                        SysProfiler_CM2SettingParameter config;
+                        SysProfiler_ConfigCM2fromATCMD(i,data_str, &config);
+                        error_code = SysProfiler_TurnOnCM2Addon(i, &config);
+                        ASSERT(error_code == SYSPRO_ERROR_CODE_SUCCESS);
+                    }
+                    break;
+                }          
+#endif
+                case 0xff:
+                {
+                    kal_sys_trace("Received SWLA Result Default Addon Command");
+                    error_code = SysProfiler_TriggerInitAddonByATCMD(data_str);
+                    ASSERT(error_code == SYSPRO_ERROR_CODE_SUCCESS);
+                    break;
+                }
+                default:
+                    break;
+            }
+            ret_val = KAL_TRUE; 
+        }
+        break;
+        case 103:
+        {
+#if defined(__SWLA_SNAPSHOT_FEATURE__)
+            kal_char msg_buff[100];
+            snprintf(msg_buff, sizeof(msg_buff), "Unit Test %d %d %d %d %d", (kal_uint32)data_str[0], (kal_uint32)data_str[1], (kal_uint32)data_str[2], (kal_uint32)data_str[3], (kal_uint32)data_str[4]  );
+            kal_sys_trace(msg_buff);
+            
+            SYSPROFILER_SNAPSHOT_BUFF_ID_ENUM ID = SYSPRO_SNAPSHOT_BUFF_HRT_FAIL;
+            SYSPROFILER_ERROR_CODE error_code;
+            error_code = SysProfiler_BufferSnapshot(&ID);
+            ASSERT(error_code == SYSPRO_ERROR_CODE_SUCCESS);
+            
+            snprintf(msg_buff, sizeof(msg_buff), "Unit Test Result: %d %d %d %d %d", (kal_uint32)ID, (kal_uint32)data_str[1], (kal_uint32)data_str[2], (kal_uint32)data_str[3], (kal_uint32)data_str[4]  );
+            kal_sys_trace(msg_buff);
+            ret_val = KAL_TRUE; 
+#endif
+        }
+        break;
+
+        case 104:
+        {
+            switch( data_str[0]){
+                case 0:
+                {
+                    SysProfiler_Adjust_buffer(SYSPRO_MIN_BUFF_SIZE, 0); 
+                    break;
+                }
+                case 1:
+                {
+                    SysProfiler_Adjust_buffer(SYSPRO_MAX_BUFF_SIZE, 0); 
+                    break;
+                }
+                case 2:
+                {
+                    if(data_len != 5){
+                         kal_sys_trace("Sysprofiler Fail to Adjust buff size due to wrong input size.");                        
+                    }
+                    kal_uint32 buff_size = (data_str[1]<<24) | (data_str[2]<<16) | (data_str[3]<<8) | data_str[4];
+                    SysProfiler_Adjust_buffer(SYSPRO_CUSTOM_BUFF_SIZE, buff_size); 
+                    break;
+                }
+            }
+        }
+        break;
+
+        case 105:
+        {
+            kal_char msg_buff[100];
+            snprintf(msg_buff, sizeof(msg_buff), "IAPMU_USER_SWITCH_AT_CMD:%d %d . ", (kal_uint32)data_str[0], (kal_uint32)data_str[1]);
+            system_print(msg_buff); 
+            switch( data_str[0])
+            {
+                case 0:
+                {
+#if defined(__MIPS_IA__)
+                    MIPS_IA_PMU_USER_E new_pmu_user  = data_str[1];
+                    IAPMU_STATUS_E pmu_error_code = IAPMU_set_current_sw_cfg(new_pmu_user);
+                    snprintf(msg_buff, sizeof(msg_buff), "IAPMU_USER_SWITCH_AT_CMD: %s(%d).",
+                        (pmu_error_code == PMU_STATUS_OK) ? "OK" : "FAIL", (kal_uint32)pmu_error_code);
+                    system_print(msg_buff); 
+#elif defined(__MIPS_I7200__)
+                    extern kal_int32 mdmcu_set_current_user(kal_uint32);
+                    const kal_uint32 user = data_str[1];
+                    const kal_uint32 code = mdmcu_set_current_user(user);
+                    snprintf(msg_buff, sizeof(msg_buff), "IAPMU_USER_SWITCH_AT_CMD: %s(%d).",
+                        (code == PMU_CODE_OK) ? "OK" : "FAIL", code);
+                    system_print(msg_buff); 
+#endif
+                    break;
+                }
+
+                default:
+                    break;
+            }
+
+            ret_val = KAL_TRUE; 
+        }
+        break;
+#endif /* __MTK_TARGET__ */
+
+#if defined(__MTK_TARGET__)
+
+#if defined(__MD97__)
+		case 145: //MPB enable/disable
+		{
+			extern kal_bool mpb_record_enable;	
+			if(mpb_record_enable){
+				mpb_record_enable = KAL_FALSE;
+				kal_sys_trace("[MPB] Regular logging DISABLE");
+			}else{
+				mpb_record_enable = KAL_TRUE;
+				kal_sys_trace("[MPB] Regular logging ENABLE");
+			}
+			ret_val = KAL_TRUE;
+			break;
+		}
+		case 146: // MPB record period 
+		{
+			kal_uint32 mpb_val = (kal_uint32)(data_str[0]);
+			extern kal_uint32 mpb_record_period_in_sec;
+			extern kal_bool mpb_record_fast_mode;
+			char print_str[64];
+			sprintf(print_str, "[MPB] Set regular logging to %d sec", mpb_val);
+			
+			if(mpb_val==0){
+				mpb_record_fast_mode = KAL_TRUE ;
+				kal_sys_trace("[MPB] Fast record mode ENALBE");
+			}else{
+				mpb_record_fast_mode = KAL_FALSE ;
+				mpb_record_period_in_sec = mpb_val;
+				kal_sys_trace(print_str);
+			}
+			ret_val = KAL_TRUE;
+			break;
+		}
+#endif
+
+    #if defined(DCM_SUPPORT) && defined (DCM_LPM_ENABLE)
+        case 152:
+        {/* Gen93/95 CMD EX: AT+EGCMD=152, 3, "000009" */ /* "000009"==> MDCORE. "00000E"==> IA. "00000F"==> uSIP. "00000B"==> BUS_2X */
+         /* Gen97 CMD EX: AT+EGCMD=152, 3, "000009" */ /* "000009"==> (Shaolin+uSIP bus)+uSIP. "00000E"==> Shaolin+uSIP bus. "00000F"==> uSIP. "00000B"==> BUS_4X. "000401"==> SHAOLIN. "000403"==> IA */
+            kal_bool lpm_32K = KAL_TRUE;
+            
+            if (data_len != 3) 
+            {
+                ret_val = KAL_FALSE;
+            }
+            else
+            {
+                if((kal_uint32)data_str[0]==0)
+                {
+                    lpm_32K = KAL_TRUE;
+                }
+                else
+                {
+                    lpm_32K = KAL_FALSE;
+                }
+             #if defined(__MD93__)||defined(__MD95__)
+                DCM_Service_Change_LPM_Setting(lpm_32K, (kal_uint32)data_str[1], (kal_uint32)data_str[2]);                
+             #else
+                LPM_Change_Setting(lpm_32K, (kal_uint32)data_str[1], (kal_uint32)data_str[2]);
+             #endif
+                ret_val = KAL_TRUE;
+            }
+
+            break;
+        }        
+    #endif
+        case 153:
+        {/*CMD EX: AT+EGCMD=153, 1, "1F"*/
+            kal_char buff[100];
+            if (data_len != 1) 
+            {
+                ret_val = KAL_FALSE;
+            }
+            else
+            {
+                strncpy(buff, "Frequency Meter Source=0x", strlen("Frequency Meter Source=0x"));
+                kal_itoa(data_str[0], buff+strlen(buff), 16);
+                strncat(buff, ", frequency=", strlen(", frequency="));
+                kal_itoa(PLL_FrequencyMeter_GetFreq((kal_uint32)data_str[0]), buff+strlen(buff), 10);
+                strncat(buff, " MHz", strlen(" MHz"));
+                system_print(buff);
+                ret_val = KAL_TRUE;
+            }
+
+            break;
+        }   
+        case 154:
+        {/* To know DCM is Enable/Disable. CMD EX: AT+EGCMD=154 */            
+            kal_char buff[40];
+        #if defined(DCM_SUPPORT)    
+            ret_val = DCM_Query_Status();
+
+            if(ret_val == KAL_TRUE)
+            {
+                strncpy(buff, "DCM Enabled", strlen("DCM Enabled"));
+            }
+            else
+            {
+                strncpy(buff, "DCM Disabled", strlen("DCM Disabled"));                    
+            }
+        #else
+            strncpy(buff, "DCM function is not support!", strlen("DCM function is not support!"));
+        #endif
+            system_print(buff);
+            
+            ret_val = KAL_TRUE;
+            break;
+        }
+        case 155:
+        {/* CMD EX: AT+EGCMD=155 */
+        #if defined(DCM_SUPPORT)            
+            // Unlock DCM by AT Command. ==> DCM enable.   default is enable
+            DCM_SW_Unlock(DCM_LOCK_UNLOCK_MODULE_AT_COMMAND);
+            ret_val = KAL_TRUE;
+        #else   
+            ret_val = KAL_FALSE;
+        #endif        
+            break;
+        }		
+        case 156:
+        {/* CMD EX: AT+EGCMD=156 */
+        #if defined(DCM_SUPPORT)            
+            // Lock DCM by AT Command. ==>DCM disable. default is enable
+            DCM_SW_Lock(DCM_LOCK_UNLOCK_MODULE_AT_COMMAND);
+            ret_val = KAL_TRUE;
+        #else   
+            ret_val = KAL_FALSE;
+        #endif             
+            break;
+        }
+        case 157:
+        {/* CMD EX: AT+EGCMD=157 */
+        #if defined(DCM_SUPPORT)   
+            extern void DCM_Disable_For_AddressLogger(void);
+            // Disable Address Logger related DCM by AT Command. ==> Let tester could use Address Logger normally.
+            DCM_Disable_For_AddressLogger();
+            ret_val = KAL_TRUE;
+        #else   
+            ret_val = KAL_FALSE;
+        #endif             
+            break;
+        }		
+		case 158:	
+		{
+			//Set EMI latency exception type
+			ret_val = Set_EMI_ELM_ExceptionType((data_str[0]));
+			break;
+		}
+
+		case 159:
+		{
+			ret_val = Set_EMI_ELM_Config((data_str[0]), (data_str[1]), (data_str[2]));
+			break;
+		}
+		
+		case 160:
+		{
+			//Set ELM read average latency threshold
+			//Default value: Please reference to function ELM_INIT in elm.c
+            ret_val = Set_EMI_ELM_Threshold((data_str[0]), (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);						
+			break;
+		}
+
+		case 161:	
+		{			
+			ret_val = Set_EMI_ELM_Mode((data_str[0]));
+			break;
+		}
+
+		case 162:	
+		{			
+			ret_val = Set_EMI_ELM_VPE((data_str[0]), (data_str[1]));
+			break;
+		}
+
+		case 163:	
+		{			
+			ret_val = Set_EMI_ELM_uSIP_Core((data_str[0]), (data_str[1]), (data_str[2]));
+			break;
+		}
+		case 164:
+		{
+			extern void Drv_ELM_Toggle(kal_uint32);
+			kal_uint32 flag = (kal_uint32)(data_str[0]);
+			Drv_ELM_Toggle(flag);
+			ret_val = KAL_TRUE;
+			break;
+		}
+		case 165:
+		{
+			extern void Drv_ELM_Change_WC_Threshold(kal_uint8,kal_uint32);			
+			Drv_ELM_Change_WC_Threshold((data_str[0]), (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+			ret_val = KAL_TRUE;
+			break;
+		}
+		case 166:
+		{
+			extern void Drv_ELM_Reset_Mdinfra_AXID_MASK();			
+			Drv_ELM_Reset_Mdinfra_AXID_MASK();
+			ret_val = KAL_TRUE;
+			break;
+		}
+#if defined(__MD95__)
+		case 170:	
+		{			
+			ret_val = drv_sfu_AT_Config(data_str);
+			break;
+		}
+#endif
+		
+#if defined(__SPV_SIB_DUMP_SWLA__)
+                case 180:
+                { 
+                    extern void SPV_Sib_Dump_SWLA(void);
+                    SPV_Sib_Dump_SWLA();
+                    ret_val = KAL_TRUE;
+
+                    break;
+                }
+                case 181:
+                {
+                    extern void SPV_Sib_Resume_SWLA(void);
+                    SPV_Sib_Resume_SWLA();
+                    ret_val = KAL_TRUE;
+
+                    break;
+                }
+#endif
+
+#if defined(__SONIC_DYNAMIC_PMU_ENABLE__) || defined(__USIP_DYNAMIC_PMU_ENABLE__)
+        case 187:
+        {
+            extern kal_bool cxif_dynamic_pmu_config(kal_uint8, kal_uint8 *);
+            ret_val = cxif_dynamic_pmu_config(data_len, data_str);
+            break;
+        }
+        case 188:
+        {
+            extern kal_bool cxif_dynamic_pmu_read(kal_uint8, kal_uint8 *);
+            ret_val = cxif_dynamic_pmu_read(data_len, data_str);
+            break;
+        }
+#endif
+#if defined(__USIP_DYNAMIC_PMU_ENABLE__)
+        case 189:
+        {
+			volatile SS_PMUInfo *cuif_pmu_ptr = INNER_SS_DYNAMIC_PMU_MODIFY;
+
+            cuif_pmu_ptr->mode         = data_str[0] ;
+            cuif_pmu_ptr->counter_idx  = data_str[1] ;
+            cuif_pmu_ptr->event_type   = data_str[2] ;
+            cuif_pmu_ptr->status       = 0           ;
+
+            CUIF_INNER_SWI_SW(CUIF_C2U_INNER_PMU_DYNAMIC_MODIFY);
+            ret_val = 1;
+            break;
+        }
+
+        case 190:
+        {
+            volatile SS_PMUInfo *cuif_pmu_ptr = BRP_SS_DYNAMIC_PMU_MODIFY;
+
+            cuif_pmu_ptr->mode         = data_str[0] ;
+            cuif_pmu_ptr->counter_idx  = data_str[1] ;
+            cuif_pmu_ptr->event_type   = data_str[2] ;
+            cuif_pmu_ptr->status       = 0           ;
+
+            CUIF_BRP_SWI_SW(CUIF_C2U_BRP_PMU_DYNAMIC_MODIFY);
+            ret_val = 1;
+            break;
+        }
+
+        case 191:
+        {
+            volatile SS_PMUInfo *cuif_pmu_ptr = FEC_WBRP_SS_DYNAMIC_PMU_MODIFY;
+
+            cuif_pmu_ptr->mode         = data_str[0] ;
+            cuif_pmu_ptr->counter_idx  = data_str[1] ;
+            cuif_pmu_ptr->event_type   = data_str[2] ;
+            cuif_pmu_ptr->status       = 0           ;
+
+            CUIF_FEC_SWI_SW(CUIF_C2U_FEC_WBRP_PMU_DYNAMIC_MODIFY);
+            ret_val = 1;
+            break;
+        }
+
+        case 192:
+        {
+            volatile SS_PMUInfo *cuif_pmu_ptr = SPEECH_SS_DYNAMIC_PMU_MODIFY;
+
+            cuif_pmu_ptr->mode         = data_str[0] ;
+            cuif_pmu_ptr->counter_idx  = data_str[1] ;
+            cuif_pmu_ptr->event_type   = data_str[2] ;
+            cuif_pmu_ptr->status       = 0           ;
+
+            CUIF_SPEECH_SWI_SW(CUIF_C2U_SPEECH_PMU_DYNAMIC_MODIFY);
+            ret_val = 1;
+            break;
+        }
+#endif	
+
+#if defined(__FORCE_EMI_LATENCY_ENABLE__)
+
+	case 193:
+    {
+        kal_uint8 r_lat_cfg, w_lat_cfg;
+        ASSERT(data_str);
+        ASSERT(data_len >= 2);
+
+        r_lat_cfg = data_str[0];
+        w_lat_cfg = data_str[1];
+
+		#if defined(__MD97__)
+			FORCE_MD_ULTRA(0);
+		#endif
+
+		#if defined(MT6297)
+        if ((data_len >= 3) && ( (kal_uint8)(data_str[2]) == 1)) {
+            EMI_FORCE_DISABLE_DRAMC_WRITE_EARLY_RESPONSE();
+        }
+		#endif 
+		
+        EMI_FORCE_LATENCY(r_lat_cfg, w_lat_cfg);
+
+        ret_val = KAL_TRUE;
+		break;
+    }  
+#if defined(__MD97__) && !defined(MT6297)
+	case 194:
+	{		
+		EMI_AGING_26M();
+        ret_val = KAL_TRUE;
+	    break;
+	}
+#endif
+
+#endif	
+
+#if defined(__MTK_TARGET__)
+        case 195:
+        {
+extern void Drv_MDAPInterface_Custom_Test(kal_uint32, kal_uint32);
+            Drv_MDAPInterface_Custom_Test(data_str[0], data_str[1]);
+            ret_val = KAL_TRUE;
+            break;
+        }
+
+        case 196:
+        {/*CMD EX: AT+EGCMD=196, 1, "00"   
+                                    "00": disable. "11": enable*/
+extern void Drv_MDAPInterface_DVFSRC_Log_On(kal_uint32);
+
+            if (data_len != 1) 
+            {
+                ret_val = KAL_FALSE;
+            }
+            else
+            {
+                Drv_MDAPInterface_DVFSRC_Log_On((kal_uint32)data_str[0]);
+                ret_val = KAL_TRUE;
+            }
+            break;
+        }    
+#endif
+
+#if defined(__BW_RUNTIME_PF__)	
+		case 199:
+        {
+            RECORD_AP_DVFSRC = (kal_uint32)(data_str[0]);
+            ret_val = KAL_TRUE;
+            break;            
+        }
+        case 200:
+        {
+            BW_index = (kal_uint32)(data_str[0]);
+            ret_val = KAL_TRUE;
+            break;            
+        }
+        case 201:
+        {
+            // duration unit is us
+            // duration*10 as upper bound
+            kal_uint32 duration = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            BW_Cor_Duration_core[0] = duration;
+            BW_Cor_Duration_core[1] = duration;           
+            BW_Dur_Low_core[0] = duration;
+            BW_Dur_Low_core[1] = duration;           
+            BW_Dur_High_core[0] = duration*10;
+            BW_Dur_High_core[1] = duration*10;            			
+#if defined(__MD97__)
+			BW_Cor_Duration_core[2] = duration;
+            BW_Cor_Duration_core[3] = duration;
+			BW_Dur_Low_core[2] = duration;
+            BW_Dur_Low_core[3] = duration;
+			BW_Dur_High_core[2] = duration*10;
+            BW_Dur_High_core[3] = duration*10;
+#endif
+			
+            SPVSVC_BW_Threshold_Print();
+            ret_val = KAL_TRUE;
+            break;
+        }
+        case 204:
+        {
+            BW_Cor_Duration_core[0] = BW_Cor_Duration[BW_index];
+            BW_Cor_Duration_core[1] = BW_Cor_Duration[BW_index];
+#if defined(__MD97__)			
+            BW_Cor_Duration_core[2] = BW_Cor_Duration[BW_index];
+            BW_Cor_Duration_core[3] = BW_Cor_Duration[BW_index];
+#endif			
+            SPVSVC_BW_Threshold_Print();
+            ret_val = KAL_TRUE;
+            break;
+        }
+        case 205:
+        {
+            BW_Dur_Low_core[0] = BW_Cor_Duration_Low[BW_index];
+            BW_Dur_Low_core[1] = BW_Cor_Duration_Low[BW_index];      
+#if defined(__MD97__)			
+            BW_Dur_Low_core[2] = BW_Cor_Duration_Low[BW_index];            
+            BW_Dur_Low_core[3] = BW_Cor_Duration_Low[BW_index];  
+#endif			
+            SPVSVC_BW_Threshold_Print();
+            ret_val = KAL_TRUE;            
+            break;
+        }  
+        case 206:
+        {
+            BW_Dur_High_core[0] = BW_Cor_Duration_High[BW_index];
+            BW_Dur_High_core[1] = BW_Cor_Duration_High[BW_index];      
+#if defined(__MD97__)			
+            BW_Dur_High_core[2] = BW_Cor_Duration_High[BW_index];            
+            BW_Dur_High_core[3] = BW_Cor_Duration_High[BW_index];
+#endif			
+            SPVSVC_BW_Threshold_Print();
+            ret_val = KAL_TRUE;            
+            break;
+        }
+        case 207:
+        {
+            BW_Cor_Enable = 1;
+            ret_val = KAL_TRUE;            
+            break;
+        }  
+        case 208:
+        {
+            BW_Cor_Enable = 0;
+            ret_val = KAL_TRUE;            
+            break;
+        }    
+        case 209:
+        {
+            SPVSVC_BW_Max_Print();
+            ret_val = KAL_TRUE;
+            break;
+        } 
+        case 210:
+        {
+            SPVSVC_BW_Max_Clear();
+            ret_val = KAL_TRUE; 
+            break;
+        }         
+        case 211:
+        {
+            BW_Cor_Raw_Data_Print_Enable = 1;
+            ret_val = KAL_TRUE;            
+            break;
+        }  
+        case 212:
+        {
+            BW_Cor_Raw_Data_Print_Enable = 0;
+            ret_val = KAL_TRUE;            
+            break;
+        }    
+        case 213:
+        {
+            BW_Transaction_Low_core[0] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]); 
+            BW_Transaction_Low_core[1] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+#if defined(__MD97__)			
+            BW_Transaction_Low_core[2] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            BW_Transaction_Low_core[3] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+#endif			
+            SPVSVC_BW_Threshold_Print();
+            ret_val = KAL_TRUE;            
+            break;
+        }    
+        case 214:
+        {
+            BW_M3_Assertion_core[0] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            BW_M3_Assertion_core[1] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+#if defined(__MD97__)			
+            BW_M3_Assertion_core[2] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            BW_M3_Assertion_core[3] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+#endif			
+            SPVSVC_BW_Threshold_Print();
+            ret_val = KAL_TRUE;            
+            break;
+        }    
+        case 215:
+        {
+            BW_M4_Assertion_core[0] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            BW_M4_Assertion_core[1] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+#if defined(__MD97__)
+            BW_M4_Assertion_core[2] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            BW_M4_Assertion_core[3] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+#endif			
+            SPVSVC_BW_Threshold_Print();
+            ret_val = KAL_TRUE;            
+            break;
+        }   
+        case 216:
+        {
+            BW_M3M4_Assertion_core[0] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            BW_M3M4_Assertion_core[1] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            SPVSVC_BW_Threshold_Print();
+            ret_val = KAL_TRUE;            
+            break;
+        }    
+        case 217:
+        {
+            Latency_M3_Read_Assertion_core[0] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            Latency_M3_Read_Assertion_core[1] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+#if defined(__MD97__)			
+            Latency_M3_Read_Assertion_core[2] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            Latency_M3_Read_Assertion_core[3] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+#endif			
+            SPVSVC_BW_Threshold_Print();
+            ret_val = KAL_TRUE;            
+            break;
+        }    
+        case 218:
+        {
+            Latency_M4_Read_Assertion_core[0] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            Latency_M4_Read_Assertion_core[1] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+#if defined(__MD97__)			
+            Latency_M4_Read_Assertion_core[2] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            Latency_M4_Read_Assertion_core[3] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+#endif			
+            SPVSVC_BW_Threshold_Print();
+            ret_val = KAL_TRUE;            
+            break;
+        }   
+#if defined(__MD95__)
+        case 219:
+        {
+            Latency_M3_Write_Assertion_core[0] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            Latency_M3_Write_Assertion_core[1] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            SPVSVC_BW_Threshold_Print();
+            ret_val = KAL_TRUE;            
+            break;
+        }    
+        case 220:
+        {
+            Latency_M4_Write_Assertion_core[0] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            Latency_M4_Write_Assertion_core[1] = (kal_uint32)((data_str[0]<<24) | (data_str[1]<<16) | (data_str[2]<<8) | data_str[3]);
+            SPVSVC_BW_Threshold_Print();
+            ret_val = KAL_TRUE;            
+            break;
+        }
+#endif /*__MD95__*/
+#endif /* __BW_RUNTIME_PF__*/
+
+#if defined(MT6297)
+#if defined(__FORCE_EMI_LATENCY_ENABLE__) || defined(__BW_RUNTIME_PF__)
+		case 221:
+        {
+            FORCE_MD_ULTRA(0);
+            ret_val = KAL_TRUE;            
+            break;
+        }    
+		case 222:
+        {
+            FORCE_MD_ULTRA(1);
+            ret_val = KAL_TRUE;            
+            break;
+        }
+#endif
+#endif
+
+#if defined(__MD97__) && !defined(MT6297)
+	    case 223:
+		{
+			extern void Drv_ELM_Set_ID2_RW(kal_bool, kal_bool);
+			extern kal_bool id2_rw_enable;
+			kal_uint32 elm_id2_rw_enable = (kal_uint32)(data_str[0]);
+			if(elm_id2_rw_enable==0)
+			{
+				id2_rw_enable = KAL_FALSE;
+			}
+			else
+			{
+				id2_rw_enable = KAL_TRUE;
+			}
+			Drv_ELM_Set_ID2_RW(id2_rw_enable, KAL_TRUE);
+			ret_val = KAL_TRUE;
+			break;
+		}
+#endif
+
+#if defined(__SPV_EBM_DRIVER__)
+        case 250:
+        {
+extern void SPV_EBM_Dump_Config(kal_bool);
+            
+            SPV_EBM_Dump_Config(KAL_FALSE);
+
+            ret_val = KAL_TRUE;            
+            break;
+        }    
+        case 251:
+        {
+extern kal_bool SPV_EBM_Compare_Config_With_Init(void);
+
+            kal_bool comparedResult = KAL_TRUE;
+            comparedResult = SPV_EBM_Compare_Config_With_Init();
+
+            if(!comparedResult)
+                ASSERT(0);
+
+            ret_val = KAL_TRUE;            
+            break;
+        }    
+#endif
+        case 300:
+        {            
+            if (data_len == 2)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                kal_sprintf((kal_char*)tst_inject->string, "emac300:");
+                tst_inject->string[8] = data_str[0];
+                tst_inject->string[9] = data_str[1];
+                    
+                msg_send5(MOD_L4C, MOD_EMAC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+#if defined(__NR_RAT__)
+            if (data_len == 1)
+            {
+               tst_module_string_inject_struct *tst_inject;
+
+               tst_inject = (tst_module_string_inject_struct *)
+                              construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+               kal_sprintf((kal_char*)tst_inject->string, "NL1_RX_DSP_INJECT_MSG_ID_255");
+               tst_inject->index = 16;
+               msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+               tst_inject = (tst_module_string_inject_struct *)
+                              construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+               kal_sprintf((kal_char*)tst_inject->string, "NL1_RX_DSP_INJECT_MSG_ID_16");
+               tst_inject->index = 3;
+               msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+               tst_inject = (tst_module_string_inject_struct *)
+                              construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+               kal_sprintf((kal_char*)tst_inject->string, "NL1_RX_DSP_INJECT_MSG_ID_16");
+               tst_inject->index = data_str[0];
+               msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+               tst_inject = (tst_module_string_inject_struct *)
+                              construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+               kal_sprintf((kal_char*)tst_inject->string, "NL1_RX_DSP_INJECT_MSG_ID_16");
+               tst_inject->index = 0;
+               msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+               tst_inject = (tst_module_string_inject_struct *)
+                              construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+               kal_sprintf((kal_char*)tst_inject->string, "NL1_RX_DSP_INJECT_MSG_ID_16");
+               tst_inject->index = 0;
+               msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+               tst_inject = (tst_module_string_inject_struct *)
+                             construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+               kal_sprintf((kal_char*)tst_inject->string, "NL1_RX_DSP_INJECT_MSG_ID_16");
+               tst_inject->index = 0;
+               msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+#endif
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+        case 301:
+        {
+            kal_uint8 which_sim = l4c_current_mod_id - MOD_L4C; 
+
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                tst_inject->index = 2;
+                tst_inject->string[0] = data_str[0];
+                tst_inject->string[1] = data_str[1];
+                tst_inject->string[2] = data_str[2];
+                    
+                msg_send5(MOD_L4C + which_sim, MOD_UPCM + which_sim, 0,
+                    MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        } 
+        
+        case 302:
+        {
+            if (data_len == 2)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                kal_sprintf((kal_char*)tst_inject->string, "emac302:");
+                tst_inject->string[8] = data_str[0];
+                tst_inject->string[9] = data_str[1];
+
+                    
+                msg_send5(MOD_L4C, MOD_EMAC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+#if defined(__NR_RAT__)
+            if (data_len == 1)
+            {
+               tst_module_string_inject_struct *tst_inject;
+
+               tst_inject = (tst_module_string_inject_struct *)
+                              construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+               kal_sprintf((kal_char*)tst_inject->string, "NL1_RX_DSP_INJECT_MSG_ID_255");
+               tst_inject->index = 16;
+               msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+               tst_inject = (tst_module_string_inject_struct *)
+                              construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+               kal_sprintf((kal_char*)tst_inject->string, "NL1_RX_DSP_INJECT_MSG_ID_16");
+               tst_inject->index = 2;
+               msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+               tst_inject = (tst_module_string_inject_struct *)
+                              construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+               kal_sprintf((kal_char*)tst_inject->string, "NL1_RX_DSP_INJECT_MSG_ID_16");
+               tst_inject->index = data_str[0];
+               msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+               tst_inject = (tst_module_string_inject_struct *)
+                              construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+               kal_sprintf((kal_char*)tst_inject->string, "NL1_RX_DSP_INJECT_MSG_ID_16");
+               tst_inject->index = 0;
+               msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+               tst_inject = (tst_module_string_inject_struct *)
+                              construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+               kal_sprintf((kal_char*)tst_inject->string, "NL1_RX_DSP_INJECT_MSG_ID_16");
+               tst_inject->index = 0;
+               msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+               tst_inject = (tst_module_string_inject_struct *)
+                             construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+               kal_sprintf((kal_char*)tst_inject->string, "NL1_RX_DSP_INJECT_MSG_ID_16");
+               tst_inject->index = 0;
+               msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+#endif
+            ret_val = KAL_TRUE;       
+            break;
+        }
+ 
+ 	    case 303:
+        {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                strncpy((kal_char*)tst_inject->string, "TPB_CMD_EN", strlen("TPB_CMD_EN"));
+                tst_inject->index = data_str[0];
+                msg_send5(MOD_L4C, MOD_EL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+        case 304:
+        {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                strncpy((kal_char*)tst_inject->string, "TPB_CMD_THRES", strlen("TPB_CMD_THRES"));
+                tst_inject->index = data_str[0];
+                msg_send5(MOD_L4C, MOD_EL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+        case 305:/*CMD EX:
+        					 AT+EGCMD = 305, 1, "01"  BOP enable
+        					 AT+EGCMD = 305, 1, "02"  BOP disable
+ 																	*/
+        {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject_sim1;
+                tst_inject_sim1 = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                strncpy((kal_char*)tst_inject_sim1->string, "EL1_MPC_BOP", strlen("EL1_MPC_BOP"));
+                tst_inject_sim1->index = data_str[0];
+                msg_send5(MOD_L4C, MOD_EL1_MPC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim1);
+				
+				#if defined(__GEMINI_LTE__)
+				tst_module_string_inject_struct *tst_inject_sim2;				
+				tst_inject_sim2 = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                strncpy((kal_char*)tst_inject_sim2->string, "EL1_MPC_BOP", strlen("EL1_MPC_BOP"));
+                tst_inject_sim2->index = data_str[0];
+				msg_send5(MOD_L4C_2, MOD_EL1_MPC_2, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim2);
+				#endif
+
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+        case 306:
+        {
+            if (data_len == 4)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                kal_sprintf((kal_char*)tst_inject->string, "emac306:");
+                tst_inject->string[8]  = data_str[0];
+                tst_inject->string[9]  = data_str[1];
+                tst_inject->string[10] = data_str[2];
+                tst_inject->string[11] = data_str[3];
+                    
+                msg_send5(MOD_L4C, MOD_EMAC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+
+#if defined(__NR_RAT__)                
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                kal_sprintf((kal_char*)tst_inject->string, "NL1_TX_SR_306:");
+                tst_inject->string[14] = data_str[0];
+                tst_inject->string[15] = data_str[1];
+                tst_inject->string[16] = data_str[2];
+                tst_inject->string[17] = data_str[3];
+                    
+                msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+#endif
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+        case 307:
+        {
+            kal_uint8 which_sim = l4c_current_mod_id - MOD_L4C; 
+
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                tst_inject->index = 3;
+                tst_inject->string[0] = data_str[0];
+                tst_inject->string[1] = data_str[1];
+                tst_inject->string[2] = data_str[2];
+                    
+                msg_send5(MOD_L4C + which_sim, MOD_UPCM + which_sim, 0,
+                    MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        } 
+        case 308:/*CMD EX:
+        					 AT+EGCMD = 308, 5, "AABBCCFFFF"
+        					 AA/BB/CC=0xFF: time setting off
+        					 AA/BB/CC>0: config as the setting value AA/BB/CC
+        					 FFFF: effective time for the game
+        					 e.g. AT+EGCMD =300,3,"" 
+        					 => Enable , RSRP = 0xFF88 (-120 dBm),RSRQ = 0xFFF6 (-10 dB)*/
+        {
+            if (data_len == 5)
+            {
+                tst_module_string_inject_struct *tst_inject_erlcul, *tst_inject_erlcdl;
+
+                tst_inject_erlcdl = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                tst_inject_erlcdl->index = 1;
+                tst_inject_erlcdl->string[0] = data_str[1];
+                tst_inject_erlcdl->string[1] = data_str[2];
+                tst_inject_erlcdl->string[2] = data_str[3];
+                tst_inject_erlcdl->string[3] = data_str[4];
+
+                msg_send5(MOD_L4C, MOD_ERLCDL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_erlcdl);
+                
+                tst_inject_erlcul = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                tst_inject_erlcul->index = 0;
+                tst_inject_erlcul->string[0] = data_str[0];
+                tst_inject_erlcul->string[1] = data_str[3];
+                tst_inject_erlcul->string[2] = data_str[4];
+                
+                msg_send5(MOD_L4C, MOD_ERLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_erlcul);
+            }
+            
+            ret_val = KAL_TRUE;       
+            break;
+        }
+        case 309:
+        {
+            if (data_len == 4)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                kal_sprintf((kal_char*)tst_inject->string, "emac309:");
+                tst_inject->string[8]  = data_str[0];
+                tst_inject->string[9]  = data_str[1];
+                tst_inject->string[10] = data_str[2];
+                tst_inject->string[11] = data_str[3];
+                    
+                msg_send5(MOD_L4C, MOD_EMAC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+				
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }   
+        case 310:
+        {                 
+            // AT+EGCMD = 310, 4, "00FF0100"
+            // data_len = 4
+            // data_str[0] = 0x00
+            // data_str[1] = 0xFF
+            // data_str[2] = 0x01
+            // data_str[3] = 0x00
+
+            if (data_len == 4)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                kal_sprintf((kal_char*)tst_inject->string, "emac310:");
+                tst_inject->string[8]  = data_str[0];
+                tst_inject->string[9]  = data_str[1];
+                tst_inject->string[10] = data_str[2];
+                tst_inject->string[11] = data_str[3];
+                 
+                msg_send5(MOD_L4C, MOD_EMAC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+                            
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+        case 311:
+        {                 
+            // AT+EGCMD = 311, 4, "00AABBCC"
+            // data_len = 4
+            // data_str[0] = 0x00
+            // data_str[1] = 0xAA
+            // data_str[2] = 0xBB
+            // data_str[3] = 0xCC
+
+            if (data_len == 4)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                tst_inject->index = 223;
+                kal_sprintf((kal_char*)tst_inject->string, "enpdcp311:");
+                tst_inject->string[10] = data_str[0];
+                tst_inject->string[11] = data_str[1];
+                tst_inject->string[12] = data_str[2];
+                tst_inject->string[13] = data_str[3];
+                msg_send5(MOD_L4C, MOD_ENPDCP, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+        case 312:
+        {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                strncpy((kal_char*)tst_inject->string, "KGOpt_dynamic_cqi", strlen("KGOpt_dynamic_cqi"));
+
+                tst_inject->index = data_str[0];
+                    
+                msg_send5(MOD_L4C, MOD_EL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+            
+            ret_val = KAL_TRUE;       
+            break;
+        }
+        case 313:
+        {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                strncpy((kal_char*)tst_inject->string, "KGOpt_force_ri", strlen("KGOpt_force_ri"));
+
+                tst_inject->index = data_str[0];
+                    
+                msg_send5(MOD_L4C, MOD_EL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+            
+            ret_val = KAL_TRUE;       
+            break;
+        }
+        case 314:
+        {
+#if defined(__NR_RAT__)
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                strncpy((kal_char*)tst_inject->string, "nmac_314", strlen("nmac_314"));
+
+                tst_inject->index = data_str[0];
+
+                msg_send5(MOD_L4C, MOD_NMAC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+#endif
+
+            ret_val = KAL_TRUE;
+            break;
+        }
+        case 315:
+        {
+            if (data_len == 1)
+            {
+                //recursive case, must use with care!!!
+                kal_uint8 data_arr[6];
+                
+                if(data_str[0]==1 || data_str[0]==2)
+                {
+                    //AT+EGCMD = 308, 5, "281E19FFFF"
+                    data_arr[0]=40, data_arr[1]=30, data_arr[2]=25, data_arr[3]=data_arr[4]=255;
+                    rmmi_general_command_parsing(308,5,data_arr);
+                    
+                    //AT+EGCMD = 322, 6, "140514FFFFFF"
+                    //data_arr[0]=20, data_arr[1]=5, data_arr[2]=20, data_arr[3]=data_arr[4]=data_arr[5]=255;
+                    //rmmi_general_command_parsing(322,6,data_arr);
+
+                    //AT+EGCMD = 309, 4, "0032FFFF"
+                    data_arr[0]=0, data_arr[1]=20, data_arr[2]=255, data_arr[3]=255;
+                    rmmi_general_command_parsing(309,4,data_arr);
+
+                    //AT+EGCMD = 310, 4, "FFFF0200"
+                    data_arr[0]=255, data_arr[1]=255, data_arr[2]=2, data_arr[3]=0;
+                    rmmi_general_command_parsing(310,4,data_arr);
+
+                    //AT+EGCMD = 352, 4, "FFFF0200"
+                    data_arr[0]=255, data_arr[1]=255, data_arr[2]=2, data_arr[3]=0;
+                    rmmi_general_command_parsing(352,4,data_arr);
+
+                    //AT+EGCMD = 311, 4, "01F4FFFF"
+                    data_arr[0]=1, data_arr[1]=244, data_arr[2]=255, data_arr[3]=255;
+                    rmmi_general_command_parsing(311,4,data_arr);
+
+                    //AT+EGCMD = 320, 2, "0190"
+                    data_arr[0]=1, data_arr[1]=144;
+                    rmmi_general_command_parsing(320,2,data_arr);
+
+                    //AT+EGCMD = 340, 1, "01"
+                    data_arr[0]=1;
+                    rmmi_general_command_parsing(340,1,data_arr);
+
+                    //AT+EGCMD = 341, 1, "01"
+                    data_arr[0]=1;
+                    rmmi_general_command_parsing(341,1,data_arr);
+
+                    //AT+EGCMD = 90, 1, "02"
+                    data_arr[0]=2;
+                    rmmi_general_command_parsing(90,1,data_arr);
+
+					//AT+EGCMD = 479, 1, "01"
+                    data_arr[0]=1;
+                    rmmi_general_command_parsing(479,1,data_arr);
+                    
+                    //AT+EGCMD = 480, 1, "01"
+                    data_arr[0]=1;
+                    rmmi_general_command_parsing(480,1,data_arr);
+
+                    if(data_str[0]==2)
+                    {
+                        //turn on level2 optimization
+
+                        //AT+EGCMD = 303, 1, "02"
+                        data_arr[0]=2;
+                        rmmi_general_command_parsing(303,1,data_arr);
+                        
+                        //AT+EGCMD = 321, 1, "02"
+                        //data_arr[0]=2;
+                        //rmmi_general_command_parsing(321,1,data_arr);
+
+                        //AT+EGCMD = 305, 1, "01"
+                        data_arr[0]=1;
+                        rmmi_general_command_parsing(305,1,data_arr);
+
+                        //AT+EGCMD = 312, 1, "32"
+                        data_arr[0]=50;
+                        rmmi_general_command_parsing(312,1,data_arr);
+
+                        //AT+EGCMD = 313, 1, "31"
+                        data_arr[0]=49;
+                        rmmi_general_command_parsing(313,1,data_arr);
+
+                        //AT+EGCMD = 314,1,"1"
+                        //data_arr[0]=1;
+                        //rmmi_general_command_parsing(314,1,data_arr);
+
+                    }
+                    else
+                    {
+                        //turn off level2 optimization
+                        data_arr[0]=2;
+                        rmmi_general_command_parsing(305,1,data_arr);                        
+                        
+                        data_arr[0]=data_arr[1]=data_arr[2]=data_arr[3]=0;
+                        rmmi_general_command_parsing(303,1,data_arr);
+                        rmmi_general_command_parsing(312,1,data_arr);
+                        rmmi_general_command_parsing(313,1,data_arr);
+                        //rmmi_general_command_parsing(314,1,data_arr);
+                    }
+                }
+                else if(data_str[0]==0)
+                {
+                    data_arr[0]=2;
+                    rmmi_general_command_parsing(305,1,data_arr);
+
+                    data_arr[0]=data_arr[1]=data_arr[2]=data_arr[3]=data_arr[4]=0;
+                    rmmi_general_command_parsing(303,1,data_arr);
+                    rmmi_general_command_parsing(308,5,data_arr);
+                    rmmi_general_command_parsing(309,4,data_arr);
+                    rmmi_general_command_parsing(310,4,data_arr);
+                    rmmi_general_command_parsing(311,4,data_arr);
+                    rmmi_general_command_parsing(312,1,data_arr);
+                    rmmi_general_command_parsing(313,1,data_arr);
+                    //rmmi_general_command_parsing(314,1,data_arr);
+                    rmmi_general_command_parsing(320,2,data_arr);
+                    rmmi_general_command_parsing(340,1,data_arr);
+                    rmmi_general_command_parsing(341,1,data_arr);
+					rmmi_general_command_parsing(352,1,data_arr);
+                    rmmi_general_command_parsing(479,1,data_arr);
+                    rmmi_general_command_parsing(480,1,data_arr);
+
+                    data_arr[0]=3;
+                    rmmi_general_command_parsing(90,1,data_arr);
+
+                }
+                
+            } 
+            ret_val = KAL_TRUE;       
+            break;
+        }
+        case 316:
+        {
+#if defined(__NR_RAT__)
+            // AT+EGCMD = 316, 1, "0X"
+            // data_len = 1
+            // data_str[0] = 0x0X
+            // data_str[0] == 0 -> turn OFF 316
+            // data_str[0] > 0  -> turn ON 316
+
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                strncpy((kal_char*)tst_inject->string, "atcmd_disable_316", strlen("atcmd_disable_316"));
+                tst_inject->index = data_str[0];
+
+                msg_send5(MOD_L4C, MOD_NMAC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+#endif
+
+            ret_val = KAL_TRUE;
+            break;
+        }
+        case 317:
+        {
+            if (data_len == 8)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+ 
+                kal_sprintf((kal_char*)tst_inject->string, "emac317:");
+                tst_inject->string[8]  = data_str[0];
+                tst_inject->string[9]  = data_str[1];
+                tst_inject->string[10] = data_str[2];
+                tst_inject->string[11] = data_str[3];
+                tst_inject->string[12] = data_str[4];
+                tst_inject->string[13] = data_str[5];
+                tst_inject->string[14] = data_str[6];
+                tst_inject->string[15] = data_str[7];
+                   
+                msg_send5(MOD_L4C, MOD_EMAC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }              
+        case 318:
+        {
+#ifdef __LTE_RAT__
+            //customize LTE paging cycle in virtual mode for non-data SIM
+            //turn off        => AT+EGCMD = 318,1,"00"
+            //turn on, 320ms  => AT+EGCMD = 318,1,"01"
+            //turn on, 640ms  => AT+EGCMD = 318,1,"02"
+            //turn on, 1280ms => AT+EGCMD = 318,1,"03"
+            //turn on, 2560ms => AT+EGCMD = 318,1,"04"
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)construct_local_para(sizeof(tst_module_string_inject_struct), TD_RESET);
+                strncpy((kal_char*)tst_inject->string, "KGOpt_custom_paging_cycle", strlen("KGOpt_custom_paging_cycle"));
+                tst_inject->index = (data_str[0] & 0x0F);
+                msg_send5(MOD_L4C, MOD_ERRC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+#endif
+            ret_val = KAL_TRUE;
+            break;
+        }     
+        case 319:
+        {
+            // AT+EGCMD = 319, 6, "010203040506" (backward compatible to Gen95 command)
+            if (data_len == 6)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                tst_inject->index = 222;
+                kal_sprintf((kal_char*)tst_inject->string, "enpdcp319:");
+                tst_inject->string[10] = data_str[0];
+                tst_inject->string[11] = data_str[1];
+                tst_inject->string[12] = data_str[2];
+                tst_inject->string[13] = data_str[3];
+                tst_inject->string[14] = data_str[4];
+                tst_inject->string[15] = data_str[5];
+                tst_inject->string[16] = 1;            // the seventh byte, 00: both lTE/NR, 01: LTE only
+                msg_send5(MOD_L4C, MOD_ENPDCP, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+
+            ret_val = KAL_TRUE;
+            break;
+        }
+        case 320:
+        {                 
+            // AT+EGCMD = 320, 2, "00AA"
+            // data_len = 2
+            // data_str[0] = 0x00
+            // data_str[1] = 0xAA
+
+            if (data_len == 2)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                tst_inject->index = 233;
+                kal_sprintf((kal_char*)tst_inject->string, "enpdcp320:");
+                tst_inject->string[10] = data_str[0];
+                tst_inject->string[11] = data_str[1];
+
+                msg_send5(MOD_L4C, MOD_ENPDCP, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+#if defined(__NR_RAT__)        
+        case 321:
+        {                 
+            // AT+EGCMD = 321, 1, "10"
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                strncpy((kal_char*)tst_inject->string, "NL1_TXPWR_TPB_CMD_EN", strlen("NL1_TXPWR_TPB_CMD_EN"));
+                tst_inject->index = data_str[0];
+                msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+#endif       
+        case 322:
+        /*CMD EX:
+        					 AT+EGCMD = 322, 5, "AABBCCDDFFFF"
+        					 AA/BB/CC=0xFF: time setting off */
+        {
+#if defined(__NR_RAT__)        
+            if (data_len == 6)
+            {
+                tst_module_string_inject_struct *tst_inject_nrlcul, *tst_inject_nrlcdl;
+
+                tst_inject_nrlcdl = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                kal_sprintf((kal_char*)tst_inject_nrlcdl->string, "nrlcdl322:");
+                tst_inject_nrlcdl->index = 0;
+                tst_inject_nrlcdl->string[10] = data_str[1];
+                tst_inject_nrlcdl->string[11] = data_str[2];
+                tst_inject_nrlcdl->string[12] = data_str[4];
+				tst_inject_nrlcdl->string[13] = data_str[5];
+
+                msg_send5(MOD_L4C, MOD_NRLCDL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_nrlcdl);
+                
+                tst_inject_nrlcul = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                kal_sprintf((kal_char*)tst_inject_nrlcul->string, "nrlcul322:");
+                tst_inject_nrlcul->index = 0;
+                tst_inject_nrlcul->string[10] = data_str[0];
+				tst_inject_nrlcul->string[11] = data_str[3];
+                tst_inject_nrlcul->string[12] = data_str[4];
+                tst_inject_nrlcul->string[13] = data_str[5];
+                
+                msg_send5(MOD_L4C, MOD_NRLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_nrlcul);
+            }
+#endif       
+            ret_val = KAL_TRUE;       
+            break;
+        }
+#if defined(__GEMINI_GAP_CUSTOMIZATION__) 
+
+        case 323:
+        {
+            /*CMD EX:
+        					 AT+EGCMD = 323, 2, "0104"  CUSTOM Threshold enabled, with sinr threshold = 4, 
+        					 AT+EGCMD = 323, 2, "0001"  CUSTOM Threshold disable
+        					 rs-sinr offset is kept for future use 
+ 																	*/
+            if (data_len == 2)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)construct_local_para(sizeof(tst_module_string_inject_struct), TD_RESET);
+                tst_inject->index = data_str[0];
+                kal_sprintf((kal_char*)tst_inject->string, "VIDLE_CUSTOM_RESEL_PARAMETER,%d", data_str[1]);
+                msg_send5(MOD_L4C, MOD_ERRC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+
+        #if defined(__GEMINI_LTE__)
+                tst_module_string_inject_struct *tst_inject_2;
+                tst_inject_2 = (tst_module_string_inject_struct *)construct_local_para(sizeof(tst_module_string_inject_struct), TD_RESET);
+                tst_inject_2->index = data_str[0];
+                kal_sprintf((kal_char*)tst_inject_2->string, "VIDLE_CUSTOM_RESEL_PARAMETER,%d", data_str[1]);
+                msg_send5(MOD_L4C_2, MOD_ERRC_2, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_2);
+        #endif
+
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+
+		case 325:/*CMD EX:
+							 AT+EGCMD = 325, 3, "01AABB"   enable
+							 AT+EGCMD = 325, 3, "00AABB"   disable
+							 data_str[0] = 0x01/0x00  on/off
+            				 data_str[1] = 0xAA  + : 01/- 00
+							 data_str[2] = 0xBB  snr
+																	*/
+		{
+			if (data_len == 3)
+			{
+				 tst_module_string_inject_struct *tst_inject_sim1;
+				tst_inject_sim1 = (tst_module_string_inject_struct *)
+					construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                kal_sprintf((kal_char*)tst_inject_sim1->string, "mpc:325:");
+				tst_inject_sim1->index = data_str[0];
+	            tst_inject_sim1->string[8] = data_str[1];
+	            tst_inject_sim1->string[9] = data_str[2];				
+				msg_send5(MOD_L4C, MOD_EL1_MPC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim1);
+				
+				#if defined(__GEMINI_LTE__)
+				tst_module_string_inject_struct *tst_inject_sim2;
+				tst_inject_sim2 = (tst_module_string_inject_struct *)
+					construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                kal_sprintf((kal_char*)tst_inject_sim2->string, "mpc:325:");
+				tst_inject_sim2->index = data_str[0];
+	            tst_inject_sim2->string[8] = data_str[1];
+	            tst_inject_sim2->string[9] = data_str[2];	
+				msg_send5(MOD_L4C_2, MOD_EL1_MPC_2, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim2);
+				#endif
+				
+			}
+
+			ret_val = KAL_TRUE; 	  
+			break;
+		}
+		case 326:/*CMD EX:
+           data_str[0] = 0x00/0x01/0x02/0x03  mapping to pre-sync mode 0/1/2/3
+			 AT+EGCMD = 326, 1, "00"   force RX_PRE_SYNC_NORMAL_MODE
+			 AT+EGCMD = 326, 1, "01"   force RX_PRE_SYNC_FAST_MODE
+ 			 AT+EGCMD = 326, 1, "02"   force RX_PRE_SYNC_PROGRESSIVE_MODE
+			 AT+EGCMD = 326, 1, "03"   force RX_PRE_SYNC_GGC_FAST_MODE
+			 others                    reset
+			   */
+		{
+			if (data_len == 1)
+			{
+				tst_module_string_inject_struct *tst_inject_sim1;
+				tst_inject_sim1 = (tst_module_string_inject_struct *)
+					construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                kal_sprintf((kal_char*)tst_inject_sim1->string, "EL1D_RX_FORCE_PSYNC_MODE");
+				tst_inject_sim1->index = data_str[0];
+				msg_send5(MOD_L4C, MOD_EL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim1);
+			}
+
+			ret_val = KAL_TRUE; 	  
+			break;
+		}
+
+        case 327:
+        {
+            /*CMD EX:
+        					 AT+EGCMD = 327, 1, "00"  GEMINI_GAP_CUSTOMIZATION(GGC) disabled
+        					 AT+EGCMD = 327, 1, "01"  GGC level 1 enabled 
+        					 AT+EGCMD = 327, 1, "02"  GGC level 2 enabled 
+        					 AT+EGCMD = 327, 1, "03"  GGC level 3 enabled 
+        					 AT+EGCMD = 327, 1, "04"  GGC level 4 enabled 
+ 																	*/
+ 			if (data_len == 1)
+            {
+                /*
+                                    RCR   RIFM    FPF
+                        level 0     OFF    OFF    OFF
+                        level 1      10       20     ON
+                        level 2       5       15     ON
+                        level 3       0       10     ON
+                        level 4       0        5     ON
+                                                            */
+                kal_uint8 data_RCR[2];
+                kal_uint8 data_RIFM[3];
+                kal_uint8 data_FPF;
+				/*Gemini Gap Customization AT command level*/
+				#define LEVEL_0 0
+				#define LEVEL_1 1
+				#define LEVEL_2 2
+				#define LEVEL_3 3
+				#define LEVEL_4 4
+				/*Patch RCR/RIFM/FPF ON or OFF*/
+				#define RCR_OFF  (0) 
+				#define RCR_ON   (1) 
+				#define RIFM_OFF (0) 
+				#define RIFM_ON  (1)
+				#define FPF_OFF  (4) 
+				#define FPF_ON   (3) 
+				/*Patch unused field value*/
+				#define DEFAULT_VALUE (0)
+				/*RCR AT command threshold*/   		
+				#define LEVEL_1_RCR_SINR_THRES (10)	 		//Unit: db
+				#define LEVEL_2_RCR_SINR_THRES (5)     		//Unit: db
+				#define LEVEL_3_RCR_SINR_THRES (0)     		//Unit: db
+				#define LEVEL_4_RCR_SINR_THRES (0)     		//Unit: db
+				/*RIFM AT command threshold*/
+				#define LEVEL_1_RIFM_SINR_THRES_SIGN (1)      /* 1: THRES >=0, 0: THRES <0 */
+				#define LEVEL_1_RIFM_SINR_THRES      (20)     //Unit: db
+				#define LEVEL_2_RIFM_SINR_THRES_SIGN (1)      /* 1: THRES >=0, 0: THRES <0 */
+				#define LEVEL_2_RIFM_SINR_THRES      (15)     //Unit: db
+				#define LEVEL_3_RIFM_SINR_THRES_SIGN (1)      /* 1: THRES >=0, 0: THRES <0 */
+				#define LEVEL_3_RIFM_SINR_THRES      (10)     //Unit: db
+				#define LEVEL_4_RIFM_SINR_THRES_SIGN (1)      /* 1: THRES >=0, 0: THRES <0 */
+				#define LEVEL_4_RIFM_SINR_THRES      (5)      //Unit: db
+				/*Patch FPF Setting*/   		
+				#define LEVEL_1_FPF_SETTING (FPF_ON)	 		
+				#define LEVEL_2_FPF_SETTING (FPF_ON)    		
+				#define LEVEL_3_FPF_SETTING (FPF_ON)     		
+				#define LEVEL_4_FPF_SETTING (FPF_ON)   
+                switch (data_str[0])
+                {
+                    
+                    case LEVEL_0:
+                        data_RCR[0] = RCR_OFF, data_RCR[1] = DEFAULT_VALUE;
+                        data_RIFM[0] = RIFM_OFF, data_RIFM[1] = DEFAULT_VALUE, data_RIFM[2] = DEFAULT_VALUE;
+                        data_FPF = FPF_OFF;
+                        break;
+                    case LEVEL_1:
+                        data_RCR[0] = RCR_ON, data_RCR[1] = LEVEL_1_RCR_SINR_THRES;
+                        data_RIFM[0] = RIFM_ON, data_RIFM[1] = LEVEL_1_RIFM_SINR_THRES_SIGN, data_RIFM[2] = LEVEL_1_RIFM_SINR_THRES;
+                        data_FPF = LEVEL_1_FPF_SETTING;
+                        break;
+                    case LEVEL_2:
+                        data_RCR[0] = RCR_ON, data_RCR[1] = LEVEL_2_RCR_SINR_THRES;
+                        data_RIFM[0] = RIFM_ON, data_RIFM[1] = LEVEL_2_RIFM_SINR_THRES_SIGN, data_RIFM[2] = LEVEL_2_RIFM_SINR_THRES;
+                        data_FPF = LEVEL_2_FPF_SETTING;
+                        break;
+                    case LEVEL_3:
+                        data_RCR[0] = RCR_ON, data_RCR[1] = LEVEL_3_RCR_SINR_THRES;
+                        data_RIFM[0] = RIFM_ON, data_RIFM[1] = LEVEL_3_RIFM_SINR_THRES_SIGN, data_RIFM[2] = LEVEL_3_RIFM_SINR_THRES;
+                        data_FPF = LEVEL_3_FPF_SETTING;
+                        break;
+                    case LEVEL_4:
+                        data_RCR[0] = RCR_ON, data_RCR[1] = LEVEL_4_RCR_SINR_THRES;
+                        data_RIFM[0] = RIFM_ON, data_RIFM[1] = LEVEL_4_RIFM_SINR_THRES_SIGN, data_RIFM[2] = LEVEL_4_RIFM_SINR_THRES;
+                        data_FPF = LEVEL_4_FPF_SETTING;
+                        break;
+                    default:
+                        data_RCR[0] = RCR_OFF,data_RCR[1] = DEFAULT_VALUE;
+                        data_RIFM[0] = RIFM_OFF, data_RIFM[1] = DEFAULT_VALUE, data_RIFM[2] = DEFAULT_VALUE;
+                        data_FPF = FPF_OFF;
+                        break;
+                    
+                }
+                
+                rmmi_general_command_parsing(323, 2, data_RCR);
+                rmmi_general_command_parsing(325, 3, data_RIFM);
+                rmmi_general_command_parsing(326, 1, &data_FPF);
+            }
+            ret_val = KAL_TRUE; 	  
+			break;
+ 																	
+        }  
+#endif /* __GEMINI_GAP_CUSTOMIZATION__ */
+        case 328:
+        {
+#if defined(__NR_RAT__)
+            if (data_len == 5)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                kal_sprintf((kal_char*)tst_inject->string, "NL1_TX_SR_323:");
+                tst_inject->string[14] = data_str[0];
+                tst_inject->string[15] = data_str[1];
+                tst_inject->string[16] = data_str[2];
+                tst_inject->string[17] = data_str[3];
+                tst_inject->string[18] = data_str[4];
+                    
+                msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+#endif
+            ret_val = KAL_TRUE;       
+            break;
+        }
+        case 330:
+        {                 
+            // AT+EGCMD = 330, 3, "00AABB"
+            // data_len = 3
+            // data_str[0] = 0x00
+            // data_str[1] = 0xAA
+            // data_str[2] = 0xBB
+
+            if (data_len == 3)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                tst_inject->index = 244;
+                kal_sprintf((kal_char*)tst_inject->string, "enpdcp330:");
+                tst_inject->string[10] = data_str[0];
+                tst_inject->string[11] = data_str[1];
+                tst_inject->string[12] = data_str[2];
+
+                msg_send5(MOD_L4C, MOD_ENPDCP, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+        case 331:
+        {                 
+            // AT+EGCMD = 331, 1, "00"
+            // data_len = 1
+            // data_str[0] = 0x00
+
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                tst_inject->index = 255;
+                kal_sprintf((kal_char*)tst_inject->string, "enpdcp331:");
+                tst_inject->string[10] = data_str[0];
+
+                msg_send5(MOD_L4C, MOD_ENPDCP, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+        case 332:
+        {
+#if defined(__NR_RAT__)			
+            if (data_len == 4)
+            {             
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                kal_sprintf((kal_char*)tst_inject->string, "nmac309:");
+                tst_inject->string[8]  = data_str[0];
+                tst_inject->string[9]  = data_str[1];
+                tst_inject->string[10] = data_str[2];
+                tst_inject->string[11] = data_str[3];
+                    
+                msg_send5(MOD_L4C, MOD_NMAC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);               
+            }
+#endif 	
+            ret_val = KAL_TRUE;       
+            break;
+        }   
+        case 333:
+        {				  
+            // AT+EGCMD = 333, 4, "00FF0100"
+            // data_len = 4
+            // data_str[0] = 0x00
+            // data_str[1] = 0xFF
+            // data_str[2] = 0x01
+            // data_str[3] = 0x00
+#if defined(__NR_RAT__) 		
+            if (data_len == 4)
+            {            
+                tst_module_string_inject_struct *tst_inject;            
+                tst_inject = (tst_module_string_inject_struct *)construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+		
+                kal_sprintf((kal_char*)tst_inject->string, "nmac310:");
+                tst_inject->string[8]  = data_str[0];
+                tst_inject->string[9]  = data_str[1];
+                tst_inject->string[10] = data_str[2];
+                tst_inject->string[11] = data_str[3];
+						 
+                msg_send5(MOD_L4C, MOD_NMAC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            
+            }
+#endif		
+            ret_val = KAL_TRUE; 	  
+            break;
+        }
+        case 334:/*CMD EX:
+                                                    AT+EGCMD = 334, 1, "01"  BOP enable
+                                                    AT+EGCMD = 334, 1, "02"  BOP disable
+                                                                                                                                                            */
+        {
+#if defined(__NR_RAT__)		
+            if (data_len == 1)
+            {		
+                tst_module_string_inject_struct *tst_inject_nr_sim1;
+                tst_inject_nr_sim1 = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                strncpy((kal_char*)tst_inject_nr_sim1->string, "NL1_MOB_HO_enh", strlen("NL1_MOB_HO_enh"));
+                tst_inject_nr_sim1->index = data_str[0];
+                msg_send5(MOD_L4C, MOD_NL1_MOB, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_nr_sim1);
+		
+#if defined(__GEMINI__)
+#if (MAX_NR_NUM>=2)
+                tst_module_string_inject_struct *tst_inject_nr_sim2;
+                tst_inject_nr_sim2 = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                strncpy((kal_char*)tst_inject_nr_sim2->string, "NL1_MOB_HO_enh", strlen("NL1_MOB_HO_enh"));
+                tst_inject_nr_sim2->index = data_str[0];
+                msg_send5(MOD_L4C_2, MOD_NL1_MOB_2, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_nr_sim2);
+#endif
+#endif
+            }
+#endif		
+            ret_val = KAL_TRUE; 	  
+            break;
+        }
+        case 335:
+        {
+#if defined(__NR_RAT__)			
+            if (data_len == 8)
+            {
+                tst_module_string_inject_struct *tst_inject;													
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);					 
+                kal_sprintf((kal_char*)tst_inject->string, "nmac317:");
+                tst_inject->string[8]  = data_str[0];
+                tst_inject->string[9]  = data_str[1];
+                tst_inject->string[10] = data_str[2];
+                tst_inject->string[11] = data_str[3];
+                tst_inject->string[12] = data_str[4];
+                tst_inject->string[13] = data_str[5];
+                tst_inject->string[14] = data_str[6];
+                tst_inject->string[15] = data_str[7];
+																	   
+                msg_send5(MOD_L4C, MOD_NMAC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);             
+            }
+#endif													
+            ret_val = KAL_TRUE; 	  
+            break;
+        }
+        case 336:
+        {				  
+            // AT+EGCMD = 336, 1, "01" on
+            // AT+EGCMD = 336, 1, "00" off
+#if defined(__NR_RAT__) 		
+            if (data_len == 1)
+            {				
+                tst_module_string_inject_struct *tst_inject;            
+                tst_inject = (tst_module_string_inject_struct *)construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+				
+                kal_sprintf((kal_char*)tst_inject->string, "gm3_en:");
+                tst_inject->string[7]  = data_str[0];
+				 
+                msg_send5(MOD_L4C, MOD_NMAC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+					
+            }
+#endif		
+            ret_val = KAL_TRUE; 	  
+            break;
+        }	
+        case 337:
+        {
+            if (data_len == 1)
+            {
+                //recursive case, must use with care!!!
+                kal_uint8 data_arr[6];
+                
+                if(data_str[0]==1 || data_str[0]==2)
+                {
+
+                    //AT+EGCMD = 322, 6, "140514FFFFFF"
+                    data_arr[0]=20, data_arr[1]=5, data_arr[2]=20, data_arr[3]=data_arr[4]=data_arr[5]=255;
+                    rmmi_general_command_parsing(322,6,data_arr);
+
+                    //AT+EGCMD = 332, 4, "0032FFFF"
+                    data_arr[0]=0, data_arr[1]=20, data_arr[2]=255, data_arr[3]=255;
+                    rmmi_general_command_parsing(332,4,data_arr);
+
+                    //AT+EGCMD = 333, 4, "FFFF0200"
+                    data_arr[0]=255, data_arr[1]=255, data_arr[2]=2, data_arr[3]=0;
+                    rmmi_general_command_parsing(333,4,data_arr);
+
+                    //AT+EGCMD = 311, 4, "01F4FFFF"
+                    data_arr[0]=1, data_arr[1]=244, data_arr[2]=255, data_arr[3]=255;
+                    rmmi_general_command_parsing(311,4,data_arr);
+
+                    //AT+EGCMD = 320, 2, "0190"
+                    data_arr[0]=1, data_arr[1]=144;
+                    rmmi_general_command_parsing(320,2,data_arr);
+
+                    if(data_str[0]==2)
+                    {
+                        //turn on level2 optimization
+
+                        //AT+EGCMD = 321, 1, "02"
+                        data_arr[0]=2;
+                        rmmi_general_command_parsing(321,1,data_arr); 
+
+                        //AT+EGCMD = 334, 1, "01"
+                        data_arr[0]=1;
+                        rmmi_general_command_parsing(334,1,data_arr);
+
+                        //AT+EGCMD = 314,1,"1"
+                        //data_arr[0]=1;
+                        //rmmi_general_command_parsing(314,1,data_arr);
+
+                    }
+                    else
+                    {
+                        //turn off level2 optimization
+                        data_arr[0]=2;
+                        rmmi_general_command_parsing(334,1,data_arr);                        
+                        
+                        data_arr[0]=data_arr[1]=data_arr[2]=data_arr[3]=0;
+                        rmmi_general_command_parsing(321,1,data_arr);
+                    }
+                }
+                else if(data_str[0]==0)
+                {
+                    data_arr[0]=2;
+                    rmmi_general_command_parsing(334,1,data_arr);                     
+                    
+                    data_arr[0]=data_arr[1]=data_arr[2]=data_arr[3]=data_arr[4]=0;
+                    rmmi_general_command_parsing(321,1,data_arr);
+                    rmmi_general_command_parsing(322,6,data_arr);
+                    rmmi_general_command_parsing(332,4,data_arr);
+                    rmmi_general_command_parsing(333,4,data_arr);
+                    rmmi_general_command_parsing(311,4,data_arr);
+                    //rmmi_general_command_parsing(314,1,data_arr);
+                    rmmi_general_command_parsing(320,2,data_arr);
+                }
+                
+            } 
+            ret_val = KAL_TRUE;       
+            break;
+      }
+      case 338:
+      {
+            // AT+EGCMD = 338, 6, "010203040506" (backward compatible to Gen95 command)
+            if (data_len == 6)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                tst_inject->index = 222;
+                kal_sprintf((kal_char*)tst_inject->string, "enpdcp319:");
+                tst_inject->string[10] = data_str[0];
+                tst_inject->string[11] = data_str[1];
+                tst_inject->string[12] = data_str[2];
+                tst_inject->string[13] = data_str[3];
+                tst_inject->string[14] = data_str[4];
+                tst_inject->string[15] = data_str[5];
+                tst_inject->string[16] = 0;            // the seventh byte, 00: both lTE/NR, 01: LTE only
+                msg_send5(MOD_L4C, MOD_ENPDCP, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+
+            ret_val = KAL_TRUE;
+            break;
+      }
+      case 339:
+      {                 
+          // AT+EGCMD = 339, 7, "00FF0100010203"
+          // data_len = 7
+          // data_str[0] = 0x00
+          // data_str[1] = 0xFF
+          // data_str[2] = 0x01
+          // data_str[3] = 0x00
+          // data_str[4] = 0x01
+          // data_str[5] = 0x02
+          // data_str[6] = 0x03
+
+          if (data_len == 7)
+          {
+              tst_module_string_inject_struct *tst_inject;
+              tst_inject = (tst_module_string_inject_struct *)construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+              kal_sprintf((kal_char*)tst_inject->string, "emac339:");
+              tst_inject->string[8] = data_str[0];
+              tst_inject->string[9] = data_str[1];
+              tst_inject->string[10] = data_str[2];
+              tst_inject->string[11] = data_str[3];
+              tst_inject->string[12] = data_str[4];
+              tst_inject->string[13] = data_str[5];
+              tst_inject->string[14] = data_str[6];
+                 
+              msg_send5(MOD_L4C, MOD_EMAC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+                            
+          }
+
+          ret_val = KAL_TRUE;       
+          break;
+      }
+      case 340:
+      {                 
+          // AT+EGCMD = 340, 1, "00" or "01"
+          // data_len = 1
+          // data_str[0] = 0 or 1
+
+          //Get DATA SIM PS _ID
+          kal_int8 ps_id = rmmi_get_data_ps_id();
+          tst_module_string_inject_struct *tst_inject;
+          tst_inject = (tst_module_string_inject_struct *)
+            construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+          tst_inject->index = ps_id;
+          if (data_len == 1 && ps_id != -1)
+          {
+              if(data_str[0]==0)
+              {
+                  //Disable last pdn feature
+                  strncpy((kal_char*)tst_inject->string, "disable", strlen("disable"));
+              }
+              else if(data_str[0]==1)
+              {
+                  //Enable last pdn feature
+                  strncpy((kal_char*)tst_inject->string, "enable", strlen("enable"));
+              }
+              msg_send5(MOD_L4C, MOD_DDM, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+          }
+          else
+          {
+              //Disable last pdn feature
+              strncpy((kal_char*)tst_inject->string, "disable", strlen("disable"));
+              msg_send5(MOD_L4C, MOD_DDM, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+          }
+          ret_val = KAL_TRUE;       
+          break;
+      }
+      case 341:
+      {
+          // AT+EGCMD = 341, 1, "00" or "01"
+          // data_len = 1
+          // data_str[0] = 0 or 1
+
+          //Get DATA SIM PS _ID
+          kal_int8 ps_id = rmmi_get_data_ps_id();
+          tst_module_string_inject_struct *tst_inject;
+          tst_inject = (tst_module_string_inject_struct *)
+            construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+          tst_inject->index = ps_id;
+          if (data_len == 1 && ps_id != -1)
+          {
+              if(data_str[0]==0)
+              {
+                  strncpy((kal_char*)tst_inject->string, "nmac341:0", strlen("nmac341:0"));
+              }
+              else if(data_str[0]==1)
+              {
+                  strncpy((kal_char*)tst_inject->string, "nmac341:1", strlen("nmac341:1"));
+              }
+              msg_send5(MOD_L4C, MOD_NMAC + ps_id, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+          }
+          else
+          {
+              strncpy((kal_char*)tst_inject->string, "nmac341:0", strlen("nmac341:0"));
+              msg_send5(MOD_L4C, MOD_NMAC + ps_id, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+          }
+          ret_val = KAL_TRUE;       
+          break;
+      }
+	    case 342:/*CMD EX:
+        					 AT+EGCMD = 342, 1, "0000000000",  Force IC disable
+        					 AT+EGCMD = 342, 5, "01009B0172",  Force IC PCI value in hex format. 
+        					                               009B as PCI 155 0172 as PCI 370
+				*/
+        {
+            if (data_len == 5)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)construct_local_para(sizeof(tst_module_string_inject_struct), TD_RESET);
+                kal_sprintf((kal_char*)tst_inject->string, "FORCE_IC");
+				tst_inject->index = data_str[0];
+				tst_inject->string[8] = data_str[1];	
+	            tst_inject->string[9] = data_str[2];	
+	            tst_inject->string[10] = data_str[3];
+	            tst_inject->string[11] = data_str[4];
+                msg_send5(MOD_L4C, MOD_EL1_MPC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+
+        #if defined(__GEMINI_LTE__)
+                tst_module_string_inject_struct *tst_inject_2;
+                tst_inject_2 = (tst_module_string_inject_struct *)construct_local_para(sizeof(tst_module_string_inject_struct), TD_RESET);
+                kal_sprintf((kal_char*)tst_inject_2->string, "FORCE_IC");
+				tst_inject_2->index = data_str[0];
+				tst_inject_2->string[8] = data_str[1];					
+	            tst_inject_2->string[9] = data_str[2];	
+	            tst_inject_2->string[10] = data_str[3];
+	            tst_inject_2->string[11] = data_str[4];
+                msg_send5(MOD_L4C_2, MOD_EL1_MPC_2, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_2);
+        #endif
+            }
+            ret_val = KAL_TRUE;       
+            break;
+        }
+      case 343:
+      {
+          // AT+EGCMD = 343, 1, "01"  HST Enc enable
+          // AT+EGCMD = 343, 1, "00"  HST Enc disable
+
+          if (data_len == 1)
+          {
+              tst_module_string_inject_struct *tst_inject_sim1;
+              tst_inject_sim1 = (tst_module_string_inject_struct *)
+              construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                  strncpy((kal_char*)tst_inject_sim1->string, "ERRC_MOB_HST_GAME", strlen("ERRC_MOB_HST_GAME"));
+              tst_inject_sim1->index = data_str[0];
+              msg_send5(MOD_L4C, MOD_ERRC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim1);
+				
+#if defined(__GEMINI_LTE__)
+              tst_module_string_inject_struct *tst_inject_sim2;				
+              tst_inject_sim2 = (tst_module_string_inject_struct *)
+                  construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+              strncpy((kal_char*)tst_inject_sim2->string, "ERRC_MOB_HST_GAME", strlen("ERRC_MOB_HST_GAME"));
+              tst_inject_sim2->index = data_str[0];
+              msg_send5(MOD_L4C_2, MOD_ERRC_2, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim2);
+#endif
+          }
+
+          ret_val = KAL_TRUE;       
+          break;
+      }
+#if defined(__NR_RAT__)
+      case 344:
+      {
+         // AT+EGCMD = 344, 1, "80" 0x80=128, 128 means adj value is 0
+         // AT+EGCMD = 344, 1, "81" 0x81=129, 129 means adj value is +1
+         // AT+EGCMD = 344, 1, "7F" 0x7F=127, 127 means adj value is -1
+         if (data_len == 1)
+         {
+            tst_module_string_inject_struct *tst_inject;
+            tst_inject = (tst_module_string_inject_struct *)
+                          construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+            strncpy((kal_char*)tst_inject->string, "NL1_TXPWR_ADJ_PUSCH", strlen("NL1_TXPWR_ADJ_PUSCH"));
+            tst_inject->index = data_str[0];
+            msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+         }
+
+         ret_val = KAL_TRUE;
+         break;
+      }
+      case 345:
+      {
+         // AT+EGCMD = 345, 1, "80"
+         if (data_len == 1)
+         {
+            tst_module_string_inject_struct *tst_inject;
+            tst_inject = (tst_module_string_inject_struct *)
+                          construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+            strncpy((kal_char*)tst_inject->string, "NL1_TXPWR_ADJ_PUCCH", strlen("NL1_TXPWR_ADJ_PUCCH"));
+            tst_inject->index = data_str[0];
+            msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+         }
+
+         ret_val = KAL_TRUE;
+         break;
+      }
+      case 346:
+      {
+         // AT+EGCMD = 346, 1, "80"
+         if (data_len == 1)
+         {
+            tst_module_string_inject_struct *tst_inject;
+            tst_inject = (tst_module_string_inject_struct *)
+                          construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+            strncpy((kal_char*)tst_inject->string, "NL1_TXPWR_ADJ_PRACH", strlen("NL1_TXPWR_ADJ_PRACH"));
+            tst_inject->index = data_str[0];
+            msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+         }
+
+         ret_val = KAL_TRUE;
+         break;
+      }
+      case 347:
+      {
+         // AT+EGCMD = 347, 1, "80"
+         if (data_len == 1)
+         {
+            tst_module_string_inject_struct *tst_inject;
+            tst_inject = (tst_module_string_inject_struct *)
+                          construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+            strncpy((kal_char*)tst_inject->string, "NL1_TXPWR_ADJ_SRS", strlen("NL1_TXPWR_ADJ_SRS"));
+            tst_inject->index = data_str[0];
+            msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+         }
+
+         ret_val = KAL_TRUE;
+         break;
+      }
+      case 348:
+      {
+         // AT+EGCMD = 348, 1, "0"
+         if (data_len == 1)
+         {
+            tst_module_string_inject_struct *tst_inject;
+            tst_inject = (tst_module_string_inject_struct *)
+                          construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+            strncpy((kal_char*)tst_inject->string, "NL1_TXPWR_FIX_PUSCH", strlen("NL1_TXPWR_FIX_PUSCH"));
+            tst_inject->index = data_str[0];
+            msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+         }
+
+         ret_val = KAL_TRUE;
+         break;
+      }
+      case 349:
+      {
+         // AT+EGCMD = 349, 1, "0"
+         if (data_len == 1)
+         {
+            tst_module_string_inject_struct *tst_inject;
+            tst_inject = (tst_module_string_inject_struct *)
+                          construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+            strncpy((kal_char*)tst_inject->string, "NL1_TXPWR_FIX_PUCCH", strlen("NL1_TXPWR_FIX_PUCCH"));
+            tst_inject->index = data_str[0];
+            msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+         }
+
+         ret_val = KAL_TRUE;
+         break;
+      }
+      case 350:
+      {
+         // AT+EGCMD = 350, 1, "0"
+         if (data_len == 1)
+         {
+            tst_module_string_inject_struct *tst_inject;
+            tst_inject = (tst_module_string_inject_struct *)
+                          construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+            strncpy((kal_char*)tst_inject->string, "NL1_TXPWR_FIX_PRACH", strlen("NL1_TXPWR_FIX_PRACH"));
+            tst_inject->index = data_str[0];
+            msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+         }
+
+         ret_val = KAL_TRUE;
+         break;
+      }
+      case 351:
+      {
+         // AT+EGCMD = 351, 1, "0"
+         if (data_len == 1)
+         {
+            tst_module_string_inject_struct *tst_inject;
+            tst_inject = (tst_module_string_inject_struct *)
+                          construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+            strncpy((kal_char*)tst_inject->string, "NL1_TXPWR_FIX_SRS", strlen("NL1_TXPWR_FIX_SRS"));
+            tst_inject->index = data_str[0];
+            msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+         }
+
+         ret_val = KAL_TRUE;
+         break;
+      }
+      case 352:
+      {                 
+         if (data_len == 4)
+         {
+            tst_module_string_inject_struct *tst_inject;
+            tst_inject = (tst_module_string_inject_struct *)construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+            kal_sprintf((kal_char*)tst_inject->string, "emac352:");
+            tst_inject->string[8]  = data_str[0];
+            tst_inject->string[9]  = data_str[1];
+            tst_inject->string[10] = data_str[2];
+            tst_inject->string[11] = data_str[3];
+				 
+            msg_send5(MOD_L4C, MOD_EMAC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+							
+         }
+
+         ret_val = KAL_TRUE;       
+         break;
+      }
+#endif
+      case 353:
+      {
+            // AT+EGCMD = 353, 1, "00"
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                tst_inject->index = 255;
+                kal_sprintf((kal_char*)tst_inject->string, "enpdcp353:");
+                tst_inject->string[10] = data_str[0];
+
+                msg_send5(MOD_L4C, MOD_ENPDCP, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+
+            ret_val = KAL_TRUE;
+            break;
+      }
+	  case 354:/*AT+EGCMD = 354, 1, "11"  NBI_THR   thr 3*/
+      {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)construct_local_para(sizeof(tst_module_string_inject_struct), TD_RESET);
+                kal_sprintf((kal_char*)tst_inject->string, "NBI_THR");
+				tst_inject->index = data_str[0];												
+                msg_send5(MOD_L4C, MOD_EL1_MPC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+  #if defined(__GEMINI_LTE__)
+                tst_module_string_inject_struct *tst_inject_2;
+                tst_inject_2 = (tst_module_string_inject_struct *)construct_local_para(sizeof(tst_module_string_inject_struct), TD_RESET);
+                kal_sprintf((kal_char*)tst_inject_2->string, "NBI_THR");
+				tst_inject_2->index = data_str[0];												
+                msg_send5(MOD_L4C_2, MOD_EL1_MPC_2, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_2);
+  #endif
+            }
+            ret_val = KAL_TRUE;       
+            break;
+      }
+      case 388:
+      {
+#ifdef __EL1_HWS__
+          // AT+EGCMD=319,100,50tail 
+          // data_len = 100
+          // extra margin = 50
+          extern kal_bool EL1SM_Set_Extra_Settle(kal_uint32 data_len, kal_uint8 *data_str);
+          ret_val = EL1SM_Set_Extra_Settle(data_len, data_str);
+#endif
+          break;
+      }
+      case 390:
+      {
+#ifdef __EL1_HWS__
+          /* 
+            Used to tune SPU timing.
+            Ex.
+            at+egcmd = 390, 200 -> set lead time = 200us.  default lead time is 300us.
+          */
+          extern void spu_set_leadtime_us(kal_uint32 data_len, kal_uint8* data_str);
+          spu_set_leadtime_us(data_len, data_str);
+#endif
+          break;
+      }
+      case 397:
+      {
+            // AT+EGCMD = 397, 1, "AA"
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                tst_inject->index = 255;
+                kal_sprintf((kal_char*)tst_inject->string, "enpdcp397:");
+                tst_inject->string[10] = data_str[0];
+
+                msg_send5(MOD_L4C, MOD_ENPDCP, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+
+            ret_val = KAL_TRUE;
+            break;
+      }
+      case 398:
+      {
+            // AT+EGCMD = 398, 4, "AABBCCDD"
+            if (data_len == 4)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+                tst_inject->index = 255;
+                kal_sprintf((kal_char*)tst_inject->string, "enpdcp398:");
+                tst_inject->string[10] = data_str[0];
+                tst_inject->string[11] = data_str[1];
+                tst_inject->string[12] = data_str[2];
+                tst_inject->string[13] = data_str[3];
+
+                msg_send5(MOD_L4C, MOD_ENPDCP, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+
+            ret_val = KAL_TRUE;
+            break;
+      }
+      case 399:
+			/*CMD EX:
+        					 AT+EGCMD = 399, 1, "01"  Pcell enhancement patch enable
+        					 AT+EGCMD = 399, 1, "02"  Pcell enhancement patch disable
+ 			*/
+        {
+            if (data_len == 1)
+            {
+                 tst_module_string_inject_struct *tst_inject_sim1;
+                tst_inject_sim1 = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                strncpy((kal_char*)tst_inject_sim1->string, "EL1_MPC_PREFER_OTHER_SIM_PCELL_PATCH", strlen("EL1_MPC_PREFER_OTHER_SIM_PCELL_PATCH"));
+                tst_inject_sim1->index = data_str[0];
+                msg_send5(MOD_L4C, MOD_EL1_MPC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim1);
+				
+			#if defined(__GEMINI_LTE__)
+                tst_module_string_inject_struct *tst_inject_sim2;
+				tst_inject_sim2 = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                strncpy((kal_char*)tst_inject_sim2->string, "EL1_MPC_PREFER_OTHER_SIM_PCELL_PATCH", strlen("EL1_MPC_PREFER_OTHER_SIM_PCELL_PATCH"));
+                tst_inject_sim2->index = data_str[0];
+				msg_send5(MOD_L4C_2, MOD_EL1_MPC_2, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim2);
+			#endif
+                
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+        case 400:/*CMD EX:
+        					 AT+EGCMD = 322, 1, "00"  prefer P-SIM cell disable
+        					 AT+EGCMD = 322, 1, "01"  prefer P-SIM cell enable
+ 																	*/
+        {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject_sim1; 
+                tst_inject_sim1 = (tst_module_string_inject_struct *)
+                construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                strncpy((kal_char*)tst_inject_sim1->string, "prefer_PSIM_cell", strlen("prefer_PSIM_cell"));
+                tst_inject_sim1->index = data_str[0];
+                msg_send5(MOD_L4C, MOD_ERRC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim1);
+				
+		#if defined(__GEMINI_LTE__)
+		        tst_module_string_inject_struct *tst_inject_sim2;
+				tst_inject_sim2 = (tst_module_string_inject_struct *)
+				construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+				strncpy((kal_char*)tst_inject_sim2->string, "prefer_PSIM_cell", strlen("prefer_PSIM_cell"));
+				tst_inject_sim2->index = data_str[0];
+				msg_send5(MOD_L4C_2, MOD_ERRC_2, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim2);
+		#endif
+                
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }     
+
+        case 402:/*CMD EX:
+			 AT+EGCMD = 402, 1, "01"  AP trigger ims rereg
+			 AT+EGCMD = 402, 1, "02"  AP trigger ims resub
+			 AT+EGCMD = 402, 1, "03"  AP trigger ims rereg and resub
+														*/
+        {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject_sim1; 
+                tst_inject_sim1 = (tst_module_string_inject_struct *)
+                construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                strncpy((kal_char*)tst_inject_sim1->string, "trigger_interface:", strlen("trigger_interface:"));
+                tst_inject_sim1->string[20] = data_str[0];
+                msg_send5(MOD_L4C, MOD_IMC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim1);
+    #if defined(__GEMINI_LTE__)
+		        tst_module_string_inject_struct *tst_inject_sim2;
+				tst_inject_sim2 = (tst_module_string_inject_struct *)
+				construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+				strncpy((kal_char*)tst_inject_sim2->string, "trigger_interface:", strlen("trigger_interface:"));
+				tst_inject_sim2->string[20] = data_str[0];
+				msg_send5(MOD_L4C_2, MOD_IMC_2, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim2);    
+    #endif      
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+        case 403:/*CMD EX:
+                    AT+EGCMD = 403, 1, "01"  AP query rereg remain timer
+                    AT+EGCMD = 403, 1, "02"  AP query resub remain timer
+                    AT+EGCMD = 403, 1, "03"  AP query rereg and resub remain timer
+											*/
+        {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject_sim1; 
+                tst_inject_sim1 = (tst_module_string_inject_struct *)
+                construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                strncpy((kal_char*)tst_inject_sim1->string, "query_interface:", strlen("query_interface:"));
+                tst_inject_sim1->string[20] = data_str[0];
+                msg_send5(MOD_L4C, MOD_IMC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim1);
+    #if defined(__GEMINI_LTE__)
+		        tst_module_string_inject_struct *tst_inject_sim2;
+				tst_inject_sim2 = (tst_module_string_inject_struct *)
+				construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+				strncpy((kal_char*)tst_inject_sim2->string, "query_interface:", strlen("query_interface:"));
+				tst_inject_sim2->string[20] = data_str[0];
+				msg_send5(MOD_L4C_2, MOD_IMC_2, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim2);
+    #endif      
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+                    
+        case 450:
+        {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+         
+                kal_sprintf((kal_char*)tst_inject->string, "erlcul450:");                
+                tst_inject->index = data_str[0];
+                
+                msg_send5(MOD_L4C, MOD_ERLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+         
+            ret_val = KAL_TRUE;       
+            break;
+        }
+         
+        case 451:
+        {
+            if (data_len == 3)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+         
+                kal_sprintf((kal_char*)tst_inject->string, "erlcul451:");
+                tst_inject->index = data_str[0];
+                tst_inject->string[10] = data_str[1];
+                tst_inject->string[11] = data_str[2];
+                
+                msg_send5(MOD_L4C, MOD_ERLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+         
+            ret_val = KAL_TRUE;       
+            break;
+        }
+         
+        case 452:
+        {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+         
+                kal_sprintf((kal_char*)tst_inject->string, "erlcul452:");
+                tst_inject->index = data_str[0];
+                
+                msg_send5(MOD_L4C, MOD_ERLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+         
+            ret_val = KAL_TRUE;       
+            break;
+        }
+         
+        case 453:
+        {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+         
+                kal_sprintf((kal_char*)tst_inject->string, "erlcul453:");
+                tst_inject->index = data_str[0];
+                 
+                msg_send5(MOD_L4C, MOD_ERLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+         
+            ret_val = KAL_TRUE;       
+            break;
+        }
+         
+        case 454:
+        {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+         
+                kal_sprintf((kal_char*)tst_inject->string, "erlcul454:");
+                tst_inject->index = data_str[0];
+                
+                msg_send5(MOD_L4C, MOD_ERLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+         
+            ret_val = KAL_TRUE;       
+            break;
+        }
+         
+        case 455:
+        {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+         
+                kal_sprintf((kal_char*)tst_inject->string, "erlcul455:");
+                tst_inject->index = data_str[0];
+                 
+                msg_send5(MOD_L4C, MOD_ERLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+         
+            ret_val = KAL_TRUE;       
+            break;
+        }
+         
+        case 456:
+        {
+            if (data_len == 3)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+         
+                kal_sprintf((kal_char*)tst_inject->string, "erlcul456:");
+                tst_inject->index = data_str[0];
+                tst_inject->string[10] = data_str[1];
+                tst_inject->string[11] = data_str[2];
+                tst_inject->string[12] = data_str[3];
+                 
+                msg_send5(MOD_L4C, MOD_ERLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+         
+            ret_val = KAL_TRUE;       
+            break;
+        }
+         
+        case 457:
+        {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+         
+                kal_sprintf((kal_char*)tst_inject->string, "erlcul457:");
+                tst_inject->index = data_str[0];
+                 
+                msg_send5(MOD_L4C, MOD_ERLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+         
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+        case 458:
+        {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+         
+                kal_sprintf((kal_char*)tst_inject->string, "erlcul458:");                
+                tst_inject->index = data_str[0];
+                
+                msg_send5(MOD_L4C, MOD_ERLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+         
+            ret_val = KAL_TRUE;       
+            break;
+        }
+        
+        case 459:
+        {
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+         
+                kal_sprintf((kal_char*)tst_inject->string, "erlcul459:");                
+                tst_inject->index = data_str[0];
+                
+                msg_send5(MOD_L4C, MOD_ERLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+         
+            ret_val = KAL_TRUE;       
+            break;
+        }
+        
+        case 470:
+        {
+#if defined(__NR_RAT__)
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+ 
+                kal_sprintf((kal_char*)tst_inject->string, "nrlcul470:");                
+                tst_inject->index = data_str[0];
+                
+                msg_send5(MOD_L4C, MOD_NRLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+#endif
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+        case 471:
+        {
+#if defined(__NR_RAT__)
+            if (data_len == 3)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+ 
+                kal_sprintf((kal_char*)tst_inject->string, "nrlcul471:");
+                tst_inject->index = data_str[0];
+                tst_inject->string[10] = data_str[1];
+                tst_inject->string[11] = data_str[2];
+                
+                msg_send5(MOD_L4C, MOD_NRLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+#endif
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+        case 472:
+        {
+#if defined(__NR_RAT__)
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+ 
+                kal_sprintf((kal_char*)tst_inject->string, "nrlcul472:");
+                tst_inject->index = data_str[0];
+                
+                msg_send5(MOD_L4C, MOD_NRLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+#endif
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+        case 473:
+        {
+#if defined(__NR_RAT__)
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+ 
+                kal_sprintf((kal_char*)tst_inject->string, "nrlcul473:");
+                tst_inject->index = data_str[0];
+                
+                msg_send5(MOD_L4C, MOD_NRLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+#endif
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+        case 474:
+        {
+#if defined(__NR_RAT__)
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+ 
+                kal_sprintf((kal_char*)tst_inject->string, "nrlcul474:");
+                tst_inject->index = data_str[0];
+                
+                msg_send5(MOD_L4C, MOD_NRLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+#endif
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+        case 475:
+        {
+#if defined(__NR_RAT__)
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+ 
+                kal_sprintf((kal_char*)tst_inject->string, "nrlcul475:");
+                tst_inject->index = data_str[0];
+                
+                msg_send5(MOD_L4C, MOD_NRLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+#endif
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+        case 476:
+        {
+#if defined(__NR_RAT__)
+            if (data_len == 3)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+ 
+                kal_sprintf((kal_char*)tst_inject->string, "nrlcul476:");
+                tst_inject->index = data_str[0];
+                tst_inject->string[10] = data_str[1];
+                tst_inject->string[11] = data_str[2];
+                tst_inject->string[12] = data_str[3];
+                
+                msg_send5(MOD_L4C, MOD_NRLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+#endif
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+        case 477:
+        {
+#if defined(__NR_RAT__)
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+ 
+                kal_sprintf((kal_char*)tst_inject->string, "nrlcul477:");
+                tst_inject->index = data_str[0];
+                
+                msg_send5(MOD_L4C, MOD_NRLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+#endif
+            ret_val = KAL_TRUE;       
+            break;
+        }         
+        
+        case 478:
+        {
+#if defined(__NR_RAT__)
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+ 
+                kal_sprintf((kal_char*)tst_inject->string, "nrlcul478:");                
+                tst_inject->index = data_str[0];
+                
+                msg_send5(MOD_L4C, MOD_NRLCUL, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);          
+            }
+#endif
+            ret_val = KAL_TRUE;       
+            break;
+        }
+#endif
+        case 479:
+        {
+            // AT+EGCMD = 479, 1, "00"  ERRC_GAME_MODE disable
+            // AT+EGCMD = 479, 1, "01"  ERRC_GAME_MODE enable
+
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject_sim1;
+                tst_inject_sim1 = (tst_module_string_inject_struct *)
+                construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                    strncpy((kal_char*)tst_inject_sim1->string, "ERRC_GAME_MODE", strlen("ERRC_GAME_MODE"));
+                tst_inject_sim1->index = data_str[0];
+                msg_send5(MOD_L4C, MOD_ERRC, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim1);
+
+#if defined(__GEMINI_LTE__)
+                tst_module_string_inject_struct *tst_inject_sim2;				
+                tst_inject_sim2 = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                  strncpy((kal_char*)tst_inject_sim2->string, "ERRC_GAME_MODE", strlen("ERRC_GAME_MODE"));
+                tst_inject_sim2->index = data_str[0];
+                msg_send5(MOD_L4C_2, MOD_ERRC_2, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject_sim2);
+#endif
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+       case 480:
+        {
+            // AT+EGCMD = 480, 1, "00"  NL1_CM_Feature_1 disable
+            // AT+EGCMD = 480, 1, "01"  NL1_CM_Feature_1 enable
+
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+                
+                strncpy((kal_char*)tst_inject->string, "NL1_CM_Feature_1", strlen("NL1_CM_Feature_1"));
+                
+                tst_inject->index = data_str[0];
+                msg_send5(MOD_L4C, MOD_NL1, 0, MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+
+        case 481:
+        {
+            // AT+EGCMD = 481, 1, "AB"  IPCORE discard background/user data
+			//  A 
+			//    0 UDP&IGMP discarding
+			//    1 all packet discarding
+			//    2 all packet discarding except ping&IPv6 RS 
+			//  B 
+			//    0 disable
+			//    non 0 enable
+            kal_uint8 which_sim = l4c_current_mod_id - MOD_L4C; 
+            if (data_len == 1)
+            {
+                tst_module_string_inject_struct *tst_inject;
+                tst_inject = (tst_module_string_inject_struct *)
+                    construct_local_para((kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+				tst_inject->index = 0xAB;
+				switch (data_str[0] & 0xf0)
+                {
+				case 0x00: /* discard UDP and IGMP packets*/ 
+				    if ((data_str[0] & 0xf) == 0)
+                        tst_inject->index = 0;
+					else
+						tst_inject->index = 1;
+					break;
+				case 0x10: /* discard all packets*/ 
+				    if ((data_str[0] & 0xf) == 0)
+                        tst_inject->index = 4;
+					else
+						tst_inject->index = 5;
+					break;
+				case 0x20: /* discard all packets except ping and rs/ra */
+				    if ((data_str[0] & 0xf) == 0)
+                        tst_inject->index = 6;
+					else
+						tst_inject->index = 7;
+					break;
+				case 0x30: /* ACK reduction */ 
+				    if ((data_str[0] & 0xf) == 0)
+                        tst_inject->index = 2;
+					else
+						tst_inject->index = 3;
+					break;
+				default:
+				    break;	
+				}
+
+                if ((tst_inject->index >= 4) && (tst_inject->index <= 7))
+				{
+                    nvram_ef_l4_misc_struct* nvram_l4_misc_ptr = NULL;
+                    // Allocate buffer to read NVRAM setting
+                    nvram_l4_misc_ptr = (nvram_ef_l4_misc_struct*)get_ctrl_buffer(sizeof(kal_uint8) * NVRAM_EF_L4_MISC_SIZE);
+                    // Read current NVRAM setting
+                    nvram_external_read_data(NVRAM_EF_L4_MISC_LID,
+                                     1,
+                                     (kal_uint8*)nvram_l4_misc_ptr,
+                                     NVRAM_EF_L4_MISC_SIZE);
+                    nvram_l4_misc_ptr->misc &= 0xfffffff0;
+				    if ((tst_inject->index == 5) || (tst_inject->index == 7))
+					{
+						nvram_l4_misc_ptr->misc |= tst_inject->index;
+					}	
+
+                    nvram_external_write_data(NVRAM_EF_L4_MISC_LID,
+                                      1,
+                                      (kal_uint8*)nvram_l4_misc_ptr,
+                                      NVRAM_EF_L4_MISC_SIZE);
+				}
+				
+                tst_inject->string[0] = data_str[0];
+
+                msg_send5(MOD_L4C + which_sim, MOD_IPCORE + which_sim, 0,
+                    MSG_ID_TST_INJECT_STRING, (local_para_struct*)tst_inject);
+            }
+
+            ret_val = KAL_TRUE;       
+            break;
+        }
+#ifdef __IMS_SUPPORT__
+        case 499:
+        {
+            //set VDM is_ims_reconfig_enable
+            nvram_ef_vdm_nv_data_struct* nvram_vdm_nv_data_ptr = NULL;
+            // Allocate buffer to read NVRAM setting
+            nvram_vdm_nv_data_ptr = (nvram_ef_vdm_nv_data_struct*)get_ctrl_buffer(sizeof(kal_uint8) * NVRAM_EF_VDM_NV_DATA_SIZE);
+            // Read current NVRAM setting
+            nvram_external_read_data(NVRAM_EF_VDM_NV_DATA_LID,
+                                     data_len+1,
+                                     (kal_uint8*)nvram_vdm_nv_data_ptr,
+                                     NVRAM_EF_VDM_NV_DATA_SIZE);
+            nvram_vdm_nv_data_ptr->ims_reconfig_enable = data_str[0];
+            nvram_external_write_data(NVRAM_EF_VDM_NV_DATA_LID,
+                                      data_len+1,
+                                      (kal_uint8*)nvram_vdm_nv_data_ptr,
+                                      NVRAM_EF_VDM_NV_DATA_SIZE);
+            ret_val = KAL_TRUE;
+            break;
+        }
+#endif
+        case 5566:
+        {
+            enable_ecies_dump_log();
+            ret_val = KAL_TRUE; 
+            break;
+        }
+
+        case 5567:
+        {
+            const kal_uint8 peerkey[33] = { 0x03, 0xCE, 0xF2, 0xC7, 0x6B, 0x66, 0xCE, 0xED,
+                                            0x2F, 0xF9, 0x2E, 0xDB, 0x7A, 0xC3, 0xF4, 0x85,
+                                            0xA5, 0x02, 0xF4, 0xB2, 0x87, 0x24, 0x2C, 0x97,
+                                            0x56, 0x45, 0x90, 0xD6, 0xA5, 0xF4, 0x97, 0x1B, 0xFB};
+            const kal_uint8 supi[9] = { 0x30, 0x30, 0x31, 0x30, 0x30, 0x32, 0x30, 0x38, 0x36};
+            kal_uint8 enc_out[80];
+            kal_uint16 enc_out_len;
+            kal_uint8 exported_public_key[33];
+            kal_uint8 exported_public_key_len;
+            kal_uint32 err = 0;
+            int i = 0, left = 0;
+            err = sim_supi_enc(ECIES_PROFILE_B, peerkey, sizeof(peerkey), supi, sizeof(supi), enc_out, &enc_out_len, exported_public_key, &exported_public_key_len);
+            if(err) {
+                dhl_print(TRACE_INFO, DHL_USER_FLAG_NONE, MOD_NVRAM, "Error code:%d", err);
+                return KAL_FALSE;
+            }
+
+            left = enc_out_len;
+            dhl_print(TRACE_INFO, DHL_USER_FLAG_NONE, MOD_NVRAM, "Output:");
+            for(i = 0; i < enc_out_len-8; i+=8) {
+                dhl_print(TRACE_INFO, DHL_USER_FLAG_NONE, MOD_NVRAM, "%x %x %x %x %x %x %x %x", enc_out[i], enc_out[i+1], enc_out[i+2], enc_out[i+3], enc_out[i+4], enc_out[i+5], enc_out[i+6], enc_out[i+7]);
+                left -= 8;
+            }
+            while (left--) dhl_print(TRACE_INFO, DHL_USER_FLAG_NONE, MOD_NVRAM, "%x", enc_out[i++]);
+
+            left = exported_public_key_len;
+            dhl_print(TRACE_INFO, DHL_USER_FLAG_NONE, MOD_NVRAM, "Exported public key:");
+            for(i = 0; i < exported_public_key_len; i+=8) {
+                dhl_print(TRACE_INFO, DHL_USER_FLAG_NONE, MOD_NVRAM, "%x %x %x %x %x %x %x %x", exported_public_key[i], exported_public_key[i+1], exported_public_key[i+2], exported_public_key[i+3], \
+                exported_public_key[i+4], exported_public_key[i+5], exported_public_key[i+6], exported_public_key[i+7]);
+                left -= 8;
+            }
+
+            while (left--) dhl_print(TRACE_INFO, DHL_USER_FLAG_NONE, MOD_NVRAM, "%x", exported_public_key[i++]);
+            ret_val = KAL_TRUE;        	  
+            break;
+        }
+#if defined(__SEC_TEST__)
+        case 5568:
+        {
+	    chl_test_main();
+            ret_val = KAL_TRUE;
+            break;
+        }
+#endif
+
+#if defined(__MTK_TARGET__) && defined(__MD97__)
+        case 4896:
+        {
+            ret_val = serdes_test(data_len, data_str);
+            break;
+        }
+
+        case 4897:
+        {
+            ret_val = scc_pcc_atcmd(data_len, data_str);
+            break;
+        }
+
+        case 4898:
+        {
+            ret_val = scc_tracetop_atcmd(data_len, data_str);
+            break;
+        }
+#endif
+        case 9527:
+        {
+            ret_val = SleepDrv_LowPowerMonitorSetParameter(data_len,data_str);
+            break;        
+        }
+        
+        case 9477:
+        {
+            SleepDrv_LowPowerMonitorStart();
+            ret_val = KAL_TRUE;        	  
+        	  break;
+        }
+
+        case 9478:
+        {
+            SleepDrv_LowPowerMonitorStop();        	
+            ret_val = KAL_TRUE;        	  
+        	  break;
+        }
+        case 9487:
+        {
+        	  SleepDrv_LowPowerMonitorCreate();
+            ret_val = KAL_TRUE;        	  
+        	  break;
+        }
+
+        case 9453:
+        {
+        	  SleepDrv_LowPowerMonitorDelete();
+            ret_val = KAL_TRUE;        	  
+        	  break;
+        }
+
+        default:
+            break;
+    }
+#endif // L4_NOT_PRESENT
+
+    return ret_val;
+}
+
+extern l4c_at_cmd_process_type_enum  l4c_internal_gmc_process(kal_uint8 src_id,
+                                                              kal_uint8 op, 
+                                                              kal_uint8 *config_str, 
+                                                              l4c_general_modem_configure_struct *cmd_param_ptr);
+
+
+typedef struct{
+    kal_uint8  configure_string[MAX_ATCMD_EGMC_CONFIG_STR_LEN+1];
+    kal_uint8  max_sim_num;
+    kal_uint32 module_name;
+    kal_bool   is_present_pdu_of_set_req; /* peer buffer will be included the set request ilm message */
+    kal_bool   is_present_pdu_of_set_rsp; /* peer buffer will be included the set response ilm message */
+}rmmi_general_gmc_table_struct;
+
+
+/**********************************************************************
+    Description of gmc_general_table[]
+        1. configure_string
+            The configure string will be used in AT+EGMC=<op>,<config_str>.
+            Add string here to regist new <config_str>
+            Note: String length cannot exceed size: MAX_ATCMD_EGMC_CONFIG_STR_LEN
+    
+        2. max_sim_num
+            max SIM number of destination.
+            1: only SIM1; 2: SIM1 or SIM2; 3: SIM1 or SIM2 or SIM3...
+            e.g. MAX_SIM_NUM or MAX_LTE_NUM...etc. to indicate it's normal gemini module or LTE dependent module
+
+        3. module_name
+            the destination module name
+
+ **********************************************************************/
+
+rmmi_general_gmc_table_struct gmc_general_table[] = {
+
+//  {"cnf_test",            MAX_SIM_NUM, MOD_RAC}, 
+#ifdef __LTE_RAT__
+    {"ims_req_hps",         MAX_LTE_NUM, MOD_EVAL,  KAL_FALSE, KAL_FALSE}, 
+    {"ims_call",            MAX_LTE_NUM, MOD_EVAL,  KAL_FALSE, KAL_FALSE}, 
+	{"emm_smart_idle_local_release", MAX_LTE_NUM, MOD_EVAL, KAL_FALSE, KAL_FALSE},
+    {"non_data_sim_ignore_ps_paging",  MAX_LTE_NUM, MOD_EVAL, KAL_FALSE, KAL_FALSE},
+    {"ims_ecc_guard_timer", MAX_LTE_NUM, MOD_ESM,   KAL_FALSE, KAL_FALSE},
+    {"ims_srvcc_enable",    MAX_LTE_NUM, MOD_ERRC,  KAL_FALSE, KAL_FALSE},
+    {"ims_early_conn_rel",  MAX_LTE_NUM, MOD_ERRC,  KAL_FALSE, KAL_FALSE},
+    {"priority_band",       MAX_LTE_NUM, MOD_ERRC,  KAL_FALSE, KAL_FALSE},
+    {"errc_feature_set",    MAX_LTE_NUM, MOD_ERRC,  KAL_FALSE, KAL_FALSE},
+    {"errc_feature_get",    MAX_LTE_NUM, MOD_ERRC,  KAL_FALSE, KAL_FALSE},
+    {"LTE_CAP_UPDATE",      MAX_LTE_NUM, MOD_ERRC,  KAL_FALSE, KAL_FALSE},
+    {"rx_path",             MAX_LTE_NUM, MOD_EL1,   KAL_FALSE, KAL_FALSE},
+    {"l_utas_query",        MAX_LTE_NUM, MOD_EL1,   KAL_FALSE, KAL_FALSE},
+    {"lte_tx",              MAX_LTE_NUM, MOD_EL1,   KAL_FALSE, KAL_FALSE},
+    {"rx_mimo_set",         MAX_LTE_NUM, MOD_EL1,   KAL_FALSE, KAL_FALSE},
+    {"sb_mimo_set",         MAX_LTE_NUM, MOD_EL1,   KAL_FALSE, KAL_FALSE},
+    {"sb_4rx_set",          MAX_LTE_NUM, MOD_EL1,   KAL_FALSE, KAL_FALSE},
+    {"lte_tdd_tx_rx",       MAX_LTE_NUM, MOD_EL1,   KAL_FALSE, KAL_FALSE},
+    {"lte_simul_utas_swap", MAX_LTE_NUM, MOD_EL1,   KAL_FALSE, KAL_FALSE},
+    {"mpr_ctrl",            MAX_LTE_NUM, MOD_EL1,   KAL_FALSE, KAL_FALSE},
+    {"delay_budget_rpt",    MAX_LTE_NUM, MOD_ERRC,  KAL_FALSE, KAL_FALSE},
+    {"stk_call_over_ims",   MAX_LTE_NUM, MOD_VDM,   KAL_FALSE, KAL_FALSE},
+    {"ecc_redial_notify",   MAX_LTE_NUM, MOD_VDM,   KAL_FALSE, KAL_FALSE},
+    {"customize_q_rxlv_min",MAX_LTE_NUM, MOD_ERRC,  KAL_FALSE, KAL_FALSE},
+    {"customize_q_qual_min",MAX_LTE_NUM, MOD_ERRC,  KAL_FALSE, KAL_FALSE},
+#ifdef __MD97__
+    {"enpdcpGGRThres",                1, MOD_ENPDCP, KAL_FALSE, KAL_FALSE},
+    {"nrPdcpBOThres",                 1, MOD_ENPDCP, KAL_FALSE, KAL_FALSE},
+    {"enpdcp",              MAX_LTE_NUM, MOD_ENPDCP, KAL_FALSE, KAL_FALSE},
+    {"enpdcpBogusRecoveryOFF",        1, MOD_ENPDCP, KAL_FALSE, KAL_FALSE},
+#endif
+    {"ssac_reselect",       MAX_LTE_NUM, MOD_ERRC,  KAL_FALSE, KAL_FALSE},
+    {"rrc_local_release",	MAX_LTE_NUM, MOD_NAS_SV},
+#endif
+    {"wcdma_utas",          MAX_SIM_NUM, MOD_UL1,   KAL_FALSE, KAL_FALSE},
+    {"t_utas_query",                  1, MOD_TL1,   KAL_FALSE, KAL_FALSE},
+    {"omadm_session",       MAX_SIM_NUM, MOD_SIM,   KAL_FALSE, KAL_FALSE},
+    {"gsm_utas",            MAX_SIM_NUM, MOD_L1,    KAL_FALSE, KAL_FALSE},
+    {"query_rf_cal_chksum",           1, MOD_MMRF_XL1TST, KAL_FALSE, KAL_FALSE},
+    {"priority_band_enh",   MAX_LTE_NUM, MOD_ERRC,  KAL_FALSE, KAL_FALSE},
+    {"utas_query_ant_port", MAX_SIM_NUM, MOD_MMRF,  KAL_FALSE, KAL_FALSE},
+    {"ant_test_to_realsim", MAX_SIM_NUM, MOD_MMRF,  KAL_FALSE, KAL_FALSE},
+    {"etm_set_hfp_fpwm",              1, MOD_MMRF,  KAL_FALSE, KAL_FALSE},
+    {"c2k_utas",            MAX_SIM_NUM, MOD_L1D_MDM, KAL_FALSE, KAL_FALSE},    
+    {"tds_utas",                      1, MOD_TL1,   KAL_FALSE, KAL_FALSE},
+    {"gsm_set_txrx_ant",    MAX_SIM_NUM, MOD_L1,    KAL_FALSE, KAL_FALSE},
+#ifdef __FCS_SUPPORT__
+    {"fcs",                 MAX_SIM_NUM, MOD_FCS,   KAL_FALSE, KAL_FALSE},
+#endif    
+	{"boot_download_mode",            1, MOD_L4BPWR, KAL_FALSE, KAL_FALSE},
+    {"elevator_mode",       MAX_SIM_NUM, MOD_RAC,   KAL_FALSE, KAL_FALSE},
+#ifdef __NR_RAT__
+    {"NrRssi",              MAX_SIM_NUM, MOD_NL1,   KAL_FALSE, KAL_FALSE},
+    {"NrForcedTx",          MAX_SIM_NUM, MOD_NL1,   KAL_FALSE, KAL_FALSE},
+    {"NrOnOffTx",           MAX_SIM_NUM, MOD_NL1,   KAL_FALSE, KAL_FALSE},
+    {"NrFetchTxPwr",        MAX_SIM_NUM, MOD_NL1,   KAL_FALSE, KAL_FALSE},
+    {"NrRfScan",            MAX_SIM_NUM, MOD_NL1,   KAL_FALSE, KAL_FALSE},
+    {"NrAntSwAging",        MAX_SIM_NUM, MOD_NL1,   KAL_FALSE, KAL_FALSE},
+    {"NrChngTxPwr",         MAX_SIM_NUM, MOD_NL1,   KAL_FALSE, KAL_FALSE},
+    {"max_pwr_limit",       MAX_SIM_NUM, MOD_NL1,   KAL_FALSE, KAL_FALSE},
+    {"n_utas_query",        MAX_SIM_NUM, MOD_NL1,   KAL_FALSE, KAL_FALSE},
+    {"NrForceTxRx",         MAX_SIM_NUM, MOD_NL1,   KAL_FALSE, KAL_FALSE},
+    {"NrFetchTxRx",         MAX_SIM_NUM, MOD_NL1,   KAL_FALSE, KAL_FALSE},
+	{"nr_rx_path",          MAX_SIM_NUM, MOD_NL1,   KAL_FALSE, KAL_FALSE},
+	{"nr_lpwr",             MAX_SIM_NUM, MOD_NL1,  KAL_FALSE, KAL_FALSE},
+    {"EndcMaxPwr",          MAX_SIM_NUM, MOD_NL1,   KAL_FALSE, KAL_FALSE},
+    {"bgsrch_slp_setting",  MAX_SIM_NUM, MOD_NRRC,  KAL_FALSE, KAL_FALSE},
+    {"bgsrch_slp_delta",    MAX_SIM_NUM, MOD_NRRC,  KAL_FALSE, KAL_FALSE},
+    {"qrxlevmin_adj_nr",    MAX_SIM_NUM, MOD_NRRC,  KAL_FALSE, KAL_FALSE},
+    {"subway_redir_control", MAX_SIM_NUM, MOD_NRRC,  KAL_FALSE, KAL_FALSE},
+    {"ping_pong_bar_setting", MAX_SIM_NUM, MOD_NRRC,KAL_FALSE, KAL_FALSE},
+    {"vonr_early_conn_rel", MAX_SIM_NUM, MOD_NRRC,  KAL_FALSE, KAL_FALSE},
+    {"nrrc_data_inactive_timer", MAX_SIM_NUM, MOD_NRRC, KAL_FALSE, KAL_FALSE},
+    {"nrrc_feature_set",    MAX_SIM_NUM, MOD_NRRC,  KAL_FALSE, KAL_FALSE},
+    {"nrrc_feature_get",    MAX_SIM_NUM, MOD_NRRC,  KAL_FALSE, KAL_FALSE},
+    {"poor_sinr_thresh",    MAX_SIM_NUM, MOD_NRRC,  KAL_FALSE, KAL_FALSE},
+    {"vgmm_smart_idle_local_release", MAX_SIM_NUM, MOD_VGMM, KAL_FALSE, KAL_FALSE},
+    {"EGMC_NRRC_CAMP_ON_CRITERIA", MAX_SIM_NUM, MOD_NRRC, KAL_FALSE, KAL_FALSE},
+    {"set_srv_nbr_cell_th", MAX_SIM_NUM, MOD_NRRC,  KAL_FALSE, KAL_FALSE},
+    {"hst_cell_power_th_setting", MAX_SIM_NUM, MOD_NRRC,  KAL_FALSE, KAL_FALSE},
+    {"set_nr_a2_thresh",    MAX_SIM_NUM, MOD_NRRC,  KAL_FALSE, KAL_FALSE},
+    {"NR_CAP_UPDATE",       MAX_NR_NUM,  MOD_NRRC,  KAL_FALSE, KAL_FALSE},
+#ifdef __SASE_SUPPORT__
+    {"endc_deactivation",   MAX_NR_NUM, MOD_SASE_CLIENT,     KAL_FALSE, KAL_FALSE},
+    {"MTK_endc_deactivation",   MAX_NR_NUM, MOD_SASE_CLIENT, KAL_FALSE, KAL_FALSE},
+    {"sa_silence",          MAX_NR_NUM, MOD_SASE_CLIENT,     KAL_FALSE, KAL_FALSE},    
+    {"VoWiFiDisable5GSA",   MAX_SIM_NUM, MOD_SASE_CLIENT,    KAL_FALSE, KAL_FALSE},
+#endif
+#endif
+    {"nwsel_search_scope",  MAX_SIM_NUM, MOD_NWSEL, KAL_FALSE, KAL_FALSE},
+	{"5g_available",        MAX_SIM_NUM, MOD_GMSS,  KAL_FALSE, KAL_FALSE},
+	{"nr_map",              MAX_SIM_NUM, MOD_GMSS,  KAL_FALSE, KAL_FALSE},
+    {"dhl_ondemand_dump",             1, MOD_DHL_READER,  KAL_FALSE, KAL_FALSE},
+    {"query_rf_cal_status",           1, MOD_MMRF_XL1TST, KAL_FALSE, KAL_FALSE},
+    {"LnaAgingTest", 1, MOD_MMRF_XL1TST, KAL_FALSE, KAL_FALSE},
+    {"endc_cell",           MAX_LTE_NUM, MOD_ERRC,  KAL_FALSE, KAL_FALSE},
+    {"dhl_inject_string",             1, MOD_DHL_READER, KAL_FALSE, KAL_FALSE},
+    {"errc_data_inactive_timer", MAX_SIM_NUM, MOD_ERRC, KAL_FALSE, KAL_FALSE},
+    {"npt_rf_scan",         MAX_SIM_NUM, MOD_NL1,           KAL_TRUE,  KAL_TRUE},
+    {"npt_rf_scan_ds",         MAX_SIM_NUM, MOD_NL1,           KAL_TRUE,  KAL_TRUE},
+    {"ue_cap_query",                  1, MOD_MMRF_XL1TST,   KAL_FALSE, KAL_TRUE},
+    {"lte_fetch_pd_report", MAX_LTE_NUM, MOD_EL1, KAL_FALSE, KAL_TRUE},
+#ifdef __HIF_USB_SUPPORT__
+    {"usb_serialnumber",           1, MOD_USBCORE,          KAL_FALSE, KAL_FALSE},      
+    {"usb_mode",           1, MOD_USBCORE,                  KAL_FALSE, KAL_FALSE},    
+    {"usb_pwrdown",           1, MOD_USBCORE,          KAL_FALSE, KAL_FALSE},  
+#endif 
+#ifdef __SIM_RECOVERY_SWITCH__
+	{"switch_hotswap_off",       MAX_SIM_NUM, MOD_SIM,   KAL_FALSE, KAL_FALSE},
+	{"switch_recovery_off",       MAX_SIM_NUM, MOD_SIM,   KAL_FALSE, KAL_FALSE},
+#endif
+    {"b1_nr_config",   MAX_LTE_NUM, MOD_ERRC,  KAL_FALSE, KAL_FALSE},
+    {"b1_nr_bands",   MAX_LTE_NUM, MOD_ERRC,  KAL_FALSE, KAL_FALSE},
+
+};
+
+
+l4c_at_cmd_process_type_enum rmmi_general_modem_configure_req(kal_uint8 src_id,
+                                                              kal_uint8 op, 
+                                                              kal_uint8 *config_str, 
+                                                              l4c_general_modem_configure_struct *cmd_param_ptr,
+                                                              kal_uint8 *hex_str)
+{
+    kal_uint16 i, max, config_len, candidate_len, hex_str_len;
+    kal_bool is_processed = KAL_FALSE;
+    kal_bool is_convert_finish = KAL_FALSE;
+    l4c_at_cmd_process_type_enum ret_val = L4C_AT_CMD_PROCESS_ERROR;
+    kal_uint8  *candidate_str;
+    kal_uint8  *hex_val_ptr = NULL;
+    peer_buff_struct *peer_buf_ptr = NULL;
+    kal_uint8  *pdu_ptr = NULL;
+
+    max = sizeof(gmc_general_table)/sizeof(rmmi_general_gmc_table_struct);
+    config_len = strlen((kal_char*)config_str);
+    hex_str_len = strlen((kal_char*)hex_str);
+
+    for (i = 0; i < max; i++)
+    {
+        candidate_str = gmc_general_table[i].configure_string;
+        candidate_len = strlen((kal_char*)candidate_str);
+
+        if ((config_len == candidate_len) &&
+            (kal_mem_cmp(config_str, candidate_str, config_len) == 0))
+        {
+            if ((l4c_current_mod_id - MOD_L4C) >= gmc_general_table[i].max_sim_num)
+            {
+                break;  // Not support this configuration on this SIM ID
+            }
+
+            if (0 == op) // Query mode
+            {
+                l4c_general_modem_configure_query_req_struct *param_ptr = (l4c_general_modem_configure_query_req_struct*)
+                        construct_local_para(sizeof(l4c_general_modem_configure_query_req_struct),TD_RESET);
+
+                param_ptr->src_id = src_id;
+                strncpy((kal_char*)param_ptr->configure_string, (kal_char*)config_str, config_len);
+
+                msg_send5(l4c_current_mod_id,
+                          (l4c_current_mod_id - MOD_L4C)+ gmc_general_table[i].module_name,
+                          0,
+                          MSG_ID_L4C_GENERAL_MODEM_CONFIGURE_QUERY_REQ,
+                          (local_para_struct *)param_ptr);
+            }
+            else // Set mode (1 == op)
+            {
+                l4c_general_modem_configure_set_req_struct *param_ptr = (l4c_general_modem_configure_set_req_struct*)
+                        construct_local_para(sizeof(l4c_general_modem_configure_set_req_struct),TD_RESET);
+
+                param_ptr->src_id = src_id;
+                strncpy((kal_char*)param_ptr->configure_string, (kal_char*)config_str, config_len);
+                kal_mem_cpy(&param_ptr->data, cmd_param_ptr, sizeof(l4c_general_modem_configure_struct));
+
+                /* hex string convert to Raw data, and be included peer buffer in ilm msg*/
+                if (KAL_TRUE == gmc_general_table[i].is_present_pdu_of_set_req)
+                {
+                    /*The length of Hex string should be even*/
+                    if ((hex_str_len & 0x01) == 0)
+                    {
+                        hex_str_len         = hex_str_len >> 1;
+                        hex_val_ptr         = (kal_uint8*)get_ctrl_buffer(hex_str_len + 2);
+                        is_convert_finish   = check_hex_value_ext(hex_str,hex_val_ptr);
+                    }
+                    
+                    if (KAL_TRUE == is_convert_finish)
+                    {
+                        peer_buf_ptr = (peer_buff_struct*)construct_peer_buff(hex_str_len,0,0,TD_RESET);
+                        pdu_ptr = (kal_uint8*)get_peer_buff_pdu(peer_buf_ptr,NULL);
+                        kal_mem_cpy(pdu_ptr, hex_val_ptr, hex_str_len);
+                    }
+                    else
+                    {
+                        peer_buf_ptr = NULL;
+                    }
+                }
+                else
+                {
+                peer_buf_ptr = NULL;
+                }
+
+                msg_send6(l4c_current_mod_id,
+                            (l4c_current_mod_id - MOD_L4C)+ gmc_general_table[i].module_name,
+                            0,
+                            MSG_ID_L4C_GENERAL_MODEM_CONFIGURE_SET_REQ,
+                            (local_para_struct *)param_ptr,
+                            peer_buf_ptr);
+
+                if (NULL != hex_val_ptr)
+                {
+                    free_ctrl_buffer(hex_val_ptr);
+                }
+            }
+
+            is_processed = KAL_TRUE;
+
+            break;
+        }
+    }
+    
+
+    if (KAL_FALSE == is_processed) //Not found in general table, check internal process.
+    {
+        ret_val = l4c_internal_gmc_process(src_id, op, config_str, cmd_param_ptr);
+    }
+    else
+    {
+        ret_val = L4C_AT_CMD_PROCESS_WAIT_CNF;
+    }
+
+    return ret_val;
+
+}
+
+void rmmi_gmc_get_peer_pdu_status(kal_uint8 *config_str, kal_bool *is_present_pdu_of_set_req, kal_bool *is_present_pdu_of_set_rsp )
+{
+    kal_uint16 i, max, config_len, candidate_len;
+    kal_uint8 *candidate_str;
+
+    max = sizeof(gmc_general_table)/sizeof(rmmi_general_gmc_table_struct);
+    config_len = strlen((kal_char*)config_str); 
+
+    for (i = 0; i < max; i++)
+    {
+        candidate_str = gmc_general_table[i].configure_string;
+        candidate_len = strlen((kal_char*)candidate_str);
+
+        if ((config_len == candidate_len) &&
+            (kal_mem_cmp(config_str, candidate_str, config_len) == 0))
+        {
+            *is_present_pdu_of_set_req = gmc_general_table[i].is_present_pdu_of_set_req;
+            *is_present_pdu_of_set_rsp = gmc_general_table[i].is_present_pdu_of_set_rsp;
+            break;
+        }
+    }
+}
+
+kal_uint16 rmmi_get_ckpd_default_time(void)
+{
+	return CUSTOM_AT_CKPD_DEFAULT_TIME;
+}
+
+kal_uint16 rmmi_get_ckpd_default_pause(void)
+{
+	return CUSTOM_AT_CKPD_DEFAULT_PAUSE;
+}
+
+kal_uint16 rmmi_get_ring_interval(void)
+{
+#ifdef __TC01__
+	/* MT call indication is delayed since the first Ring is not handled in AP's RIL */
+	/* 2nd Ring will be shorter than the sheduled interval. */
+	if ( is_1st_shed_ring )
+	{
+		is_1st_shed_ring = KAL_FALSE;
+		return custom_ring_interval[0];
+	}
+	else /* ELSE return NORMAL INTERVAL */
+	{
+		return custom_ring_interval[1];
+	}
+#else
+	return CUSTOM_URC_RING_INTERVAL;
+#endif
+}
+
+#ifdef __TC01__
+/* MT call indication is delayed since the first Ring is not handled in AP's RIL */
+/* 2nd Ring will be shorter than the sheduled interval. */
+void rmmi_set_1st_shed_ring()
+{
+	is_1st_shed_ring = KAL_TRUE;
+}
+#endif
+
+#if defined(__MOD_TCM__) //&& !defined(__MMI_FMI__)
+extern kal_uint8 custom_l4c_psbearer_indicate(void);
+#endif
+
+/*****************************************************************************
+* FUNCTION
+*  	rmmi_custom_init_context()
+* DESCRIPTION
+* This function is to customize AT command default setting
+*
+* PARAMETERS
+*	NONE
+*
+* RETURNS
+*	NONE
+*
+*****************************************************************************/
+void rmmi_custom_init_context(rmmi_custom_context_struct *rmmi_ptr_g)
+{
+#ifndef L4_NOT_PRESENT
+    /* ATE default value */
+    kal_mem_set(rmmi_ptr_g->rsp_mode.echo_flag, 0, RMMI_MAX_BIT_MASK_SIZE); // default echo on
+
+    /* ATV default value */
+    rmmi_ptr_g->rsp_mode.format = RMMI_VERBOSE_FULL_HEAD_TAIL;
+
+	/* ATW default value */
+    rmmi_ptr_g->rsp_mode.ext_result_code = 2;
+
+	/* ATQ default value */
+    rmmi_ptr_g->rsp_mode.suppress_flag = RMMI_SUPPRESS_OFF;
+
+    /* AT+CMEE=<n> default value */
+    rmmi_ptr_g->error_report_mode = RMMI_SIMPLE_ERROR;
+
+    /* AT+CSCS=<chset> default value */
+    rmmi_ptr_g->char_set = RMMI_CHSET_IRA;    
+
+	/* AT+COPS=<mode>,<format> default value */
+    rmmi_ptr_g->plmn_format = RMMI_PLMN_LONG_ALPHA;       //default for long alpha
+    rmmi_ptr_g->cops_mode = 0; // default "automatic" mode
+
+#ifdef __PLMN_LIST_WITH_LAC__
+    rmmi_ptr_g->list_plmn_with_lac = KAL_FALSE; //default not print LAC
+#endif
+
+	/* AT+CPOL=<index>,<format> , set <format> default value here */
+    rmmi_ptr_g->CPOL_plmn_format = RMMI_PLMN_NUMERIC;	
+
+    /* AT+CMEC=<keyp>,<disp>,<ind> default value */
+    rmmi_ptr_g->cmec_keyp = 2; 
+    rmmi_ptr_g->cmec_disp = 0;
+    rmmi_ptr_g->cmec_ind = 0;
+
+    /* AT+CLAE=<mode> default value */    
+    rmmi_ptr_g->clae_mode = KAL_FALSE;    
+
+	/* AT+CSDH=<show> default value */
+    rmmi_ptr_g->csdh_show = KAL_FALSE;
+
+	/* AT+CVHU=<mode> default value, only (0-1) is supported */
+	rmmi_ptr_g->cvhu_mode = 0;
+
+
+    /* AT+EIND=<flag> default value*/
+#if defined (__CMUX_SUPPORT__) || defined (__MODEM_CARD__) /* EDGE card default enable eind */
+    rmmi_ptr_g->report_mode.eind = 0x000000ff;
+#else
+    rmmi_ptr_g->report_mode.eind = 0x00000001 << RMMI_EIND_AT_READY_BIT; /* only default turn on +EIND: 128 */
+#endif
+
+    /* AT+EINFO=<flag> default value*/
+    rmmi_ptr_g->report_mode.einfo = 0;
+
+    /* AT+ECPI=<mode> default value*/
+#if defined(__UE_SIMULATOR__) && defined(__IMS_SUPPORT__)
+    rmmi_ptr_g->report_mode.ecpi = 0xFFFFFFFF;
+#else
+    rmmi_ptr_g->report_mode.ecpi = 0;
+#endif
+
+    /* AT+ECSQ=<flag> default value*/
+    rmmi_ptr_g->report_mode.ecsq = 0;
+
+    /* AT+CMER=<mode>,<keyp>,0,<ind>,<bfr> default value */	
+    rmmi_ptr_g->report_mode.cmer_mode = 0;  
+    rmmi_ptr_g->report_mode.cmer_keyp = 0;
+    rmmi_ptr_g->report_mode.cmer_ind = 0;   
+    rmmi_ptr_g->report_mode.cmer_bfr = 0;	
+
+    /* AT+CLIP=<n> default value*/	
+    rmmi_ptr_g->report_mode.clip = 0;
+
+    /* AT+COLP=<n> default value*/	
+    rmmi_ptr_g->report_mode.colp = RMMI_DISABLE_REPORT;
+
+    /* AT+CLIR=<n> default value*/	
+    rmmi_ptr_g->report_mode.clir = RMMI_DISABLE_REPORT;
+
+    /* AT+CDIP=<n> default value*/	
+    rmmi_ptr_g->report_mode.cdip = RMMI_DISABLE_REPORT;
+
+    /* AT+CNAP=<n> default value*/	
+    rmmi_ptr_g->report_mode.cnap = RMMI_DISABLE_REPORT;
+
+#if defined(__UE_SIMULATOR__) && defined(__IMS_SUPPORT__)
+    /* AT+CREG=<n> default value*/  
+    rmmi_ptr_g->report_mode.cs_reg = RMMI_ENABLE_LOC_REPORT;
+
+    /* AT+CGREG=<n> default value*/ 
+    rmmi_ptr_g->report_mode.ps_reg = RMMI_ENABLE_LOC_REPORT;
+
+    /* AT+CNRREG=<n> default value*/ 
+    rmmi_ptr_g->report_mode.nr_reg = RMMI_ENABLE_LOC_REPORT;
+#else	
+    /* AT+CREG=<n> default value*/	
+    rmmi_ptr_g->report_mode.cs_reg = RMMI_DISABLE_NW_REG_REPORT;
+
+    /* AT+CGREG=<n> default value*/	
+    rmmi_ptr_g->report_mode.ps_reg = RMMI_DISABLE_NW_REG_REPORT;
+
+    /* AT+C5GREG=<n> default value*/ 
+    rmmi_ptr_g->report_mode.nr_reg = RMMI_DISABLE_REPORT;    // VDM get reg state from attach ind by egreg
+#endif
+    /* AT+CAOC=<mode> default value*/	
+    rmmi_ptr_g->report_mode.ccm = RMMI_DISABLE_REPORT;
+
+    /* AT+CCWE=<mode> default value*/	
+    rmmi_ptr_g->report_mode.acm_warning = RMMI_DISABLE_REPORT;
+
+    /* AT+CCWA=<n> default value*/	
+    rmmi_ptr_g->report_mode.call_wait = RMMI_DISABLE_REPORT;
+
+    /* AT+CGEREP=<mode> default value*/	
+    rmmi_ptr_g->report_mode.cgerep = RMMI_DISABLE_REPORT;
+
+    /* AT+CR=<mode> default value*/	
+    rmmi_ptr_g->report_mode.cr = RMMI_DISABLE_REPORT;
+
+    /* AT+CRC=<mode> default value*/	
+    rmmi_ptr_g->report_mode.crc = RMMI_DISABLE_REPORT;
+
+    /* AT+CTZR=<onoff> default value*/	
+    rmmi_ptr_g->report_mode.timezone = RMMI_TIME_ZONE_DISABLE_REPORT;
+
+    /* AT+CUSD=<n> default value*/	
+    rmmi_ptr_g->report_mode.ussd = RMMI_DISABLE_REPORT;
+
+    /* AT+CSSN=<n>,<m> default value*/	
+    rmmi_ptr_g->report_mode.ss_mo = RMMI_DISABLE_REPORT;	
+    rmmi_ptr_g->report_mode.ss_mt = RMMI_DISABLE_REPORT;	
+
+    /* AT+CEN=<reporting> */
+    rmmi_ptr_g->report_mode.cen = RMMI_ENABLE_REPORT; // +CEN
+
+    /* AT+ESIMS=<n> default value*/
+    rmmi_ptr_g->report_mode.esims = 0;
+
+    /* AT+EUSIM=<n> default value*/
+    rmmi_ptr_g->report_mode.eusim = RMMI_ENABLE_REPORT;
+
+    /* AT+ETESTSIM=<n> default value*/
+    rmmi_ptr_g->report_mode.etestsim = RMMI_ENABLE_REPORT;
+
+#if defined(__MOD_TCM__) //&& !defined(__MMI_FMI__)
+    rmmi_ptr_g->report_mode.psbearer_indicate = custom_l4c_psbearer_indicate();
+#endif
+
+    rmmi_ptr_g->report_mode.pacsp = RMMI_DISABLE_REPORT;
+
+    /* AT+ECGREG=<n> default value*/
+	rmmi_ptr_g->report_mode.ecgreg = RMMI_DISABLE_REPORT;
+
+    /* AT+ECEREG=<n> default value*/
+	rmmi_ptr_g->report_mode.ecereg = RMMI_DISABLE_REPORT;
+	
+    /* AT+ECREG=<n> default value*/
+	rmmi_ptr_g->report_mode.ecreg = RMMI_DISABLE_REPORT;
+
+    /* AT+ECAINFO=<n> default value*/
+	rmmi_ptr_g->report_mode.ecainfo = RMMI_DISABLE_REPORT;
+
+    /* AT^DSCI=<n> default value */
+    rmmi_ptr_g->op01_report_mode.dsci = 0;
+    rmmi_ptr_g->op01_report_mode.cardmode = 0;
+    rmmi_ptr_g->op01_report_mode.rfsw = 0;
+
+#ifdef __CSG_SUPPORT__
+    rmmi_ptr_g->report_mode.ecsg = RMMI_DISABLE_REPORT;
+#endif
+
+#ifdef __IMS_SUPPORT__
+    rmmi_ptr_g->report_mode.cireg = RMMI_DISABLE_REPORT;
+    rmmi_ptr_g->report_mode.cirep = RMMI_ENABLE_REPORT;
+    rmmi_ptr_g->report_mode.cnem = RMMI_ENABLE_REPORT;
+    rmmi_ptr_g->report_mode.ecmpcid = RMMI_ENABLE_REPORT;
+#endif
+
+    rmmi_ptr_g->report_mode.ecell = RMMI_DISABLE_REPORT;
+
+    rmmi_ptr_g->report_mode.eemcinfo = RMMI_DISABLE_REPORT;
+
+    rmmi_ptr_g->report_mode.essac = RMMI_DISABLE_REPORT;
+
+    rmmi_ptr_g->report_mode.emobd = RMMI_DISABLE_REPORT;
+
+    rmmi_ptr_g->report_mode.armee = RMMI_DISABLE_REPORT;
+
+    rmmi_ptr_g->report_mode.eccause = RMMI_DISABLE_REPORT;
+    rmmi_ptr_g->report_mode.cusats = RMMI_DISABLE_REPORT;
+    rmmi_ptr_g->report_mode.ecusats = RMMI_DISABLE_REPORT;
+    rmmi_ptr_g->report_mode.eslband = RMMI_DISABLE_REPORT;
+
+    rmmi_ptr_g->report_mode.ecamp = RMMI_DISABLE_REPORT;
+
+    rmmi_ptr_g->report_mode.ecsra = RMMI_DISABLE_REPORT;
+
+    rmmi_ptr_g->report_mode.cscon = RMMI_DISABLE_REPORT;
+    
+    rmmi_ptr_g->report_mode.evocd = RMMI_DISABLE_REPORT;
+    rmmi_ptr_g->report_mode.erlm_mode = RMMI_DISABLE_REPORT;
+    rmmi_ptr_g->report_mode.esimecc = RMMI_ENABLE_REPORT;
+    rmmi_ptr_g->report_mode.emodcfg = RMMI_DISABLE_REPORT;
+    rmmi_ptr_g->report_mode.ereginfo = RMMI_DISABLE_REPORT;
+    rmmi_ptr_g->report_mode.eimsps = RMMI_DISABLE_REPORT;
+    rmmi_ptr_g->report_mode.eimscons = RMMI_DISABLE_REPORT;
+    rmmi_ptr_g->report_mode.eltebwinfo = RMMI_DISABLE_REPORT;
+    rmmi_ptr_g->report_mode.eacb = RMMI_DISABLE_REPORT;
+	
+    /* AT+EPPI=<n> default value*/	
+    rmmi_ptr_g->report_mode.eppi = RMMI_DISABLE_REPORT;
+//#ifdef __FAST_ROAMING_SEARCH__
+    rmmi_ptr_g->report_mode.efmcc = RMMI_DISABLE_REPORT;
+//endif
+
+    /* AT+EIMSESS=<n> default value*/
+	rmmi_ptr_g->report_mode.eimsess = RMMI_DISABLE_REPORT;
+
+#ifdef __IMS_SUPPORT__
+    rmmi_ptr_g->report_mode.eacb = RMMI_ENABLE_REPORT;
+#else
+    rmmi_ptr_g->report_mode.eacb = RMMI_DISABLE_REPORT;
+#endif
+
+    rmmi_ptr_g->report_mode.eplwth = RMMI_DISABLE_REPORT;
+
+    /* AT+ERCEFC=<n> default value*/
+	rmmi_ptr_g->report_mode.ercefc = RMMI_DISABLE_REPORT;
+
+    /* AT+ICCID=<n> default value */
+    rmmi_ptr_g->report_mode.iccid = RMMI_DISABLE_REPORT;
+
+    /* AT+ECBDINFO=<n> default value */
+    rmmi_ptr_g->report_mode.ecbdinfo_mode = RMMI_DISABLE_REPORT;
+#ifdef  __EPSFB_SUPPORT__
+    rmmi_ptr_g->report_mode.cepsfb = 0;
+#endif
+
+    /* AT+EOPS=6 default value for latest cell plmn URC */
+    rmmi_ptr_g->report_mode.eopsu = RMMI_DISABLE_REPORT;
+
+    /* AT+EATNUSD=<n> default value */
+    rmmi_ptr_g->report_mode.eatnusd= RMMI_DISABLE_REPORT;
+
+    /* +EPCELLINFO*/
+    rmmi_ptr_g->report_mode.epcellinfo= RMMI_DISABLE_REPORT;
+
+    /* AT+EDSDA=<n> default value */
+    rmmi_ptr_g->report_mode.edsda = RMMI_DISABLE_REPORT;
+
+    /* AT+EDMFAPP default value*/
+    rmmi_ptr_g->report_mode.edmfapp = RMMI_ENABLE_REPORT;
+
+    rmmi_ptr_g->report_mode.cladn = RMMI_ENABLE_REPORT;
+
+    /* AT+ECAMPUI=<n> default value */
+    rmmi_ptr_g->report_mode.ecampui = RMMI_DISABLE_REPORT;
+
+    /* AT+EREJINFO=<n> default value */
+    rmmi_ptr_g->report_mode.erejinfo = RMMI_DISABLE_REPORT;
+
+#ifdef __TC10__
+    /* AT+EGTCHS=<n> default value*/
+    rmmi_ptr_g->report_mode.egtchs   = RMMI_DISABLE_REPORT;
+#endif
+
+    /* AT+ETXPWRSTUS=<n> default value */
+#ifdef __SAR_SENSOR_TX_DETECTION_SUPPORT__
+    rmmi_ptr_g->report_mode.etxpwrstus= 0xff;
+#endif
+
+#ifdef  __TC01_IMS_SUPPORT__
+    rmmi_ptr_g->report_mode.euacalv = RMMI_ENABLE_REPORT;
+#else
+    rmmi_ptr_g->report_mode.euacalv = RMMI_DISABLE_REPORT;
+#endif
+
+    /* AT+ENWCFGINFO=<n> default value */
+    rmmi_ptr_g->report_mode.enwcfginfo = RMMI_ENABLE_REPORT;
+
+    /* AT+ENRCABAND=<n> default value */
+    rmmi_ptr_g->report_mode.enrcaband = RMMI_DISABLE_REPORT;
+
+    /* AT+E5GUW=<n> default value */
+    rmmi_ptr_g->report_mode.e5guw = RMMI_DISABLE_REPORT;
+
+    /* +EPNWCAUSE URC */
+    rmmi_ptr_g->report_mode.epnwcause = RMMI_DISABLE_REPORT;
+
+#endif /* L4_NOT_PRESENT */
+}
+
+/*****************************************************************************
+* FUNCTION
+*  	atp_custom_ps_uart_port()
+* DESCRIPTION
+*   	This function is to provide custom_ps_uart_port setting for ATP
+*
+* PARAMETERS
+*	NONE
+*
+* RETURNS
+*
+*****************************************************************************/
+UART_PORT atp_custom_ps_uart_port(void)
+{
+    // uart_port_null => won't open extra port
+
+#if 0
+/* under construction !*/
+#if defined(__SMART_PHONE_MODEM__) && !defined(__FLAVOR_MULTI_MODE_ROUTER__) && !defined(__FLAVOR_SINGLE_MODE_ROUTER__)
+/* under construction !*/
+#else
+/* under construction !*/
+#endif
+#endif
+    return uart_port_null;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  	atp_custom_urc_channel()
+* DESCRIPTION
+*   This function is to decide the URC will be sent to specific port or not
+*
+* PARAMETERS
+*	NONE
+*
+* RETURNS
+*   KAL_TRUE: send URC to the port
+*   KAL_FALSE: DO NOT send URC to the port
+*****************************************************************************/
+kal_bool atp_custom_urc_channel(kal_uint8 port)
+{
+    // In default, only sent URC to PS_UART_PORT
+
+    if (port == PS_UART_PORT)
+    {
+        return KAL_TRUE;
+    }
+
+    return KAL_FALSE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  	rmmi_get_vgr_default_setting()
+* DESCRIPTION
+*   	This function is to define default setting for ATE
+*
+* PARAMETERS
+*	NONE
+*
+* RETURNS
+*
+*****************************************************************************/
+void rmmi_get_vgr_default_setting(kal_bool *customer_provided, kal_uint8 *vgr_gain)
+{
+    *customer_provided = KAL_FALSE;
+    *vgr_gain = 150;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  	rmmi_get_vgt_default_setting()
+* DESCRIPTION
+*   	This function is to define default setting for ATE
+*
+* PARAMETERS
+*	NONE
+*
+* RETURNS
+*
+*****************************************************************************/
+void rmmi_get_vgt_default_setting(kal_bool *customer_provided, kal_uint8 *vgt_gain)
+{
+    *customer_provided = KAL_FALSE;
+    *vgt_gain = 150;
+}
+
+
+
+/*****************************************************************************
+* FUNCTION
+*  	rmmi_remove_listing_at_command()
+* DESCRIPTION
+*   	
+* PARAMETERS
+*	NONE
+*
+* RETURNS
+*
+*****************************************************************************/
+kal_bool rmmi_remove_listing_at_command(kal_char const *rsp_str)
+{
+/* If you don't want to list some at command, you can refer the following example.
+    If you don't list ata and at+casp, please refer the following code.*/
+/*	
+       if (strcmp(rsp_str, "a") == 0 || strcmp(rsp_str, "casp") == 0)
+	{
+		return KAL_FALSE;
+	}
+*/
+	return KAL_TRUE;
+}
+/*****************************************************************************
+* FUNCTION
+*  	rmmi_add_listing_at_command()
+* DESCRIPTION
+*   	
+* PARAMETERS
+*	NONE
+*
+* RETURNS
+*
+*****************************************************************************/
+kal_uint16 rmmi_add_listing_at_command(kal_char **rsp_str)
+{
+/* If you want to list some custom at command, you can refer the following example.
+    If you list at+aaaa and at+bbbb, please refer the following code.*/
+/*    
+    rsp_str[0]="at+aaaa\0";
+    rsp_str[1]="at+bbbb\0";
+
+    return 2; // total 2 at command (at+aaaa and at+bbbb)
+*/
+    return 0;
+}
+
+#endif /* L4_NOT_PRESENT */
+
diff --git a/mcu/custom/protocol/common/ps/custom_cise_config.c b/mcu/custom/protocol/common/ps/custom_cise_config.c
new file mode 100644
index 0000000..99c39c3
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_cise_config.c
@@ -0,0 +1,603 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*
+**   Includes
+*/
+#include "kal_general_types.h"
+
+#include "custom_cise_config.h"
+#include "custom_rrce_config.h"
+
+#ifdef __AS_SPECIFIC_CHANNEL_SRCH__
+kal_bool uas_custom_specific_channel_srch = KAL_FALSE;
+#endif
+
+#ifdef __34G_PINGPONG_RESTRAIN__
+kal_bool uas_custom_34G_pingpong_restrain = KAL_TRUE;
+#endif
+
+/*
+**   Macros
+*/
+
+// Number of elements in custom_plmnid_priority_table
+#define CUSTOM_BAND_PRIORITY_PER_PLMN_LIST_NUM (3)
+
+/* Minumum Vlue should be 1000 ms(1 sec) and Maximum can be 5000 ms( 5 sec) */
+#define  FDD_CUSTOM_TRESEL_THRESHOLD_FOR_LTE_CELL_IN_MS (1000)
+
+/**
+ * The specific channels
+ * How to use:
+ * Max number is define in NUM_OF_SPECIFIC_CHANNELS.
+ * If user only want to config UARFCNs less than NUM_OF_SPECIFIC_CHANNELS in some band, just fill invalid UARFCN.
+ * For example, if band 1 only need 3 UARFCNs, just fill {10562,10563,10564,0xffff}
+ */
+kal_uint16 specific_uarfcn[NUM_OF_UMTS_BANDS][NUM_OF_SPECIFIC_CHANNELS]     = 
+{
+    {10562,10563,10564,10838}, /* band  1 */
+    { 9662, 9663, 9664, 9938}, /* band  2 */
+    { 1162, 1163, 1164, 1513}, /* band  3 */
+    { 1537, 1538, 1539, 1738}, /* band  4 */
+    { 4357, 4358, 4359, 4458}, /* band  5 */
+    { 4387, 4388, 4389, 4413}, /* band  6 */
+    { 2237, 2238, 2239, 2563}, /* band  7 */
+    { 2937, 2938, 2939, 3088}, /* band  8 */
+    { 9237, 9238, 9239, 9387}, /* band  9 */
+    { 3112, 3113, 3114, 3388}, /* band 10 */
+    { 3712, 3713, 3714, 3787}, /* band 11 */
+    { 3842, 3843, 3844, 3903}, /* band 12 */
+    { 4017, 4018, 4019, 4043}, /* band 13 */
+    { 4117, 4118, 4119, 4143}, /* band 14 */
+    {65535,65535,65535,65535}, /* band 15 *//* !! Reserved !! */
+    {65535,65535,65535,65535}, /* band 16 *//* !! Reserved !! */
+    {65535,65535,65535,65535}, /* band 17 *//* !! Reserved !! */
+    {65535,65535,65535,65535}, /* band 18 *//* !! Reserved !! */
+    {  712,  713,  714,  763}, /* band 19 */
+    { 4512, 4513, 4514, 4512}, /* band 20 */
+    {  862,  867,  868,  912}, /* band 21 */
+    { 4662, 4663, 4664, 5038}  /* band 22 */
+};
+/* add tdd specific bands/channels, beggin with band34 */
+kal_uint16 tdd_specific_uarfcn[NUM_OF_UMTS_TDD_BANDS][NUM_OF_SPECIFIC_CHANNELS]     = 
+{
+    {10090, 10082, 65535, 65535}, /* band  34(A) */
+    {65535, 65535, 65535, 65535}, /* band  35(B) */
+    {65535, 65535, 65535, 65535}, /* band  36(C) */
+    {65535, 65535, 65535, 65535}, /* band  37(D) */
+    {65535, 65535, 65535, 65535}, /* band  38(E) */
+    {65535, 65535, 65535, 65535}, /* band  39(F) */
+};
+
+/*  predefined stored uarfcn list Customization, 
+ *  the array length should not exceed 20,
+ *  invalid value 65535
+ */
+
+kal_uint16 preDefinedCustomFreqList[CUSTOM_PREDEFINE_FREQ_LIST_NUM] = 
+{
+	10054, 10062, 10070, 10114,
+	10121, 10055, 10063, 10071,
+	10112, 10120, 10060, 10066,
+	10072, 10088, 10107, 10092,
+	65535, 65535, 65535, 65535,
+};
+
+/*
+  Refer "custom_plmnid_priority_table_type" in "custom_cise_config.h" for the structure definition
+  First element of the structure contains PLMN in decimal format. 
+  For ex. PLMN id 530/05f is represented is marked as 53005. 
+  PLMN id. with PLMN id 405/847 (MCC=405, MNC=847) is represented as 405847
+
+  Band priorities for band 1 is present as first element in "band_priority". Band 2 priority is present as second element and so on
+  In the table below, for PLMN id 53005 has priority 0x02 for band 1, 0xff for band 2 and so on.
+
+  Lower the priority number, higher the band priority. priority value = 1 means highest priority. value =0xff means least priority
+  
+  CUSTOM_BAND_PRIORITY_PER_PLMN_LIST_NUM to be updated if the custom table size changes
+  
+*/
+
+custom_plmnid_priority_table_type custom_plmnid_priority_table[CUSTOM_BAND_PRIORITY_PER_PLMN_LIST_NUM] = 
+{
+    {{53005},//Spark New Zealand
+     {0x02, 0xFF, 0xFF, 0xFF, 0x01,
+      0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+      0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+      0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+      0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+      0xFF}},
+    {{50502},//50502 VHA
+     {0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+      0xFF, 0xFF, 0x01, 0xFF, 0xFF,
+      0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+      0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+      0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+      0xFF}},
+    {{50503},//50503 VHA
+     {0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+      0xFF, 0xFF, 0x01, 0xFF, 0xFF,
+      0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+      0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+      0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+      0xFF}}   
+};
+
+/*
+  If band priority for PLMN is not configured, return default band priority.
+  Below table contains default band priority
+*/
+custom_plmnid_priority_table_type default_plmnid_priority_type = {
+    {0xFFFFFF},//default PLMN
+     {0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+     0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+     0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+     0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+     0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+     0xFF}
+};
+
+const custom_plmn_list CUSTOM_CSFB_COMBINED_SEARCH_PLMN[] = 
+{
+/* New MCCMNC can be added by customer in this as below. But make sure that it is either 5 digit or 6 digit and should not have*/
+    {46001}
+};
+
+/* Initialize PLMN filter for Fast Redirection, currently only CU */
+custom_plmn_id_struct plmnFilterForFastRedir = {4,6,0,0,1,0xF};
+
+const kal_uint32 CUSTOM_CSFB_COMBINED_SEARCH_PLMN_LIST_NUM = sizeof(CUSTOM_CSFB_COMBINED_SEARCH_PLMN)/sizeof(custom_plmn_list);
+
+/* For customer to determine support Standard Fast Return or not */
+
+/*****************************************************************************
+* FUNCTION
+*  CSCE_IsSupportStdFR
+*
+* DESCRIPTION
+*
+*  this function allow customer to determine support Standard Fast Return or not
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_bool CSCE_IsSupportStdFR (void)
+{
+    /********************************************* 
+     KAL_TRUE: support Standard Fast Return 
+     KAL_FALSE: not support Standard Fast Return 
+    *********************************************/
+   return KAL_TRUE;
+   //return KAL_FALSE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  uas_custom_is_specific_channel_srch
+* DESCRIPTION
+*   The function returns whether UE is in specific channel search mode.
+*
+* PARAMETERS
+*  Void
+* RETURNS
+*  kal_bool
+*  TRUE: specific channel search mode, FALSE: normal search mode
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool uas_custom_is_specific_channel_srch(void)
+{
+#ifdef __AS_SPECIFIC_CHANNEL_SRCH__
+    return uas_custom_specific_channel_srch;
+#else
+    return KAL_FALSE;
+#endif 
+}
+
+/*****************************************************************************
+* FUNCTION
+*  uas_custom_is_34G_pingpong_restrain
+* DESCRIPTION
+*   The function returns whether 34G pingpong restrain is enabled.
+*
+* PARAMETERS
+*  Void
+* RETURNS
+*  kal_bool
+*  TRUE: 34G pingpong restrain is enabled, FALSE: 34G pingpong restrain is disabled
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool uas_custom_is_34G_pingpong_restrain(void)
+{
+#ifdef __34G_PINGPONG_RESTRAIN__
+    return uas_custom_34G_pingpong_restrain;
+#else
+    return KAL_FALSE;
+#endif 
+}
+
+#ifdef __AS_SPECIFIC_CHANNEL_SRCH__
+/*****************************************************************************
+* FUNCTION
+*  uas_custom_set_specific_channel_srch
+* DESCRIPTION
+*   The function set specific search mode.
+*
+* PARAMETERS
+*   kal_bool
+*   TRUE: set specific search mode, FALSE: disable specific search mode.
+* RETURNS
+*   Void
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+void uas_custom_set_specific_channel_srch( kal_bool set_value )
+{
+    uas_custom_specific_channel_srch = set_value;
+}
+#endif /* __AS_SPECIFIC_CHANNEL_SRCH__ */
+
+#ifdef __34G_PINGPONG_RESTRAIN__
+/*****************************************************************************
+* FUNCTION
+*  uas_custom_set_34G_pingpong_restrain
+* DESCRIPTION
+*   The function set 34G_pingpong_restrain.
+*
+* PARAMETERS
+*   kal_bool
+*   TRUE: 34G pingpong restrain is enabled, FALSE: 34G pingpong restrain is disabled.
+* RETURNS
+*   Void
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+void uas_custom_set_34G_pingpong_restrain( kal_bool set_value )
+{
+    uas_custom_34G_pingpong_restrain = set_value;
+}
+#endif 
+
+/*****************************************************************************
+* FUNCTION
+*  uas_custom_get_specific_channel
+* DESCRIPTION
+*   UAS use this function to get specific channel
+*
+* PARAMETERS
+*   band            : which band to get
+*   specificChannel : point to return UARFCN
+* RETURNS
+*  kal_bool         : Success return TRUE
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool uas_custom_get_specific_channel( kal_uint8 band, kal_uint16 *specificChannel)
+{
+    kal_bool ret = KAL_TRUE;
+    kal_uint8 i;
+
+    if ((band >= 0) && (band < NUM_OF_UMTS_BANDS))
+    {
+        for (i=0;i<NUM_OF_SPECIFIC_CHANNELS;i++)
+        {
+            *(specificChannel + i) = specific_uarfcn[band][i];
+        }
+    }
+    else
+    {
+        ret = KAL_FALSE;
+    }
+
+    return ret;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  uas_custom_set_specific_channel
+* DESCRIPTION
+*   use this function to set specific channel
+*
+* PARAMETERS
+*   band            : which band to set
+*   specificChannel : UARFCN to set
+* RETURNS
+*  kal_bool         : Success return TRUE
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool uas_custom_set_specific_channel( kal_uint8 band, kal_uint16 *specificChannel)
+{
+    kal_bool ret = KAL_TRUE;
+    kal_uint8 i;
+
+    /**
+     * We'll not check input UARFCN here.
+     * When UAS use specific channel, UAS will check:
+     *  1> UARFCN is valid or not
+     *  2> UARFCN is in UE support band or not
+     */
+    if ((band >= 0) && (band < NUM_OF_UMTS_BANDS))
+    {
+        for (i=0;i<NUM_OF_SPECIFIC_CHANNELS;i++)
+        {
+            specific_uarfcn[band][i] = *(specificChannel + i);
+        }
+    }
+    else
+    {
+        ret = KAL_FALSE;
+    }
+
+    return ret;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  tdd_uas_custom_get_specific_channel
+* DESCRIPTION
+*   UAS use this function to get tdd specific channel
+*
+* PARAMETERS
+*   band            : which band to get
+*   specificChannel : point to return UARFCN
+* RETURNS
+*  kal_bool         : Success return TRUE
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool tdd_uas_custom_get_specific_channel(kal_uint8 band, kal_uint16 *specificChannel)
+{
+    kal_bool ret = KAL_TRUE;
+    kal_uint8 i;
+
+    if ((band >= 0) && (band < NUM_OF_UMTS_TDD_BANDS))
+    {
+        for (i=0; i<NUM_OF_SPECIFIC_CHANNELS; i++)
+        {
+            *(specificChannel + i) = tdd_specific_uarfcn[band][i];
+        }
+    }
+    else
+    {
+        ret = KAL_FALSE;
+    }
+
+    return ret;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  tdd_uas_custom_set_specific_channel
+* DESCRIPTION
+*   use this function to set tdd specific channel
+*
+* PARAMETERS
+*   band            : which band to set
+*   specificChannel : UARFCN to set
+* RETURNS
+*  kal_bool         : Success return TRUE
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool tdd_uas_custom_set_specific_channel(kal_uint8 band, kal_uint16 *specificChannel)
+{
+    kal_bool ret = KAL_TRUE;
+    kal_uint8 i;
+    
+    /**
+     * We'll not check input UARFCN here.
+     * When UAS use specific channel, UAS will check:
+     *  1> UARFCN is valid or not
+     *  2> UARFCN is in UE support band or not
+     */
+    if ((band >= 0) && (band < NUM_OF_UMTS_TDD_BANDS))
+    {
+        for (i=0; i<NUM_OF_SPECIFIC_CHANNELS; i++)
+        {
+            tdd_specific_uarfcn[band][i] = *(specificChannel + i);
+        }
+    }
+    else
+    {
+        ret = KAL_FALSE;
+    }
+
+    return ret;
+}
+/*****************************************************************************
+* FUNCTION
+*  tdd_uas_custom_get_predefined_freq
+* DESCRIPTION
+*  use this function to get customer predefine stored frequency list
+*
+* PARAMETERS
+*  preDefinedFreqList: uarfcn to set
+* RETURNS
+*  kal_uint8 num : valid uarfcn number
+*
+*****************************************************************************/
+
+kal_uint8 tdd_uas_custom_get_predefined_freq(kal_uint16 *preDefinedFreqList)
+{
+	kal_uint8 i;
+	kal_uint8 num = 0;
+
+	for(i = 0; i < CUSTOM_PREDEFINE_FREQ_LIST_NUM; i++)
+	{
+		if(preDefinedCustomFreqList[i] != 0xffff)
+		{
+			*(preDefinedFreqList+num) = preDefinedCustomFreqList[i];
+			num++;
+		}
+	}
+
+	return num;
+}
+
+
+extern kal_bool fdd_uas_custom_plmn_for_csfb_combined_search(void* plmn_id)
+{
+    kal_uint32 mccmnc;
+    kal_uint32 i;
+    CUSTOM_RRC_PLMN_Identity* rrc_plmn = (CUSTOM_RRC_PLMN_Identity*)plmn_id;
+
+    mccmnc = rrc_plmn->mcc.element[0];                        // mcc1
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mcc.element[1]);      // mcc2
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mcc.element[2]);        // mcc3
+
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[0]);      // mnc1
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[1]);        // mnc2
+    if (rrc_plmn->mnc.numElements == 3)
+    {
+       mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[2]);  // mnc3
+    }
+        
+    for(i = 0; i < CUSTOM_CSFB_COMBINED_SEARCH_PLMN_LIST_NUM; i++)
+    {    
+        if(CUSTOM_CSFB_COMBINED_SEARCH_PLMN[i].mccMnc == 0xFFFFFF)    
+        {
+           return KAL_TRUE;
+        }
+        else if(CUSTOM_CSFB_COMBINED_SEARCH_PLMN[i].mccMnc == mccmnc)
+        {    // Found in the table
+            return KAL_TRUE;
+        }
+    }
+
+    return KAL_FALSE;
+ 
+}
+
+kal_int32 fdd_uas_custom_plmn_compare(void const* plmn_id)
+{
+    kal_int32 valThis;
+    kal_int32 valPlmnIdToCompare;
+    
+    CUSTOM_RRC_PLMN_Identity* req_plmn = (CUSTOM_RRC_PLMN_Identity*)plmn_id;
+    
+    if(req_plmn->mnc.numElements == 2)
+    {
+        req_plmn->mnc.element[2] = 0XF;
+    }
+    
+    valThis = req_plmn->mcc.element[0] << 20;
+    valThis |= req_plmn->mcc.element[1] << 16;
+    valThis |= req_plmn->mcc.element[2] << 12;
+    valThis |= req_plmn->mnc.element[0] << 8;
+    valThis |= req_plmn->mnc.element[1] << 4;
+    valThis |= req_plmn->mnc.element[2] << 0;
+
+    valPlmnIdToCompare = plmnFilterForFastRedir.mcc1 << 20;
+    valPlmnIdToCompare |= plmnFilterForFastRedir.mcc2 << 16;
+    valPlmnIdToCompare |= plmnFilterForFastRedir.mcc3 << 12;
+    valPlmnIdToCompare |= plmnFilterForFastRedir.mnc1 << 8;
+    valPlmnIdToCompare |= plmnFilterForFastRedir.mnc2 << 4;
+    valPlmnIdToCompare |= plmnFilterForFastRedir.mnc3 << 0;
+
+    return valThis - valPlmnIdToCompare;	
+}
+
+/*****************************************************************************
+* FUNCTION
+*  fdd_uas_custom_get_band_priority_for_plmn
+* DESCRIPTION
+*  use this function to get band priority for particular PLMN
+*
+* PARAMETERS
+*  plmn_id: plmn id to which band priority needs to be fetched
+* RETURNS
+*  kal_uint8 * : pointer to band priority of the PLMN
+*
+*****************************************************************************/
+
+
+
+kal_uint8 * fdd_uas_custom_get_band_priority_for_plmn(void* plmn_id)
+{
+    kal_uint32 mccmnc;
+    kal_uint32 i;
+    CUSTOM_RRC_PLMN_Identity* rrc_plmn = (CUSTOM_RRC_PLMN_Identity*)plmn_id;
+
+    mccmnc = rrc_plmn->mcc.element[0];                        // mcc1
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mcc.element[1]);      // mcc2
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mcc.element[2]);        // mcc3
+
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[0]);      // mnc1
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[1]);        // mnc2
+    if (rrc_plmn->mnc.numElements == 3)
+    {
+       mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[2]);  // mnc3
+    }
+        
+    for(i = 0; i < CUSTOM_BAND_PRIORITY_PER_PLMN_LIST_NUM; i++)
+    {    
+        if(custom_plmnid_priority_table[i].custom_plmn_id.mccMnc == mccmnc)    
+        {
+           return (custom_plmnid_priority_table[i].band_priority);
+        }
+    }
+
+
+    /*
+     * Return default band priorities if custom table does not have an entry for the PLMN
+     * Null pointer should not be returned
+     */
+    return (default_plmnid_priority_type.band_priority);
+
+}
+
+/*****************************************************************************
+* FUNCTION
+*  fdd_uas_get_custom_t_resel_for_lte_cell
+* DESCRIPTION
+*  use this function to get the custome interratTreselectionscaling factor 
+*
+* PARAMETERS
+*  None:
+* RETURNS
+*  kal_uint32 : FDD_CUSTOM_TRESEL_THRESHOLD_FOR_LTE_CELL_IN_MS
+*
+*****************************************************************************/
+extern kal_uint32 fdd_uas_get_custom_t_resel_for_lte_cell(void)
+{
+    return FDD_CUSTOM_TRESEL_THRESHOLD_FOR_LTE_CELL_IN_MS;
+}
\ No newline at end of file
diff --git a/mcu/custom/protocol/common/ps/custom_cise_config.h b/mcu/custom/protocol/common/ps/custom_cise_config.h
new file mode 100644
index 0000000..fd2d822
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_cise_config.h
@@ -0,0 +1,133 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_cise_config.h
+ *
+ * Project:
+ * --------
+ *   MONZA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the CISE configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifndef _CUSTOM_CISE_CONFIG_H
+#define _CUSTOM_CISE_CONFIG_H
+
+#include "kal_general_types.h"
+
+#include "custom_rrce_config.h"
+
+
+/* The number of specific channels */
+#define NUM_OF_SPECIFIC_CHANNELS    4
+#define NUM_OF_UMTS_BANDS           22
+#define NUM_OF_UMTS_TDD_BANDS       6
+
+/* predefined stored uarfcn list length for customization */
+#define CUSTOM_PREDEFINE_FREQ_LIST_NUM 20
+
+#define BAND_PRIORITY_LENGTH_IN_BYTES (26) 
+
+typedef struct custom_plmnid_priority_table_type
+{
+   custom_plmn_list            custom_plmn_id; 
+   kal_uint8 band_priority[BAND_PRIORITY_LENGTH_IN_BYTES];
+} custom_plmnid_priority_table_type;
+
+
+/*************************************************************************
+* Structure definitions
+*************************************************************************/
+
+typedef struct _custom_plmn_id_struct {
+  kal_uint8 mcc1;
+  kal_uint8 mcc2;
+  kal_uint8 mcc3;
+  kal_uint8 mnc1;
+  kal_uint8 mnc2;
+  kal_uint8 mnc3;
+} custom_plmn_id_struct;
+
+/*************************************************************************
+* Function
+*************************************************************************/
+
+extern kal_bool CSCE_IsSupportStdFR(void);
+
+extern kal_bool uas_custom_is_specific_channel_srch(void);
+extern kal_bool uas_custom_is_34G_pingpong_restrain(void);
+
+#ifdef __AS_SPECIFIC_CHANNEL_SRCH__
+extern void uas_custom_set_specific_channel_srch( kal_bool set_value );
+#endif /* __AS_SPECIFIC_CHANNEL_SRCH__ */
+#ifdef __34G_PINGPONG_RESTRAIN__
+extern void uas_custom_set_34G_pingpong_restrain( kal_bool set_value );
+#endif /* __AS_SPECIFIC_CHANNEL_SRCH__ */
+
+extern kal_bool uas_custom_get_specific_channel( kal_uint8 band, kal_uint16 *specificChannel);
+extern kal_bool uas_custom_set_specific_channel( kal_uint8 band, kal_uint16 *specificChannel);
+extern kal_bool tdd_uas_custom_get_specific_channel(kal_uint8 band, kal_uint16 *specificChannel);
+extern kal_bool tdd_uas_custom_set_specific_channel(kal_uint8 band, kal_uint16 *specificChannel);
+
+extern kal_uint8 tdd_uas_custom_get_predefined_freq(kal_uint16 *preDefinedFreqList);
+
+extern kal_bool fdd_uas_custom_plmn_for_csfb_combined_search(void* plmn_id);
+
+extern kal_int32 fdd_uas_custom_plmn_compare(void const* plmn_id);
+
+kal_uint8 * fdd_uas_custom_get_band_priority_for_plmn(void* plmn_id);
+
+extern kal_uint32 fdd_uas_get_custom_t_resel_for_lte_cell(void);
+
+#endif /* _CUSTOM_CISE_CONFIG_H */
+
diff --git a/mcu/custom/protocol/common/ps/custom_config_check.c b/mcu/custom/protocol/common/ps/custom_config_check.c
new file mode 100644
index 0000000..8ed4f90
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_config_check.c
@@ -0,0 +1,154 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ *   custom_config_check.c
+ *
+ * Project:
+ * --------
+ *   Moly_Software
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the GMSS configuration that can be customized
+ *
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "gmss_public.h"
+
+
+/************************************************************************************************
+For MT6291 Universal modem BIN (UBIN)
+
+- World Mode ID (WM-ID): defined by feature option MTK_MD1_SUPPORT in project configuration file
+  - Ex. MTK_MD1_SUPPORT =  9 (uLWG:     LTE-FDD + TD-LTE + WCDMA + GSM)
+  - Ex. MTK_MD1_SUPPORT = 10 (uLWTG:    LTE-FDD + TD-LTE + WCDMA + TD-SCDMA + GSM)
+  - Ex. MTK_MD1_SUPPORT = 12 (uLWCTG:   LTE-FDD + TD-LTE + WCDMA + CDMA + TD-SCDMA + GSM)
+  - Ex. MTK_MD1_SUPPORT = 13 (uLtTG:    TD-LTE + TD-SCDMA + GSM)
+
+- Support Band: defined in modem NVRAM record NVRAM_EF_AS_BAND_SETTING_LID
+
+- For each RAT in WM-ID, there must be at least one support band defined!!
+  - Ex. If the project suppots TD-LTE/TD-SCDMA/GSM
+    - MTK_MD1_SUPPORT shall be set to 13 (uLtTG)
+    - There shall be valid band settings for TD-LTE/TD-SCDMA/GSM in NVRAM
+
+************************************************************************************************/
+void custom_check_wm_id_support_band_collision(kal_uint8 wm_id, kal_uint8 invalid_rat, kal_uint8 support_band)
+{
+    /* Check LTE */
+    if (((wm_id & GMSS_WM_ID_MASK_LTE_FDD) != 0 && (invalid_rat & GMSS_WM_ID_MASK_LTE_FDD) == 0) &&
+        ((wm_id & GMSS_WM_ID_MASK_LTE_TDD) != 0 && (invalid_rat & GMSS_WM_ID_MASK_LTE_TDD) == 0))
+    {
+        if (((support_band & GMSS_WM_ID_MASK_LTE_FDD) == 0) && ((support_band & GMSS_WM_ID_MASK_LTE_TDD) == 0))
+        {
+            ASSERT(0); /* WM-ID contains LTE-FDD and TD-LTE, but no valid support band */
+        }
+    }
+    /* Check LTE-FDD */
+    else if ((wm_id & GMSS_WM_ID_MASK_LTE_FDD) != 0 && (invalid_rat & GMSS_WM_ID_MASK_LTE_FDD) == 0)
+    {
+        if ((support_band & GMSS_WM_ID_MASK_LTE_FDD) == 0)
+        {
+            ASSERT(0); /* WM-ID contains LTE-FDD, but no valid support band */
+        }
+    }
+    /* Check TD-LTE */
+    else if ((wm_id & GMSS_WM_ID_MASK_LTE_TDD) != 0 && (invalid_rat & GMSS_WM_ID_MASK_LTE_TDD) == 0)
+    {
+        if ((support_band & GMSS_WM_ID_MASK_LTE_TDD) == 0)
+        {
+            ASSERT(0); /* WM-ID contains TD-LTE, but no valid support band */
+        }
+    }
+
+    /* Check WCDMA */
+    if ((wm_id & GMSS_WM_ID_MASK_WCDMA) != 0 && (invalid_rat & GMSS_WM_ID_MASK_WCDMA) == 0)
+    {
+        if ((support_band & GMSS_WM_ID_MASK_WCDMA) == 0)
+        {
+            ASSERT(0); /* WM-ID contains WCDMA, but no valid support band */
+        }
+    }
+
+    /* Check TD-SCDMA */
+    if ((wm_id & GMSS_WM_ID_MASK_TDSCDMA) != 0 && (invalid_rat & GMSS_WM_ID_MASK_TDSCDMA) == 0)
+    {
+        if ((support_band & GMSS_WM_ID_MASK_TDSCDMA) == 0)
+        {
+            ASSERT(0); /* WM-ID contains TD-SCDMA, but no valid support band */
+        }
+    }
+
+    /* Check GSM */
+    if ((wm_id & GMSS_WM_ID_MASK_GSM) != 0 && (invalid_rat & GMSS_WM_ID_MASK_GSM) == 0)
+    {
+        if ((support_band & GMSS_WM_ID_MASK_GSM) == 0)
+        {
+            ASSERT(0); /* WM-ID contains GSM, but no valid support band */
+        }
+    }
+
+    return;
+}
+
+
diff --git a/mcu/custom/protocol/common/ps/custom_config_check.h b/mcu/custom/protocol/common/ps/custom_config_check.h
new file mode 100644
index 0000000..2fe73d2
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_config_check.h
@@ -0,0 +1,73 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   custom_config_check.h
+ *
+ * Project:
+ * --------
+ *   MONZA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the configurations of Selection customization feature
+ *
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef _CUSTOM_CONFIG_CHECK_H
+#define _CUSTOM_CONFIG_CHECK_H
+
+void custom_check_wm_id_support_band_collision(kal_uint8 wm_id, kal_uint8 invalid_rat, kal_uint8 support_band);
+
+#endif /* _CUSTOM_CONFIG_CHECK_H */
+
diff --git a/mcu/custom/protocol/common/ps/custom_country_initials.c b/mcu/custom/protocol/common/ps/custom_country_initials.c
new file mode 100644
index 0000000..1e9c83c
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_country_initials.c
@@ -0,0 +1,137 @@
+/*****************************************************************************
+*  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) 2015
+*
+*  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:
+ * ---------
+ * Custom_country_initials.c
+ *
+ * Description:
+ * ------------
+ *   This file is intends for Customer to define the country initials for EONS feature
+ *
+ * Author:
+ * -------
+ * 
+ *
+*****************************************************************************/
+
+#include "string.h"
+#include "kal_general_types.h"
+
+#define COUNTRY_INITIALS_ENTRIES    (sizeof(country_initials_table)/sizeof(country_initials_table[0]))
+
+/* -----------PLEASE ADJUST HERE to define country initials-----------------  */
+/* ----- NOTE:   country initials string can only up to 3 characters (including space) -------   */
+char* country_initials_table[][2] = {
+
+            {"310", "US "}, /* US */
+            {"311", "US "}, /* US */
+            {"312", "US "}, /* US */
+            {"313", "US "}, /* US */
+            {"314", "US "}, /* US */
+            {"315", "US "}, /* US */
+            {"316", "US "}, /* US */
+
+            {"",    ""} /* default: "" indicate the last one */
+};
+
+
+/*------ Please do not change below functions ------------------*/
+kal_uint16 custom_get_max_ci_count(void);
+kal_bool custom_get_ci_by_mcc(const kal_uint8 *mcc_str, kal_uint8 *ci_str);				
+
+
+/*****************************************************************************
+* FUNCTION
+*  custom_get_max_ci_count
+* DESCRIPTION
+*   This function returns COUNTRY_INITIALS_ENTRIES defined by customer
+*
+* PARAMETERS
+*   
+* RETURNS
+*  kal_uint16
+*
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint16 custom_get_max_ci_count(void)
+{
+   return (COUNTRY_INITIALS_ENTRIES);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_get_ci_by_mcc
+* DESCRIPTION
+*   This function gets country initials through mcc
+*
+* PARAMETERS
+*   IN: mcc_str
+*   OUT: ci_str
+*   
+* RETURNS
+*  kal_bool 
+*  KAL_TRUE: Success
+*  KAL_FALSE: mcc_str not found
+*
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool custom_get_ci_by_mcc(const kal_uint8 *mcc_str, kal_uint8 *ci_str)
+{
+    kal_uint16 index;
+
+    if (NULL == mcc_str || NULL == ci_str)
+    {
+      return KAL_FALSE;
+    }
+
+    for(index = 0; index < COUNTRY_INITIALS_ENTRIES; index++)
+    {
+        if(strncmp((char *)mcc_str, (char *)country_initials_table[index][0], 3)== 0)
+        {
+            /* found entry in the table */
+            strncpy((char *)ci_str,(char *)country_initials_table[index][1], 3);
+            return KAL_TRUE;
+        }
+    }
+
+    /* cannot found in the table */
+    strcpy((char *)ci_str, "");
+    return KAL_FALSE;
+}
+
+
diff --git a/mcu/custom/protocol/common/ps/custom_d2_config.c b/mcu/custom/protocol/common/ps/custom_d2_config.c
new file mode 100644
index 0000000..4577706
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_d2_config.c
@@ -0,0 +1,5793 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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).
+*
+*****************************************************************************/
+
+#if defined(__MTK_TARGET__) || defined(__NANO_UT__)
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include <string.h>
+#else
+#include <windows.h>
+#include <shlwapi.h>
+#endif
+#include <stdlib.h>
+#include "custom_d2_config.h"
+#include "custom_d2_trc.h"
+#include "md_sap.h"
+#include "d2_msgid.h"
+#include "sim_public_api.h"
+#include "sbp_public_utility.h"
+//#include "ccci_if.h" //for SBP ccci misc info
+#include "ps_public_utility.h"
+#include "pdn_public_defs.h"
+#include "d2apn_public_defs.h"
+#include "d2um_public_defs.h"
+#include "d2cm_public_defs.h"
+#include "atcmd_enum.h"
+//#include "gmss_public.h"
+
+#include "d2pm_d2rm_struct.h"
+#include "rmmi_common_enum.h"
+#include "d2cm_struct.h"
+#include "d2pm_struct.h"
+#include "d2cm_custom_utility.h"
+#include "l4_ps_api.h"
+
+#define DDM_CUST_LOG(tag, format, ...)       kal_prompt_trace(tag, "(%4d) " format, __LINE__, ##__VA_ARGS__)
+
+extern void d2apn_custom_subscriber_msg_cb (kal_uint8 ps_id, msg_type msg_id, local_para_struct *local_para_ptr, void *arg);
+extern void d2_d2apn_subscriber_msg_cb (kal_uint8 ps_id, msg_type msg_id, local_para_struct *local_para_ptr, void *arg);
+extern void d2am_d2apn_subscriber_msg_cb (kal_uint8 ps_id, msg_type msg_id, local_para_struct *local_para_ptr, void *arg);
+extern void d2rm_d2apn_msg_handler (kal_uint8 ps_id, msg_type msg_id, local_para_struct *local_para_ptr, void *arg);
+
+event_scheduler *custom_d2_event_scheduler[MAX_SIM_NUM];
+ddm_deact_dangling_cid_ptr ddm_deact_dangling_cid_func_ptr;
+ddm_reset_retry_timer_on_apn_config_change_func_ptr ddm_reset_retry_timer_on_apn_config_change_callback;
+extern kal_uint32 sbp_query_id(void);
+extern void set_notify_interface_cb (d2_netif_interface_cb cb, void *user_data);
+// Type definitions
+extern kal_bool is_wifi_en(kal_uint8 ps_id);
+
+extern kal_uint32 sbp_query_id(void);
+
+static void DTAG_dual_apn(kal_uint8);
+static kal_bool hasOperatorId(const char *apn_full, char *apn_network_id);
+
+#if !defined(__MTK_TARGET__) && !defined(__NANO_UT__)
+#define strcasestr(haystack, needle) (StrStrI((haystack), (needle)))
+#endif
+
+// Macros
+kal_uint8 internet_cid[MAX_SIM_NUM];
+
+
+#define MOD_D2VZW    D2CM_CUSTOM_MOD_ID_OP
+#ifdef __GEMINI__
+#define MOD_D2VZW_2    D2CM_CUSTOM_MOD_ID_OP
+#if (GEMINI_PLUS >= 3)
+#define MOD_D2VZW_3    D2CM_CUSTOM_MOD_ID_OP
+#if (GEMINI_PLUS >= 4)
+#define MOD_D2VZW_4    D2CM_CUSTOM_MOD_ID_OP
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+
+
+// Global variables
+static kal_bool ddm_deact_cid_state[11];
+extern kal_bool last_internet_mode_is_enabled;
+
+
+/*********************************************************/
+/* ---- D2APN Custom Subscriber Profile Table Start ---- */
+/*********************************************************/
+d2apn_custom_subscriber_profile_struct d2apn_custom_subscriber_profile_tbl[][MAX_SIM_NUM] =
+{
+/*****************************************************************************/
+/*                               Built-in Part                               */
+/*                            Do NOT modify them.                            */
+/* The mod_id can be the same among PS, but must be different among modules. */
+/*****************************************************************************/
+    // D2PM
+    {
+        {    MOD_D2PM, D2APN_ATTR_CB_MSG, {.cb.ind_cb = d2apn_custom_subscriber_msg_cb, .cb.ind_cb_arg = (void*)556611}    },
+#ifdef __GEMINI__
+        {    MOD_D2PM_2, D2APN_ATTR_CB_MSG, {.cb.ind_cb = d2apn_custom_subscriber_msg_cb, .cb.ind_cb_arg = (void*)556622}    },
+#if (GEMINI_PLUS >= 3)
+        {    MOD_D2PM_3, D2APN_ATTR_CB_MSG, {.cb.ind_cb = d2apn_custom_subscriber_msg_cb, .cb.ind_cb_arg = (void*)556633}    },
+#if (GEMINI_PLUS >= 4)
+        {    MOD_D2PM_4, D2APN_ATTR_CB_MSG, {.cb.ind_cb = d2apn_custom_subscriber_msg_cb, .cb.ind_cb_arg = (void*)556644}    },
+#endif    /* GEMINI_PLUS >= 4 */
+#endif    /* GEMINI_PLUS >= 3 */
+#endif    /* __GEMINI__ */
+    },
+
+    // D2AT
+    {
+        {    MOD_D2AT, D2APN_ATTR_ILM_MSG, {.ilm.sap_id = ATP_D2AT_SAP}    },
+#ifdef __GEMINI__
+        {    MOD_D2AT_2, D2APN_ATTR_ILM_MSG, {.ilm.sap_id = ATP_D2AT_SAP}    },
+#if (GEMINI_PLUS >= 3)
+        {    MOD_D2AT_3, D2APN_ATTR_ILM_MSG, {.ilm.sap_id = ATP_D2AT_SAP}    },
+#if (GEMINI_PLUS >= 4)
+        {    MOD_D2AT_4, D2APN_ATTR_ILM_MSG, {.ilm.sap_id = ATP_D2AT_SAP}    },
+#endif    /* GEMINI_PLUS >= 4 */
+#endif    /* GEMINI_PLUS >= 3 */
+#endif    /* __GEMINI__ */
+    },
+
+    // D2RM
+    {
+        {    MOD_D2RM  , D2APN_ATTR_CB_MSG, {.cb.ind_cb = d2rm_d2apn_msg_handler, .cb.ind_cb_arg = NULL}    },
+#ifdef __GEMINI__
+        {    MOD_D2RM_2, D2APN_ATTR_CB_MSG, {.cb.ind_cb = d2rm_d2apn_msg_handler, .cb.ind_cb_arg = NULL}    },
+#if (GEMINI_PLUS >= 3)
+        {    MOD_D2RM_3, D2APN_ATTR_CB_MSG, {.cb.ind_cb = d2rm_d2apn_msg_handler, .cb.ind_cb_arg = NULL}    },
+#if (GEMINI_PLUS >= 4)
+        {    MOD_D2RM_4, D2APN_ATTR_CB_MSG, {.cb.ind_cb = d2rm_d2apn_msg_handler, .cb.ind_cb_arg = NULL}    },
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+    },
+
+    {
+        {    MOD_D2, D2APN_ATTR_CB_MSG, {.cb.ind_cb = d2_d2apn_subscriber_msg_cb, .cb.ind_cb_arg = NULL}    },
+#ifdef __GEMINI__
+        {    MOD_D2_2, D2APN_ATTR_CB_MSG, {.cb.ind_cb = d2_d2apn_subscriber_msg_cb, .cb.ind_cb_arg = NULL}    },
+#if (GEMINI_PLUS >= 3)
+        {    MOD_D2_3, D2APN_ATTR_CB_MSG, {.cb.ind_cb = d2_d2apn_subscriber_msg_cb, .cb.ind_cb_arg = NULL}    },
+#if (GEMINI_PLUS >= 4)
+        {    MOD_D2_4, D2APN_ATTR_CB_MSG, {.cb.ind_cb = d2_d2apn_subscriber_msg_cb, .cb.ind_cb_arg = NULL}    },
+#endif    /* GEMINI_PLUS >= 4 */
+#endif    /* GEMINI_PLUS >= 3 */
+#endif    /* __GEMINI__ */
+    },
+
+    // D2AM
+    {
+        {    MOD_D2AM, D2APN_ATTR_CB_MSG, {.cb.ind_cb = d2am_d2apn_subscriber_msg_cb, .cb.ind_cb_arg = NULL}    },
+#ifdef __GEMINI__
+        {    MOD_D2AM_2, D2APN_ATTR_CB_MSG, {.cb.ind_cb = d2am_d2apn_subscriber_msg_cb, .cb.ind_cb_arg = NULL}    },
+#if (GEMINI_PLUS >= 3)
+        {    MOD_D2AM_3, D2APN_ATTR_CB_MSG, {.cb.ind_cb = d2am_d2apn_subscriber_msg_cb, .cb.ind_cb_arg = NULL}    },
+#if (GEMINI_PLUS >= 4)
+        {    MOD_D2AM_4, D2APN_ATTR_CB_MSG, {.cb.ind_cb = d2am_d2apn_subscriber_msg_cb, .cb.ind_cb_arg = NULL}    },
+#endif    /* GEMINI_PLUS >= 4 */
+#endif    /* GEMINI_PLUS >= 3 */
+#endif    /* __GEMINI__ */
+    }
+
+#ifdef __L5_SUPPORT__
+#ifndef __NANO_UT__
+     ,
+    // L5UPDN
+    {
+        {    MOD_L5UPDN, D2APN_ATTR_ILM_MSG, {.ilm.sap_id = 0}    },
+#ifdef __GEMINI__
+        {    MOD_L5UPDN_2, D2APN_ATTR_ILM_MSG, {.ilm.sap_id = 0}    },
+#if (GEMINI_PLUS >= 3)
+        {    MOD_L5UPDN_3, D2APN_ATTR_ILM_MSG, {.ilm.sap_id = 0}    },
+#if (GEMINI_PLUS >= 4)
+        {    MOD_L5UPDN_4, D2APN_ATTR_ILM_MSG, {.ilm.sap_id = 0}    },
+#endif    /* GEMINI_PLUS >= 4 */
+#endif    /* GEMINI_PLUS >= 3 */
+#endif    /* __GEMINI__ */
+    }
+#endif    /* __NANO_UT__ */
+#endif    /* __L5_SUPPORT__ */
+
+/*********************************************************************/
+/*                            Custom Part                            */
+/*        Caution! Exact one profile for each PS is necessary.       */
+/*********************************************************************/
+    // Operator-specific
+    // N/A
+};
+
+size_t d2apn_sizeof_custom_subscriber_profile_tbl ()
+{
+    return sizeof(d2apn_custom_subscriber_profile_tbl) / sizeof(d2apn_custom_subscriber_profile_struct);
+}
+
+d2apn_custom_subscriber_profile_struct* d2apn_search_custom_subscriber_profile_tbl_by_mod (kal_uint8 ps_id, module_type mod_id)
+{
+    int i, j;
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM)
+    {
+        DDM_CUST_LOG(MOD_D2APN + ps_id, "d2apn_search_custom_subscriber_profile_tbl_by_mod(): Invalid argument!!\n");
+        goto D2APN_SEARCH_CUSTOM_SUBSCRIBER_PROFILE_TBL_BY_MOD_ERR_1;
+    }
+
+    // searching the d2apn_custom_subscriber_profile_tbl
+    for(i = 0; i < sizeof(d2apn_custom_subscriber_profile_tbl) / (sizeof(d2apn_custom_subscriber_profile_struct) * MAX_SIM_NUM); i++)
+    {
+        for(j = 0; j < MAX_SIM_NUM; j++)
+            if(d2apn_custom_subscriber_profile_tbl[i][j].mod_id == mod_id)
+                break;
+        if(j < MAX_SIM_NUM)
+            break;
+    }
+
+    if(i >= sizeof(d2apn_custom_subscriber_profile_tbl) / (sizeof(d2apn_custom_subscriber_profile_struct) * MAX_SIM_NUM))
+    {
+        DDM_CUST_LOG(MOD_D2APN + ps_id, "d2apn_search_custom_subscriber_profile_tbl_by_mod(): Invalid request code %d!!\n", mod_id);
+        goto D2APN_SEARCH_CUSTOM_SUBSCRIBER_PROFILE_TBL_BY_MOD_ERR_1;
+    }
+
+    return &(d2apn_custom_subscriber_profile_tbl[i][ps_id]);
+
+    // withdrawing what this function did
+D2APN_SEARCH_CUSTOM_SUBSCRIBER_PROFILE_TBL_BY_MOD_ERR_1:
+    return NULL;
+}
+
+int d2apn_iterate_custom_subscriber_profile_tbl (kal_uint8 ps_id, d2apn_custom_subscriber_profile_tbl_cb_t cb, void *arg)
+{
+    int i;
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || cb == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2APN + ps_id, "d2apn_iterate_custom_subscriber_profile_tbl(): Invalid argument!!\n");
+        goto D2APN_ITERATE_CUSTOM_SUBSCRIBER_PROFILE_TBL_ERR_1;
+    }
+
+    // iterating the d2apn_custom_subscriber_profile_tbl
+    for(i = 0; i < sizeof(d2apn_custom_subscriber_profile_tbl) / (sizeof(d2apn_custom_subscriber_profile_struct) * MAX_SIM_NUM); i++)
+    {
+
+// ---- DEBUG ----
+        DDM_CUST_LOG(MOD_D2APN + ps_id, "d2apn_iterate_custom_subscriber_profile_tbl(): before the callback of MOD %d!!\n", d2apn_custom_subscriber_profile_tbl[i][ps_id].mod_id);
+// ++++ DEBUG ++++
+
+        cb(ps_id, (const d2apn_custom_subscriber_profile_struct*)&d2apn_custom_subscriber_profile_tbl[i][ps_id], arg);
+
+// ---- DEBUG ----
+        DDM_CUST_LOG(MOD_D2APN + ps_id, "d2apn_iterate_custom_subscriber_profile_tbl(): after the callback of MOD %d!!\n", d2apn_custom_subscriber_profile_tbl[i][ps_id].mod_id);
+// ++++ DEBUG ++++
+
+    }
+
+    return 0;
+
+    // withdrawing what this function did
+D2APN_ITERATE_CUSTOM_SUBSCRIBER_PROFILE_TBL_ERR_1:
+    return -1;
+}
+/*******************************************************/
+/* ++++ D2APN Custom Subscriber Profile Table End ++++ */
+/*******************************************************/
+
+
+/**************************************************/
+/* ---- D2UM Custom User Profile Table Start ---- */
+/**************************************************/
+d2um_custom_usr_profile_struct d2um_custom_usr_profile_tbl[][MAX_SIM_NUM] =
+{
+/*****************************************************************************/
+/*                               Built-in Part                               */
+/*                            Do NOT modify them.                            */
+/* The mod_id can be the same among PS, but must be different among modules. */
+/*****************************************************************************/
+    // D2UM
+    {
+        {MOD_D2UM, D2UM_ATTR_ADMIN_AUTH | D2UM_ATTR_NO_MSG | D2UM_ATTR_NO_NETIF, {.no.unused = 0}    },
+#ifdef __GEMINI__
+        {MOD_D2UM_2, D2UM_ATTR_ADMIN_AUTH | D2UM_ATTR_NO_MSG | D2UM_ATTR_NO_NETIF, {.no.unused = 0}    },
+#if (GEMINI_PLUS >= 3)
+        {MOD_D2UM_3, D2UM_ATTR_ADMIN_AUTH | D2UM_ATTR_NO_MSG | D2UM_ATTR_NO_NETIF, {.no.unused = 0}    },
+#if (GEMINI_PLUS >= 4)
+        {MOD_D2UM_4, D2UM_ATTR_ADMIN_AUTH | D2UM_ATTR_NO_MSG | D2UM_ATTR_NO_NETIF, {.no.unused = 0}    },
+#endif    /* GEMINI_PLUS >= 4 */
+#endif    /* GEMINI_PLUS >= 3 */
+#endif    /* __GEMINI__ */
+    },
+
+    // D2AM
+    {
+        {MOD_D2AM, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_EVENT_AUTH | D2UM_ATTR_CB_MSG | D2UM_ATTR_NO_NETIF, {.cb.ind_cb = d2apn_custom_subscriber_msg_cb, .cb.ind_cb_arg = (void*)556611}    },
+#ifdef __GEMINI__
+        {MOD_D2AM_2, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_EVENT_AUTH | D2UM_ATTR_CB_MSG | D2UM_ATTR_NO_NETIF, {.cb.ind_cb = d2apn_custom_subscriber_msg_cb, .cb.ind_cb_arg = (void*)556611}    },
+#if (GEMINI_PLUS >= 3)
+        {MOD_D2AM_3, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_EVENT_AUTH | D2UM_ATTR_CB_MSG | D2UM_ATTR_NO_NETIF, {.cb.ind_cb = d2apn_custom_subscriber_msg_cb, .cb.ind_cb_arg = (void*)556611}    },
+#if (GEMINI_PLUS >= 4)
+        {MOD_D2AM_4, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_EVENT_AUTH | D2UM_ATTR_CB_MSG | D2UM_ATTR_NO_NETIF, {.cb.ind_cb = d2apn_custom_subscriber_msg_cb, .cb.ind_cb_arg = (void*)556611}    },
+#endif    /* GEMINI_PLUS >= 4 */
+#endif    /* GEMINI_PLUS >= 3 */
+#endif    /* __GEMINI__ */
+    },
+
+    // ATP
+    {
+        {MOD_ATP, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_AT_MSG | D2UM_ATTR_AP_NETIF, {.at.sap_id = ATP_D2AT_SAP}    },
+#ifdef __GEMINI__
+        {MOD_ATP_2, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_AT_MSG | D2UM_ATTR_AP_NETIF, {.at.sap_id = ATP_D2AT_SAP}    },
+#if (GEMINI_PLUS >= 3)
+        {MOD_ATP_3, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_AT_MSG | D2UM_ATTR_AP_NETIF, {.at.sap_id = ATP_D2AT_SAP}    },
+#if (GEMINI_PLUS >= 4)
+        {MOD_ATP_4, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_AT_MSG | D2UM_ATTR_AP_NETIF, {.at.sap_id = ATP_D2AT_SAP}    },
+#endif    /* GEMINI_PLUS >= 4 */
+#endif    /* GEMINI_PLUS >= 3 */
+#endif    /* __GEMINI__ */
+    },
+
+    // D2AT
+    {
+        {MOD_D2AT, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_AP_NETIF, {.ilm.sap_id = ATP_D2AT_SAP}    },
+#ifdef __GEMINI__
+        {MOD_D2AT_2, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_AP_NETIF, {.ilm.sap_id = ATP_D2AT_SAP}    },
+#if (GEMINI_PLUS >= 3)
+        {MOD_D2AT_3, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_AP_NETIF, {.ilm.sap_id = ATP_D2AT_SAP}    },
+#if (GEMINI_PLUS >= 4)
+        {MOD_D2AT_4, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_AP_NETIF, {.ilm.sap_id = ATP_D2AT_SAP}    },
+#endif    /* GEMINI_PLUS >= 4 */
+#endif    /* GEMINI_PLUS >= 3 */
+#endif    /* __GEMINI__ */
+    },
+
+    // IMSM
+    {
+        {MOD_IMSM, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_MD_NETIF, {.ilm.sap_id = IMSM_D2CM_SAP}    },
+#ifdef __GEMINI__
+        {MOD_IMSM_2, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_MD_NETIF, {.ilm.sap_id = IMSM_D2CM_SAP}    },
+#if (GEMINI_PLUS >= 3)
+        {MOD_IMSM_3, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_MD_NETIF, {.ilm.sap_id = IMSM_D2CM_SAP}    },
+#if (GEMINI_PLUS >= 4)
+        {MOD_IMSM_4, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_MD_NETIF, {.ilm.sap_id = IMSM_D2CM_SAP}    },
+#endif    /* GEMINI_PLUS >= 4 */
+#endif    /* GEMINI_PLUS >= 3 */
+#endif    /* __GEMINI__ */
+    },
+
+    // SSDS
+    {
+        {MOD_SSDS, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_AP_NETIF, {.ilm.sap_id = SSDS_D2CM_SAP}    },
+#ifdef __GEMINI__
+        {MOD_SSDS_2, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_AP_NETIF, {.ilm.sap_id = SSDS_D2CM_SAP}    },
+#if (GEMINI_PLUS >= 3)
+        {MOD_SSDS_3, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_AP_NETIF, {.ilm.sap_id = SSDS_D2CM_SAP}    },
+#if (GEMINI_PLUS >= 4)
+        {MOD_SSDS_4, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_AP_NETIF, {.ilm.sap_id = SSDS_D2CM_SAP}    },
+#endif    /* GEMINI_PLUS >= 4 */
+#endif    /* GEMINI_PLUS >= 3 */
+#endif    /* __GEMINI__ */
+    },
+
+#ifdef __BIP_SUPPORT__
+    // BIP
+    {
+        {MOD_BIP_CONN_MGR, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_MD_NETIF, {.ilm.sap_id = ME_D2CM_SAP}    },
+#ifdef __GEMINI__
+        {MOD_BIP_CONN_MGR, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_MD_NETIF, {.ilm.sap_id = ME_D2CM_SAP}    },
+#if (GEMINI_PLUS >= 3)
+        {MOD_BIP_CONN_MGR, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_MD_NETIF, {.ilm.sap_id = ME_D2CM_SAP}    },
+#if (GEMINI_PLUS >= 4)
+        {MOD_BIP_CONN_MGR, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_MD_NETIF, {.ilm.sap_id = ME_D2CM_SAP}    },
+#endif    /* GEMINI_PLUS >= 4 */
+#endif    /* GEMINI_PLUS >= 3 */
+#endif    /* __GEMINI__ */
+    },
+#endif /* __BIP_SUPPORT__ */
+
+#ifdef __XCAP_SUPPORT__
+    // XCAP
+    {
+        {MOD_XCAP_CM, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_MD_NETIF, {.ilm.sap_id = ME_D2CM_SAP}    },
+#ifdef __GEMINI__
+        {MOD_XCAP_CM, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_MD_NETIF, {.ilm.sap_id = ME_D2CM_SAP}    },
+#if (GEMINI_PLUS >= 3)
+        {MOD_XCAP_CM, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_MD_NETIF, {.ilm.sap_id = ME_D2CM_SAP}    },
+#if (GEMINI_PLUS >= 4)
+        {MOD_XCAP_CM, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_MD_NETIF, {.ilm.sap_id = ME_D2CM_SAP}    },
+#endif    /* GEMINI_PLUS >= 4 */
+#endif    /* GEMINI_PLUS >= 3 */
+#endif    /* __GEMINI__ */
+    },
+#endif /* __XCAP_SUPPORT__ */
+
+    // MOD_SIM
+    {
+        {MOD_SIM, D2UM_ATTR_EVENT_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_AP_NETIF, {.ilm.sap_id = ME_D2CM_SAP}    },
+#ifdef __GEMINI__
+        {MOD_SIM_2, D2UM_ATTR_EVENT_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_AP_NETIF, {.ilm.sap_id = ME_D2CM_SAP}    },
+#if (GEMINI_PLUS >= 3)
+        {MOD_SIM_3, D2UM_ATTR_EVENT_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_AP_NETIF, {.ilm.sap_id = ME_D2CM_SAP}    },
+#if (GEMINI_PLUS >= 4)
+        {MOD_SIM_4, D2UM_ATTR_EVENT_AUTH | D2UM_ATTR_ILM_MSG | D2UM_ATTR_AP_NETIF, {.ilm.sap_id = ME_D2CM_SAP}    },
+#endif    /* GEMINI_PLUS >= 4 */
+#endif    /* GEMINI_PLUS >= 3 */
+#endif    /* __GEMINI__ */
+    },
+
+/*********************************************************************/
+/*                            Custom Part                            */
+/*        Caution!Exact one profile for each PS is necessary.        */
+/*********************************************************************/
+    // D2 Data UT
+    {
+        {D2UM_CUSTOM_MOD_ID_UT, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_EVENT_AUTH | D2UM_ATTR_CB_MSG | D2UM_ATTR_MD_NETIF, {.ilm.sap_id = ME_D2CM_SAP}    },
+#ifdef __GEMINI__
+        {D2UM_CUSTOM_MOD_ID_UT, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_EVENT_AUTH | D2UM_ATTR_CB_MSG | D2UM_ATTR_NO_NETIF, {.ilm.sap_id = ME_D2CM_SAP}    },
+#if (GEMINI_PLUS >= 3)
+        {D2UM_CUSTOM_MOD_ID_UT, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_EVENT_AUTH | D2UM_ATTR_CB_MSG | D2UM_ATTR_NO_NETIF, {.ilm.sap_id = ME_D2CM_SAP}    },
+#if (GEMINI_PLUS >= 4)
+        {D2UM_CUSTOM_MOD_ID_UT, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_EVENT_AUTH | D2UM_ATTR_CB_MSG | D2UM_ATTR_NO_NETIF, {.ilm.sap_id = ME_D2CM_SAP}    },
+#endif    /* GEMINI_PLUS >= 4 */
+#endif    /* GEMINI_PLUS >= 3 */
+#endif    /* __GEMINI__ */
+    },
+
+
+    // Operator-specific
+    {
+        {D2UM_CUSTOM_MOD_ID_OP, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_EVENT_AUTH | D2UM_ATTR_CB_MSG | D2UM_ATTR_NO_NETIF, {.cb.ind_cb = d2apn_custom_subscriber_msg_cb, .cb.ind_cb_arg = (void*)556611}    },
+#ifdef __GEMINI__
+        {D2UM_CUSTOM_MOD_ID_OP, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_EVENT_AUTH | D2UM_ATTR_CB_MSG | D2UM_ATTR_NO_NETIF, {.cb.ind_cb = d2apn_custom_subscriber_msg_cb, .cb.ind_cb_arg = (void*)556611}    },
+#if (GEMINI_PLUS >= 3)
+        {D2UM_CUSTOM_MOD_ID_OP, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_EVENT_AUTH | D2UM_ATTR_CB_MSG | D2UM_ATTR_NO_NETIF, {.cb.ind_cb = d2apn_custom_subscriber_msg_cb, .cb.ind_cb_arg = (void*)556611}    },
+#if (GEMINI_PLUS >= 4)
+        {D2UM_CUSTOM_MOD_ID_OP, D2UM_ATTR_PDN_AUTH | D2UM_ATTR_EVENT_AUTH | D2UM_ATTR_CB_MSG | D2UM_ATTR_NO_NETIF, {.cb.ind_cb = d2apn_custom_subscriber_msg_cb, .cb.ind_cb_arg = (void*)556611}    },
+#endif    /* GEMINI_PLUS >= 4 */
+#endif    /* GEMINI_PLUS >= 3 */
+#endif    /* __GEMINI__ */
+    },
+};
+
+size_t d2um_sizeof_custom_usr_profile_tbl ()
+{
+    return sizeof(d2um_custom_usr_profile_tbl) / sizeof(d2um_custom_usr_profile_struct);
+}
+
+d2um_custom_usr_profile_struct* d2um_search_custom_usr_profile_tbl_by_mod (kal_uint8 ps_id, module_type mod_id)
+{
+    int i, j;
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM)
+    {
+        DDM_CUST_LOG(MOD_D2UM + ps_id, "d2um_search_custom_usr_profile_tbl_by_mod(): Invalid argument!!\n");
+        goto D2UM_SEARCH_CUSTOM_USR_PROFILE_TBL_BY_MOD_ERR_1;
+    }
+
+    // searching the d2um_custom_usr_info_tbl
+    for(i = 0; i < sizeof(d2um_custom_usr_profile_tbl) / (sizeof(d2um_custom_usr_profile_struct) * MAX_SIM_NUM); i++)
+    {
+        for(j = 0; j < MAX_SIM_NUM; j++)
+            if(d2um_custom_usr_profile_tbl[i][j].mod_id == mod_id)
+                break;
+        if(j < MAX_SIM_NUM)
+            break;
+    }
+
+    if(i >= sizeof(d2um_custom_usr_profile_tbl) / (sizeof(d2um_custom_usr_profile_struct) * MAX_SIM_NUM))
+    {
+        DDM_CUST_LOG(MOD_D2UM + ps_id, "d2um_search_custom_usr_profile_tbl_by_mod(): Invalid request code %d!!\n", mod_id);
+        goto D2UM_SEARCH_CUSTOM_USR_PROFILE_TBL_BY_MOD_ERR_1;
+    }
+
+    return &(d2um_custom_usr_profile_tbl[i][ps_id]);
+
+    // withdrawing what this function did
+D2UM_SEARCH_CUSTOM_USR_PROFILE_TBL_BY_MOD_ERR_1:
+    return NULL;
+}
+
+int d2um_iterate_custom_usr_profile_tbl (kal_uint8 ps_id, d2um_custom_usr_profile_tbl_cb_t cb, void *arg)
+{
+    int i;
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || cb == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2UM, "d2um_iterate_custom_usr_profile_tbl(): Invalid argument!!\n");
+        goto D2UM_ITERATE_CUSTOM_USR_PROFILE_TBL_ERR_1;
+    }
+
+    // iterating the d2um_custom_usr_info_tbl
+    for(i = 0; i < sizeof(d2um_custom_usr_profile_tbl) / (sizeof(d2um_custom_usr_profile_struct) * MAX_SIM_NUM); i++)
+    {
+
+// ---- DEBUG ----
+        DDM_CUST_LOG(MOD_D2UM + ps_id, "d2um_iterate_custom_usr_profile_tbl(): before the callback at PS %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+        cb(ps_id, (const d2um_custom_usr_profile_struct*)((&d2um_custom_usr_profile_tbl[i][ps_id])), arg);
+
+// ---- DEBUG ----
+        DDM_CUST_LOG(MOD_D2UM + ps_id, "d2um_iterate_custom_usr_profile_tbl(): after the callback at PS %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+    }
+
+    return 0;
+
+    // withdrawing what this function did
+D2UM_ITERATE_CUSTOM_USR_PROFILE_TBL_ERR_1:
+    return -1;
+}
+/************************************************/
+/* ++++ D2UM Custom User Profile Table End ++++ */
+/************************************************/
+
+
+/*************************************************/
+/* ---- D2PM Custom PDN Profile Table Start ---- */
+/*************************************************/
+d2pm_custom_pdn_profile_struct d2pm_custom_pdn_profile_tbl[] =
+{
+/*********************************************************************/
+/*                           Built-in Part                           */
+/*                        Do NOT modify them.                        */
+/*********************************************************************/
+    // Emergency
+    {"", 0, "emergency", "IPv4v6", "IPv4v6", "", "", D2PM_AUTH_TYPE_CHAP, 131071},
+
+/*********************************************************************/
+/*                            Custom Part                            */
+/*        Caution!Exact one profile for each PS is necessary.        */
+/*********************************************************************/
+    // N/A
+};
+
+int d2pm_iterate_custom_pdn_profile_tbl (unsigned int ps_id, d2pm_custom_pdn_profile_tbl_cb_t cb, void *arg)
+{
+    int i;
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || cb == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_iterate_custom_pdn_profile_tbl(): Invalid argument!!\n");
+        goto D2PM_ITERATE_CUSTOM_PDN_PROFILE_TBL_ERR_1;
+    }
+
+    // iterating the d2pn_custom_pdn_profile_tbl
+    for(i = 0; i < sizeof(d2pm_custom_pdn_profile_tbl) / sizeof(d2pm_custom_pdn_profile_struct); i++)
+    {
+
+// ---- DEBUG ----
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_iterate_custom_pdn_profile_tbl(): before the callback at PS %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+        cb(ps_id, (const d2pm_custom_pdn_profile_struct*)((&d2pm_custom_pdn_profile_tbl[i])), arg);
+
+// ---- DEBUG ----
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_iterate_custom_pdn_profile_tbl(): after the callback at PS %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+    }
+
+    return 0;
+
+    // withdrawing what this function did
+D2PM_ITERATE_CUSTOM_PDN_PROFILE_TBL_ERR_1:
+    return -1;
+}
+/***********************************************/
+/* ++++ D2PM Custom PDN Profile Table End ++++ */
+/***********************************************/
+
+
+/**********************************************/
+/* ---- D2PM Is APN Index Reusable Start ---- */
+/**********************************************/
+static kal_bool d2pm_is_apn_idx_reusable_cond (unsigned int ps_id, const char *apn, const d2cm_get_pdn_profile_ind_struct *dst_pdn_profile_ptr, const d2cm_get_pdn_profile_ind_struct *src_pdn_profile_ptr);
+static kal_bool d2cm_is_apn_idx_reusable_cond (unsigned int ps_id, const char *apn, const d2cm_get_pdn_profile_ind_struct *dst_pdn_profile_ptr, const d2cm_get_pdn_profile_ind_struct *src_pdn_profile_ptr);
+static kal_bool d2rm_is_apn_idx_reusable_cond (unsigned int ps_id, const char *apn, const d2cm_get_pdn_profile_ind_struct *dst_pdn_profile_ptr, const d2cm_get_pdn_profile_ind_struct *src_pdn_profile_ptr);
+
+static void d2pm_is_apn_idx_reusable_hdl (kal_uint32 ps_id, d2cm_get_pdn_profile_ind_struct *ind_ptr, void *arg)
+{
+    struct
+    {
+        const char *apn;
+        int dst_apn_idx, src_apn_idx;
+        d2cm_get_pdn_profile_ind_struct dst_pdn_profile, src_pdn_profile;
+    }*hdl_arg_ptr = arg;
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || ind_ptr == NULL || arg == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_idx_reusable_hdl(): Invalid argument!!\n");
+        goto D2PM_IS_APN_INDEX_REUSABLE_HDL_ERR_1;
+    }
+
+    if(strncasecmp((const char*)(ind_ptr->apn), hdl_arg_ptr->apn, sizeof(ind_ptr->apn)) == 0)
+    {
+        if(hdl_arg_ptr->dst_apn_idx != -1 && ind_ptr->apn_idx == hdl_arg_ptr->dst_apn_idx)
+        {
+            memcpy((void*)(&(hdl_arg_ptr->dst_pdn_profile)), (const void*)ind_ptr, sizeof(hdl_arg_ptr->dst_pdn_profile));
+            hdl_arg_ptr->dst_apn_idx = -1;
+        }
+        else if(hdl_arg_ptr->src_apn_idx != -1 && ind_ptr->apn_idx == hdl_arg_ptr->src_apn_idx)
+        {
+            memcpy((void*)(&(hdl_arg_ptr->src_pdn_profile)), (const void*)ind_ptr, sizeof(hdl_arg_ptr->src_pdn_profile));
+            hdl_arg_ptr->src_apn_idx = -1;
+        }
+    }
+
+    return;
+
+    // withdrawing what this function did
+D2PM_IS_APN_INDEX_REUSABLE_HDL_ERR_1:
+    return;
+}
+
+kal_bool d2pm_is_apn_idx_reuseable (unsigned int ps_id, const char *apn, int dst_apn_idx, int src_apn_idx)
+{
+    d2cm_get_pdn_profile_req_struct req;
+    struct
+    {
+        const char *apn;
+        int dst_apn_idx, src_apn_idx;
+        d2cm_get_pdn_profile_ind_struct dst_pdn_profile, src_pdn_profile;
+    }hdl_arg;
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || apn == NULL || dst_apn_idx < 0 || src_apn_idx < 0)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_idx_reusable(): Invalid argument!!\n");
+        goto D2PM_IS_APN_IDX_REUSABLE_ERR_1;
+    }
+
+    // initializing the variables
+    hdl_arg.apn = apn;
+    hdl_arg.dst_apn_idx = dst_apn_idx;
+    hdl_arg.src_apn_idx = src_apn_idx;
+
+    // getting the PDN profiles
+    memset((void*)(&req), 0, sizeof(req));
+    req.flag |= D2CM_GET_PDN_PROFILE_REQ_FLAG_INCL_APN_IDX;
+    if(d2cm_get_pdn_profile(ps_id, D2CM_CUSTOM_MOD_ID_OP, &req, d2pm_is_apn_idx_reusable_hdl, (void*)(&hdl_arg)) == D2CM_API_RES_FAIL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_idx_reusable(): d2cm_get_pdn_profile() error!!\n");
+        goto D2PM_IS_APN_IDX_REUSABLE_ERR_1;
+    }
+
+    // checking the dst_apn_idx and src_apn_idx
+    if(hdl_arg.dst_apn_idx != -1 || hdl_arg.src_apn_idx != -1)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_idx_reusable(): No data available!!\n");
+        goto D2PM_IS_APN_IDX_REUSABLE_ERR_1;
+    }
+
+    // comparing whether the src_pdn_profile is reusable to the dst_pdn_profile for D2PM
+    if(d2pm_is_apn_idx_reusable_cond(ps_id, apn, (const d2cm_get_pdn_profile_ind_struct *)(&(hdl_arg.dst_pdn_profile)), (const d2cm_get_pdn_profile_ind_struct *)(&(hdl_arg.src_pdn_profile))) == KAL_FALSE)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_idx_reusable(): d2pm_is_apn_idx_reusable_cond() error!!\n");
+        goto D2PM_IS_APN_IDX_REUSABLE_ERR_2;
+    }
+    else if(d2cm_is_apn_idx_reusable_cond(ps_id, apn, (const d2cm_get_pdn_profile_ind_struct *)(&(hdl_arg.dst_pdn_profile)), (const d2cm_get_pdn_profile_ind_struct *)(&(hdl_arg.src_pdn_profile))) == KAL_FALSE)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_idx_reusable(): d2cm_is_apn_idx_reusable_cond() error!!\n");
+        goto D2PM_IS_APN_IDX_REUSABLE_ERR_2;
+    }
+    else if(d2rm_is_apn_idx_reusable_cond(ps_id, apn, (const d2cm_get_pdn_profile_ind_struct *)(&(hdl_arg.dst_pdn_profile)), (const d2cm_get_pdn_profile_ind_struct *)(&(hdl_arg.src_pdn_profile))) == KAL_FALSE)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_idx_reusable(): d2rm_is_apn_idx_reusable_cond() error!!\n");
+        goto D2PM_IS_APN_IDX_REUSABLE_ERR_2;
+    }
+
+    return KAL_TRUE;
+
+    // withdrawing what this function did
+D2PM_IS_APN_IDX_REUSABLE_ERR_2:
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_idx_reusable(): %s(%d vs. %d), %d, %x, %d, %d!!\n", hdl_arg.src_pdn_profile.apn, hdl_arg.dst_pdn_profile.apn_idx, hdl_arg.src_pdn_profile.apn_idx, hdl_arg.src_pdn_profile.state, hdl_arg.src_pdn_profile.p_cid, hdl_arg.src_pdn_profile.fb_cid);
+// ++++ DEBUG ++++
+
+    if(hdl_arg.src_pdn_profile.state == D2CM_PDN_STATUS_ACT)
+    {
+        // deactivating the p_cid
+        if(hdl_arg.src_pdn_profile.p_cid != D2CM_INVAL_CID && hdl_arg.src_pdn_profile.num_of_p_cid_usr == 0)
+        {
+
+            if(ddm_deact_cid_state[hdl_arg.src_pdn_profile.p_cid] == KAL_FALSE)
+            {
+
+// ---- DEBUG ----
+                DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_idx_reusable(): CID %d triggerred deactivation or detach!!\n", hdl_arg.src_pdn_profile.p_cid);
+// ++++ DEBUG ++++
+
+                custom_ddm_deact_dangling_cid(ps_id, hdl_arg.src_pdn_profile.p_cid, DDM_EVENT_IS_INDEX_CONFLICT);
+
+                // setting the ddm_deact_cid_state
+                ddm_deact_cid_state[hdl_arg.src_pdn_profile.p_cid] = KAL_TRUE;
+            }
+
+            // deactivating the fb_cid
+            if(hdl_arg.src_pdn_profile.fb_cid != D2CM_INVAL_CID && hdl_arg.src_pdn_profile.num_of_fb_cid_usr == 0 && ddm_deact_cid_state[hdl_arg.src_pdn_profile.fb_cid] == KAL_FALSE)
+            {
+
+// ---- DEBUG ----
+                DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_idx_reusable(): CID %d triggerred deactivation or detach!!\n", hdl_arg.src_pdn_profile.fb_cid);
+// ++++ DEBUG ++++
+
+                custom_ddm_deact_dangling_cid(ps_id, hdl_arg.src_pdn_profile.fb_cid, DDM_EVENT_IS_INDEX_CONFLICT);
+
+                // setting the ddm_deact_cid_state
+                ddm_deact_cid_state[hdl_arg.src_pdn_profile.fb_cid] = KAL_TRUE;
+            }
+        }
+    }
+
+D2PM_IS_APN_IDX_REUSABLE_ERR_1:
+    return KAL_FALSE;
+}
+
+static kal_bool d2pm_is_apn_idx_reusable_cond (unsigned int ps_id, const char *apn, const d2cm_get_pdn_profile_ind_struct *dst_pdn_profile_ptr, const d2cm_get_pdn_profile_ind_struct *src_pdn_profile_ptr)
+{
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || apn == NULL || dst_pdn_profile_ptr == NULL || src_pdn_profile_ptr == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_idx_reusable_cond(): Invalid argument!!\n");
+        goto D2PM_IS_APN_IDX_REUSABLE_COND_ERR_1;
+    }
+
+    // checking the pdp_type, NEED_TO_BE_NOTICED, to check the existing ip_info is better
+    if(strncasecmp((const char*)(&(dst_pdn_profile_ptr->pdp_type)), "IPv4v6", sizeof(dst_pdn_profile_ptr->pdp_type)) != 0 && \
+       strncasecmp((const char*)(&(src_pdn_profile_ptr->pdp_type)), "IPv4v6", sizeof(src_pdn_profile_ptr->pdp_type)) != 0 && \
+       strncasecmp((const char*)(&(dst_pdn_profile_ptr->pdp_type)), (const char*)(&(src_pdn_profile_ptr->pdp_type)), sizeof(dst_pdn_profile_ptr->pdp_type)) != 0)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_idx_reusable_cond(): mismatching pdp_type \"%s\" vs. \"%s\"!!\n", (const char*)(dst_pdn_profile_ptr->pdp_type), (const char*)(src_pdn_profile_ptr->pdp_type));
+        goto D2PM_IS_APN_IDX_REUSABLE_COND_ERR_1;
+    }
+
+    // checking the username and password
+    if((dst_pdn_profile_ptr->auth_type == D2PM_AUTH_TYPE_PAP && src_pdn_profile_ptr->auth_type == D2PM_AUTH_TYPE_PAP) && \
+       (strncmp((const char*)(&(dst_pdn_profile_ptr->username)), (const char*)(&(src_pdn_profile_ptr->username)), sizeof(src_pdn_profile_ptr->username)) != 0 || \
+       strncmp((const char*)(&(dst_pdn_profile_ptr->passwd)), (const char*)(&(src_pdn_profile_ptr->passwd)), sizeof(src_pdn_profile_ptr->passwd)) != 0))
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_idx_reusable_cond(): mismatching auth_type %d vs. %d, or username and password!!\n", dst_pdn_profile_ptr->auth_type, src_pdn_profile_ptr->auth_type);
+        goto D2PM_IS_APN_IDX_REUSABLE_COND_ERR_1;
+    }
+
+    return KAL_TRUE;
+
+D2PM_IS_APN_IDX_REUSABLE_COND_ERR_1:
+    return KAL_FALSE;
+}
+
+static kal_bool d2cm_is_apn_idx_reusable_cond (unsigned int ps_id, const char *apn, const d2cm_get_pdn_profile_ind_struct *dst_pdn_profile_ptr, const d2cm_get_pdn_profile_ind_struct *src_pdn_profile_ptr)
+{
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || apn == NULL || dst_pdn_profile_ptr == NULL || src_pdn_profile_ptr == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2cm_is_apn_idx_reusable_cond(): Invalid argument!!\n");
+        goto D2CM_IS_APN_IDX_REUSABLE_COND_ERR_1;
+    }
+
+    return KAL_TRUE;
+
+D2CM_IS_APN_IDX_REUSABLE_COND_ERR_1:
+    return KAL_FALSE;
+}
+/********************************************/
+/* ---- D2PM Is APN Index Reusable End ---- */
+/********************************************/
+
+
+/**************************************************/
+/* ---- D2CM Custom User Profile Table Start ---- */
+/**************************************************/
+d2cm_custom_usr_profile_struct d2cm_custom_usr_profile_tbl[][MAX_SIM_NUM] =
+{
+/*****************************************************************************/
+/*                               Built-in Part                               */
+/*                            Do NOT modify them.                            */
+/* The mod_id can be the same among PS, but must be different among modules. */
+/*****************************************************************************/
+    // D2CM
+    {
+        {MOD_D2CM, ME_D2CM_SAP, D2CM_ATTR_ADMIN_AUTH | D2CM_ATTR_NO_MSG | D2CM_ATTR_NO_NETIF},
+#ifdef __GEMINI__
+        {MOD_D2CM_2, ME_D2CM_SAP, D2CM_ATTR_ADMIN_AUTH | D2CM_ATTR_NO_MSG | D2CM_ATTR_NO_NETIF},
+#if (GEMINI_PLUS >= 3)
+        {MOD_D2CM_3, ME_D2CM_SAP, D2CM_ATTR_ADMIN_AUTH | D2CM_ATTR_NO_MSG | D2CM_ATTR_NO_NETIF},
+#if (GEMINI_PLUS >= 4)
+        {MOD_D2CM_4, ME_D2CM_SAP, D2CM_ATTR_ADMIN_AUTH | D2CM_ATTR_NO_MSG | D2CM_ATTR_NO_NETIF},
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+    },
+
+    // D2AM
+    {
+        {MOD_D2AM, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_NO_NETIF},
+#ifdef __GEMINI__
+        {MOD_D2AM_2, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_NO_NETIF},
+#if (GEMINI_PLUS >= 3)
+        {MOD_D2AM_3, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_NO_NETIF},
+#if (GEMINI_PLUS >= 4)
+        {MOD_D2AM_4, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_NO_NETIF},
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+    },
+
+    // ATP
+    {
+        {MOD_ATP, ATP_D2AT_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_AT_MSG | D2CM_ATTR_AP_NETIF},
+#ifdef __GEMINI__
+        {MOD_ATP_2, ATP_D2AT_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_AT_MSG | D2CM_ATTR_AP_NETIF},
+#if (GEMINI_PLUS >= 3)
+        {MOD_ATP_3, ATP_D2AT_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_AT_MSG | D2CM_ATTR_AP_NETIF},
+#if (GEMINI_PLUS >= 4)
+        {MOD_ATP_4, ATP_D2AT_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_AT_MSG | D2CM_ATTR_AP_NETIF},
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+    },
+
+    // D2AT
+    {
+        {MOD_D2AT, ATP_D2AT_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_AP_NETIF},
+#ifdef __GEMINI__
+        {MOD_D2AT_2, ATP_D2AT_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_AP_NETIF},
+#if (GEMINI_PLUS >= 3)
+        {MOD_D2AT_3, ATP_D2AT_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_AP_NETIF},
+#if (GEMINI_PLUS >= 4)
+        {MOD_D2AT_4, ATP_D2AT_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_AP_NETIF},
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+    },
+
+    // IMSM
+    {
+        {MOD_IMSM, IMSM_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_MD_NETIF},
+#ifdef __GEMINI__
+        {MOD_IMSM_2, IMSM_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_MD_NETIF},
+#if (GEMINI_PLUS >= 3)
+        {MOD_IMSM_3, IMSM_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_MD_NETIF},
+#if (GEMINI_PLUS >= 4)
+        {MOD_IMSM_4, IMSM_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_MD_NETIF},
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+    },
+
+    // SSDS
+    {
+        {MOD_SSDS, SSDS_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_AP_NETIF},
+#ifdef __GEMINI__
+        {MOD_SSDS_2, SSDS_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_AP_NETIF},
+#if (GEMINI_PLUS >= 3)
+        {MOD_SSDS_3, SSDS_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_AP_NETIF},
+#if (GEMINI_PLUS >= 4)
+        {MOD_SSDS_4, SSDS_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_AP_NETIF},
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+    },
+
+#ifdef __L5_SUPPORT__
+    // L5UPDN
+    {
+        {MOD_L5UPDN, L5UPDN_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_MD_NETIF},
+#ifdef __GEMINI__
+        {MOD_L5UPDN_2, L5UPDN_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_MD_NETIF},
+#if (GEMINI_PLUS >= 3)
+        {MOD_L5UPDN_3, L5UPDN_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_MD_NETIF},
+#if (GEMINI_PLUS >= 4)
+        {MOD_L5UPDN_4, L5UPDN_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_MD_NETIF},
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+    },
+#endif /* __L5_SUPPORT__ */
+
+#ifdef __BIP_SUPPORT__
+    // BIP
+    {
+        {MOD_BIP_CONN_MGR, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_MD_NETIF},
+#ifdef __GEMINI__
+        {MOD_BIP_CONN_MGR, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_MD_NETIF},
+#if (GEMINI_PLUS >= 3)
+        {MOD_BIP_CONN_MGR, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_MD_NETIF},
+#if (GEMINI_PLUS >= 4)
+        {MOD_BIP_CONN_MGR, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_MD_NETIF},
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+    },
+#endif /* __BIP_SUPPORT__ */
+
+#ifdef __XCAP_SUPPORT__
+    // XCAP
+    {
+        {MOD_XCAP_CM, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_MD_NETIF},
+#ifdef __GEMINI__
+        {MOD_XCAP_CM, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_MD_NETIF},
+#if (GEMINI_PLUS >= 3)
+        {MOD_XCAP_CM, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_MD_NETIF},
+#if (GEMINI_PLUS >= 4)
+        {MOD_XCAP_CM, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_MD_NETIF},
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+    },
+#endif /* __XCAP_SUPPORT__ */
+
+    // MOD_SIM
+    {
+        {MOD_SIM, ME_D2CM_SAP, D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_AP_NETIF},
+#ifdef __GEMINI__
+        {MOD_SIM_2, ME_D2CM_SAP, D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_AP_NETIF},
+#if (GEMINI_PLUS >= 3)
+        {MOD_SIM_3, ME_D2CM_SAP, D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_AP_NETIF},
+#if (GEMINI_PLUS >= 4)
+        {MOD_SIM_4, ME_D2CM_SAP, D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_ILM_MSG | D2CM_ATTR_AP_NETIF},
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+    },
+
+    // MOD_D2SSC
+    {
+        {MOD_D2SSC, D2SSC_D2_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_AP_NETIF},
+#ifdef __GEMINI__
+        {MOD_D2SSC_2, D2SSC_D2_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_AP_NETIF},
+#if (GEMINI_PLUS >= 3)
+        {MOD_D2SSC_3, D2SSC_D2_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_AP_NETIF},
+#if (GEMINI_PLUS >= 4)
+        {MOD_D2SSC_4, D2SSC_D2_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_AP_NETIF},
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+    },
+
+    // MOD_D2UX
+    {
+        {MOD_D2UX, D2UX_D2_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_AP_NETIF},
+#ifdef __GEMINI__
+        {MOD_D2UX_2, D2UX_D2_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_AP_NETIF},
+#if (GEMINI_PLUS >= 3)
+        {MOD_D2UX_3, D2UX_D2_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_AP_NETIF},
+#if (GEMINI_PLUS >= 4)
+        {MOD_D2UX_4, D2UX_D2_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_AP_NETIF},
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+    },
+
+/*********************************************************************/
+/*                            Custom Part                            */
+/*        Caution!Exact one profile for each PS is necessary.        */
+/*********************************************************************/
+    // D2 Data UT
+    {
+        {D2CM_CUSTOM_MOD_ID_UT, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_MD_NETIF},
+#ifdef __GEMINI__
+        {D2CM_CUSTOM_MOD_ID_UT, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_NO_NETIF},
+#if (GEMINI_PLUS >= 3)
+        {D2CM_CUSTOM_MOD_ID_UT, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_NO_NETIF},
+#if (GEMINI_PLUS >= 4)
+        {D2CM_CUSTOM_MOD_ID_UT, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_NO_NETIF},
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+    },
+
+
+    // Operator-specific
+    {
+        {D2CM_CUSTOM_MOD_ID_OP, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_NO_NETIF},
+#ifdef __GEMINI__
+        {D2CM_CUSTOM_MOD_ID_OP, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_NO_NETIF},
+#if (GEMINI_PLUS >= 3)
+        {D2CM_CUSTOM_MOD_ID_OP, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_NO_NETIF},
+#if (GEMINI_PLUS >= 4)
+        {D2CM_CUSTOM_MOD_ID_OP, ME_D2CM_SAP, D2CM_ATTR_PDN_AUTH | D2CM_ATTR_EVENT_AUTH | D2CM_ATTR_CB_MSG | D2CM_ATTR_NO_NETIF},
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+    },
+};
+
+size_t d2cm_sizeof_custom_usr_profile_tbl ()
+{
+    return sizeof(d2cm_custom_usr_profile_tbl) / sizeof(d2cm_custom_usr_profile_struct);
+}
+
+d2cm_custom_usr_profile_struct* d2cm_search_custom_usr_profile_tbl_by_mod (unsigned int ps_id, module_type mod_id)
+{
+    int i, j;
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM)
+    {
+        DDM_CUST_LOG(MOD_D2CM + ps_id, "d2cm_search_custom_usr_profile_tbl_by_mod(): Invalid argument!!\n");
+        goto D2CM_SEARCH_CUSTOM_USR_PROFILE_TBL_BY_MOD_ERR_1;
+    }
+
+    // searching the d2cm_custom_usr_info_tbl
+    for(i = 0; i < sizeof(d2cm_custom_usr_profile_tbl) / (sizeof(d2cm_custom_usr_profile_struct) * MAX_SIM_NUM); i++)
+    {
+        for(j = 0; j < MAX_SIM_NUM; j++)
+            if(d2cm_custom_usr_profile_tbl[i][j].mod_id == mod_id)
+                break;
+        if(j < MAX_SIM_NUM)
+            break;
+    }
+
+    if(i >= sizeof(d2cm_custom_usr_profile_tbl) / (sizeof(d2cm_custom_usr_profile_struct) * MAX_SIM_NUM))
+    {
+        DDM_CUST_LOG(MOD_D2CM + ps_id, "d2cm_search_custom_usr_profile_tbl_by_mod(): Invalid request code %d!!\n", mod_id);
+        goto D2CM_SEARCH_CUSTOM_USR_PROFILE_TBL_BY_MOD_ERR_1;
+    }
+
+    return &(d2cm_custom_usr_profile_tbl[i][ps_id]);
+
+    // withdrawing what this function did
+D2CM_SEARCH_CUSTOM_USR_PROFILE_TBL_BY_MOD_ERR_1:
+    return NULL;
+}
+
+int d2cm_iterate_custom_usr_profile_tbl (unsigned int ps_id, d2cm_custom_usr_profile_tbl_cb_t cb, void *arg)
+{
+    int i;
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || cb == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CM, "d2cm_iterate_custom_usr_profile_tbl(): Invalid argument!!\n");
+        goto D2CM_ITERATE_CUSTOM_USR_PROFILE_TBL_ERR_1;
+    }
+
+    // iterating the d2cm_custom_usr_info_tbl
+    for(i = 0; i < sizeof(d2cm_custom_usr_profile_tbl) / (sizeof(d2cm_custom_usr_profile_struct) * MAX_SIM_NUM); i++)
+    {
+
+// ---- DEBUG ----
+        DDM_CUST_LOG(MOD_D2CM + ps_id, "d2cm_iterate_custom_usr_profile_tbl(): before the callback at PS %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+        cb(ps_id, (const d2cm_custom_usr_profile_struct*)((&d2cm_custom_usr_profile_tbl[i][ps_id])), arg);
+
+// ---- DEBUG ----
+        DDM_CUST_LOG(MOD_D2CM + ps_id, "d2cm_iterate_custom_usr_profile_tbl(): after the callback at PS %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+    }
+
+    return 0;
+
+    // withdrawing what this function did
+D2CM_ITERATE_CUSTOM_USR_PROFILE_TBL_ERR_1:
+    return -1;
+}
+/************************************************/
+/* ++++ D2CM Custom User Profile Table End ++++ */
+/************************************************/
+
+kal_bool is_sim_vzw(kal_uint32 ps_id)
+{
+    kal_uint32 sbp_id;
+    sbp_id = sbp_get_sim_sbp_id(ps_id);
+    DDM_CUST_LOG(MOD_D2CUST+ps_id, "[%s]sbp_id[%d]",__FUNCTION__,sbp_id);
+    if(sbp_id == 12)
+    {
+        DDM_CUST_LOG(MOD_D2CUST+ps_id, "SIM IS VZW");
+        return KAL_TRUE;
+    }
+    else
+    {
+        return KAL_FALSE;
+    }
+}
+
+/******************************/
+/* ---- VzW Custom Start ---- */
+/******************************/
+static void vzw_d2cm_is_vzw_hdl (kal_uint32 ps_id, d2cm_get_pdn_profile_ind_struct *ind_ptr, void *arg)
+{
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || arg == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_is_vzw_hdl(): Invalid argument!!\n");
+        goto VZW_D2CM_DEACT_DATA_CALL_HDL_ERR_1;
+    }
+#ifdef __IPC_ADAPTER__
+    //ALPS05051568 Titan use CSC SBP to classify VZW
+    if(sbp_query_id() == SBP_ID_VERIZON && is_sim_vzw(ps_id) == KAL_TRUE)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_is_vzw_hdl(VzW): SBP_ID is vzw!!\n");
+        *((kal_bool*)arg) = KAL_TRUE;
+    }
+#else
+
+    if(*((kal_bool*)arg) == KAL_FALSE && (strcasestr(ind_ptr->apn, "VzW") != NULL || strcasestr(ind_ptr->apn, "VSBL") != NULL))
+    {
+
+// ---- DEBUG ----
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_is_vzw_hdl(VzW): APN \"%s\" has been found!!\n", ind_ptr->apn);
+// ++++ DEBUG ++++
+
+        *((kal_bool*)arg) = KAL_TRUE;
+    }
+#endif
+
+    return;
+
+    // withdrawing what this function did
+VZW_D2CM_DEACT_DATA_CALL_HDL_ERR_1:
+    return;
+}
+
+static void vzw_d2cm_deact_data_call_hdl (kal_uint32 ps_id, d2cm_deact_data_call_cnf_struct *cnf_ptr, void *arg)
+{
+//    int i;
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || cnf_ptr == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_deact_data_call_hdl(): Invalid argument!!\n");
+        goto VZW_D2CM_DEACT_DATA_CALL_HDL_ERR_1;
+    }
+
+// ---- DEBUG ----
+    if(d2cm_get_normal_res(cnf_ptr->res) == D2CM_RES_FAIL)
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_deact_data_call_hdl(VzW): deactivating CID %d has failed with cause %d!!\n", cnf_ptr->cid, d2cm_get_esm_cause(cnf_ptr->res));
+    else
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_deact_data_call_hdl(VzW): deactivating CID %d has succeeded!!\n", cnf_ptr->cid);
+// ++++ DEBUG ++++
+
+    return;
+
+    // withdrawing what this function did
+VZW_D2CM_DEACT_DATA_CALL_HDL_ERR_1:
+    return;
+}
+
+static void vzw_d2cm_pdn_profile_chg_hdl (kal_uint32 ps_id, d2cm_get_pdn_profile_ind_struct *ind_ptr, void *arg)
+{
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || ind_ptr == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_pdn_profile_chg_hdl(): Invalid argument!!\n");
+        goto VZW_D2CM_PDN_PROFILE_CHG_HDL_ERR_1;
+    }
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_pdn_profile_chg_hdl(VzW): %s, %d, %d, %u, %u!!\n", ind_ptr->apn, ind_ptr->p_cid, ind_ptr->fb_cid, ind_ptr->op.vzw.apncl, ind_ptr->flag);
+// ++++ DEBUG ++++
+
+    if((ind_ptr->flag & D2CM_GET_PDN_PROFILE_IND_FLAG_UNUSABLE) != 0)
+    {
+        // deactivating the p_cid
+        if(ind_ptr->p_cid != D2CM_INVAL_CID)
+        {
+            d2cm_deact_data_call_req_struct req;
+
+            memset((void*)(&req), 0, sizeof(req));
+            req.cid = ind_ptr->p_cid;
+            req.reason = ATCMD_DEACT_CAUSE_EGACT_CAUSE_DEACT_NORMAL;
+            if(d2cm_deact_data_call(ps_id, MOD_D2VZW, &req, vzw_d2cm_deact_data_call_hdl, NULL) == D2CM_API_RES_FAIL)
+            {
+                DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_pdn_profile_chg_hdl(): d2cm_deact_data_call() error!!\n");
+                goto VZW_D2CM_PDN_PROFILE_CHG_HDL_ERR_1;
+            }
+
+            // deactivating the fb_cid
+            if(ind_ptr->fb_cid != D2CM_INVAL_CID)
+            {
+                memset((void*)(&req), 0, sizeof(req));
+                req.cid = ind_ptr->fb_cid;
+                req.reason = ATCMD_DEACT_CAUSE_EGACT_CAUSE_DEACT_NORMAL;
+                if(d2cm_deact_data_call(ps_id, MOD_D2VZW, &req, vzw_d2cm_deact_data_call_hdl, NULL) == D2CM_API_RES_FAIL)
+                {
+                    DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_pdn_profile_chg_hdl(): d2cm_deact_data_call() error!!\n");
+                    goto VZW_D2CM_PDN_PROFILE_CHG_HDL_ERR_1;
+                }
+            }
+        }
+    }
+
+    return;
+
+    // withdrawing what this function did
+VZW_D2CM_PDN_PROFILE_CHG_HDL_ERR_1:
+    return;
+}
+
+static void vzw_d2cm_ipv6_no_ra_hdl (kal_uint32 ps_id, d2cm_get_pdn_profile_ind_struct *ind_ptr, void *arg)
+{
+    struct
+    {
+        void *arg;
+        atcmd_deact_cause_enum deact_cause;
+    }*hdl_arg = arg;
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || ind_ptr == NULL || arg == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_ipv6_no_ra_hdl(): Invalid argument!!\n");
+        goto VZW_D2CM_IPV6_NO_RA_HDL_ERR_1;
+    }
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_ipv6_no_ra_hdl(VzW): %s, %u!!\n", ind_ptr->apn, ind_ptr->op.vzw.apncl);
+// ++++ DEBUG ++++
+
+    // deactivating the p_cid
+    if(ind_ptr->p_cid != D2CM_INVAL_CID)
+    {
+        d2cm_deact_data_call_req_struct req;
+
+        memset((void*)(&req), 0, sizeof(req));
+        req.cid = ind_ptr->p_cid;
+        req.reason = hdl_arg->deact_cause;
+        if(d2cm_deact_data_call(ps_id, MOD_D2VZW, &req, vzw_d2cm_deact_data_call_hdl, NULL) == D2CM_API_RES_FAIL)
+        {
+            DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_ipv6_no_ra_hdl(): d2cm_deact_data_call() error!!\n");
+            goto VZW_D2CM_IPV6_NO_RA_HDL_ERR_1;
+        }
+
+        // deactivating the fb_cid
+        if(ind_ptr->fb_cid != D2CM_INVAL_CID)
+        {
+            memset((void*)(&req), 0, sizeof(req));
+            req.cid = ind_ptr->fb_cid;
+            req.reason = hdl_arg->deact_cause;
+            if(d2cm_deact_data_call(ps_id, MOD_D2VZW, &req, vzw_d2cm_deact_data_call_hdl, NULL) == D2CM_API_RES_FAIL)
+            {
+                DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_ipv6_no_ra_hdl(): d2cm_deact_data_call() error!!\n");
+                goto VZW_D2CM_IPV6_NO_RA_HDL_ERR_1;
+            }
+        }
+    }
+
+    return;
+
+    // withdrawing what this function did
+VZW_D2CM_IPV6_NO_RA_HDL_ERR_1:
+    return;
+}
+
+static void vzw_d2cm_post_act_data_call_hdl (kal_uint32 ps_id, d2cm_get_pdn_profile_ind_struct *ind_ptr, void *arg)
+{
+    d2cm_deact_data_call_req_struct req;
+    struct
+    {
+        d2cm_act_data_call_cnf_struct *act_data_call_cnf_ptr;
+        void *arg;
+    }*hdl_arg = arg;
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || ind_ptr == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_post_act_data_call_hdl(): Invalid argument!!\n");
+        goto VZW_D2CM_POST_ACT_DATA_CALL_HDL_ERR_1;
+    }
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_post_act_data_call_hdl(VzW): %s, %u!!\n", ind_ptr->apn, ind_ptr->op.vzw.apncl);
+// ++++ DEBUG ++++
+
+    // deactivating the p_cid
+    if(ind_ptr->p_cid == hdl_arg->act_data_call_cnf_ptr->cid && ind_ptr->prv.bip.ran_info.iwlan_ran == IWLAN_RAN_MOBILE_3GPP)
+    {
+        memset((void*)(&req), 0, sizeof(req));
+        req.cid = ind_ptr->p_cid;
+        req.reason = ATCMD_DEACT_CAUSE_EGACT_CAUSE_DEACT_NO_PCSCF;
+        if(d2cm_deact_data_call(ps_id, MOD_D2VZW, &req, vzw_d2cm_deact_data_call_hdl, NULL) == D2CM_API_RES_FAIL)
+        {
+            DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_post_act_data_call_hdl(): d2cm_deact_data_call() error!!\n");
+            goto VZW_D2CM_POST_ACT_DATA_CALL_HDL_ERR_1;
+        }
+    }
+
+    // deactivating the fb_cid
+    if(ind_ptr->fb_cid == hdl_arg->act_data_call_cnf_ptr->cid)
+    {
+        memset((void*)(&req), 0, sizeof(req));
+        req.cid = ind_ptr->fb_cid;
+        req.reason = ATCMD_DEACT_CAUSE_EGACT_CAUSE_DEACT_NO_PCSCF;
+        if(d2cm_deact_data_call(ps_id, MOD_D2VZW, &req, vzw_d2cm_deact_data_call_hdl, NULL) == D2CM_API_RES_FAIL)
+        {
+            DDM_CUST_LOG(MOD_D2CUST + ps_id, "vzw_d2cm_post_act_data_call_hdl(): d2cm_deact_data_call() error!!\n");
+            goto VZW_D2CM_POST_ACT_DATA_CALL_HDL_ERR_1;
+        }
+    }
+
+    return;
+
+    // withdrawing what this function did
+VZW_D2CM_POST_ACT_DATA_CALL_HDL_ERR_1:
+    return;
+}
+/****************************/
+/* ++++ VzW Custom End ++++ */
+/****************************/
+
+
+/*****************************************/
+/* ---- DDM Forced DEACT CID Start  ---- */
+/*****************************************/
+static void ddm_pdn_profile_chg_hdl (kal_uint32 ps_id, d2cm_get_pdn_profile_ind_struct *ind_ptr, void *arg)
+{
+    kal_uint32 default_sbp_id = sbp_query_id();
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || ind_ptr == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "ddm_pdn_profile_chg_hdl(): Invalid argument!!\n");
+        goto DDM_PDN_PROFILE_CHG_HDL_ERR_1;
+    }
+
+// ---- DEBUG ----
+//    DDM_CUST_LOG(MOD_D2CUST + ps_id, "ddm_pdn_profile_chg_hdl(): %s(%d), %d, %x, %d, %d!!\n", ind_ptr->apn, ind_ptr->apn_idx, ind_ptr->state, ind_ptr->flag, ind_ptr->p_cid, ind_ptr->fb_cid);
+// ++++ DEBUG ++++
+
+    if(ind_ptr->state == D2CM_PDN_STATUS_ACT && (ind_ptr->flag & D2CM_GET_PDN_PROFILE_IND_FLAG_UNUSABLE) != 0)    // NEED_TO_BE_NOTICED, equal to APN has been deleted? Carefully review it!
+    {
+        // deactivating the p_cid
+        if(default_sbp_id == 1 && (test_mode_consider_sim(ps_id) == PS_CONF_TEST_FTA))
+        {
+            DDM_CUST_LOG(MOD_D2CUST + ps_id, "Don't trigger deactivation or detach when cmcc + FTA mode!!\n");
+        }
+        else if(ind_ptr->p_cid != D2CM_INVAL_CID && ind_ptr->num_of_p_cid_usr == 0)
+        {
+
+            if(ddm_deact_cid_state[ind_ptr->p_cid] == KAL_FALSE)
+            {
+
+// ---- DEBUG ----
+//                DDM_CUST_LOG(MOD_D2CUST + ps_id, "ddm_pdn_profile_chg_hdl(): CID %d triggerred deactivation or detach!!\n", ind_ptr->p_cid);
+// ++++ DEBUG ++++
+
+                custom_ddm_deact_dangling_cid(ps_id, ind_ptr->p_cid, DDM_EVENT_IS_CLEAN_TABLE);
+
+                // setting the ddm_deact_cid_state
+                ddm_deact_cid_state[ind_ptr->p_cid] = KAL_TRUE;
+            }
+
+            // deactivating the fb_cid
+            if(ind_ptr->fb_cid != D2CM_INVAL_CID && ind_ptr->num_of_fb_cid_usr == 0 && ddm_deact_cid_state[ind_ptr->fb_cid] == KAL_FALSE)
+            {
+
+// ---- DEBUG ----
+//                DDM_CUST_LOG(MOD_D2CUST + ps_id, "ddm_pdn_profile_chg_hdl(): CID %d triggerred deactivation or detach!!\n", ind_ptr->fb_cid);
+// ++++ DEBUG ++++
+
+                custom_ddm_deact_dangling_cid(ps_id, ind_ptr->fb_cid, DDM_EVENT_IS_CLEAN_TABLE);
+
+                // setting the ddm_deact_cid_state
+                ddm_deact_cid_state[ind_ptr->fb_cid] = KAL_TRUE;
+            }
+        }
+    }
+    // Check if need to reset retry timer, when APN config change
+    ddm_reset_retry_timer_on_apn_config_change_callback(ps_id, sbp_get_sim_sbp_id(ps_id), ind_ptr->apn);
+    return;
+
+    // withdrawing what this function did
+DDM_PDN_PROFILE_CHG_HDL_ERR_1:
+    return;
+}
+/***************************************/
+/* ++++ DDM Forced DEACT CID End  ++++ */
+/***************************************/
+
+
+/**************************/
+/* DTAG Dual APN Start */
+/**************************/
+static kal_uint8 current_ps_id[MAX_SIM_NUM];
+static rat_enum current_attached_rat[MAX_SIM_NUM];
+static kal_uint8 current_is_roaming[MAX_SIM_NUM];
+static kal_uint8 current_plmn[MAX_SIM_NUM][MAX_PLMN_LEN+1];
+static kal_uint8 nodata_name[MAX_SIM_NUM][APN_STRING_LEN];
+static rat_enum last_attached_rat[MAX_SIM_NUM];
+static kal_uint8 last_is_roaming[MAX_SIM_NUM];
+typedef enum {
+    NODATA_TARGET_STATE_DEACT = 0,
+    NODATA_TARGET_STATE_ACT,
+} nodata_target_state_enum;
+static nodata_target_state_enum nodata_target_state[MAX_SIM_NUM];
+typedef enum {
+    NODATA_STATE_IDLE = 0,
+    NODATA_STATE_ACTING,
+    NODATA_STATE_TIMER,
+} nodata_state_enum;
+static nodata_state_enum nodata_state[MAX_SIM_NUM];
+static kal_uint32 nodata_retry_count[MAX_SIM_NUM];
+static d2cm_act_data_call_req_struct dtag_act_data_call_req[MAX_SIM_NUM];
+static eventid nodata_evid[MAX_SIM_NUM];
+
+static char dtag_dual_apn_list[][MAX_PLMN_LEN+1] = {
+#if 0 //For DEBUG only
+/* under construction !*/
+#endif
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+"ZZZZZ",
+};
+static int dtag_dual_apn_list_sz = sizeof(dtag_dual_apn_list)/(MAX_PLMN_LEN+1);
+static void DTAG_dual_apn_act_data_call(kal_uint8 ps_id, d2cm_act_data_call_req_struct *req_ptr);
+
+static void DTAG_dual_apn_act_data_call_timer(void *param)
+{
+    kal_uint8 ps_id = *(kal_uint8 *)param;
+
+    DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG dual apn timer expired");
+    if (nodata_target_state[ps_id] == NODATA_TARGET_STATE_ACT) {
+        DTAG_dual_apn_act_data_call(ps_id, &dtag_act_data_call_req[ps_id]);
+    } else {
+        nodata_state[ps_id] = NODATA_STATE_IDLE;
+    }
+}
+
+static void DTAG_dual_apn_act_data_call_cb(kal_uint32 ps_id, d2cm_act_data_call_cnf_struct *cnf_ptr, void* arg)
+{
+    // checking the inputs
+    if (ps_id >= MAX_SIM_NUM || cnf_ptr == NULL) {
+        DDM_CUST_LOG(MOD_DAST, "DTAG_dual_apn_act_data_call_cb(): Invalid argument!!\n");
+        goto DTAG_DUAL_APN_ACT_DATA_CALL_CB_ERR_1;
+    }
+
+    nodata_state[ps_id] = NODATA_STATE_IDLE;
+
+    DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG_dual_apn_act_data_call_cb(): res = %d, cid = %d!!\n", cnf_ptr->res, cnf_ptr->cid);
+
+    //check result
+    if (cnf_ptr->res == D2CM_RES_SUCC) {
+        return;
+    }
+    //if not success, check nodata_target_state (keep retry?)
+    if (nodata_target_state[ps_id] == NODATA_TARGET_STATE_ACT) {
+        kal_uint32 timeout;
+        if (nodata_retry_count[ps_id] < 16) {
+            timeout = KAL_TICKS_1_SEC;
+        } else if (nodata_retry_count[ps_id] < (16 + 32)) {
+            timeout = KAL_TICKS_2_SEC;
+        } else if (nodata_retry_count[ps_id] < (16 + 32 + 64)) {
+            timeout = KAL_TICKS_5_SEC;
+        } else {
+	    timeout = KAL_TICKS_1_MIN;
+        }
+        //start a retry timer
+        DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG dual apn start timer");
+        nodata_state[ps_id] = NODATA_STATE_TIMER;
+
+        nodata_evid[ps_id] = evshed_set_event(custom_d2_event_scheduler[ps_id], (kal_timer_func_ptr)DTAG_dual_apn_act_data_call_timer, (void *)&current_ps_id[ps_id], timeout);
+    }
+
+    return;
+
+DTAG_DUAL_APN_ACT_DATA_CALL_CB_ERR_1:
+    return;
+}
+
+static void DTAG_dual_apn_act_data_call(kal_uint8 ps_id, d2cm_act_data_call_req_struct *req_ptr)
+{
+    if (nodata_state[ps_id] == NODATA_STATE_ACTING) return; //already activating
+
+    nodata_state[ps_id] = NODATA_STATE_ACTING;
+    nodata_retry_count[ps_id]++;
+
+    DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG dual apn retry#%d", nodata_retry_count[ps_id]);
+
+    //save parameters to dtag_act_data_call_req[ps_id]
+    if (req_ptr != &dtag_act_data_call_req[ps_id]) {
+        memcpy(&dtag_act_data_call_req[ps_id], req_ptr, sizeof(d2cm_act_data_call_req_struct));
+        // setting the act_data_call_req
+        dtag_act_data_call_req[ps_id].apn_idx = D2CM_ENGAGED_APN_IDX;
+        strncpy((char*)(dtag_act_data_call_req[ps_id].apn_type), "default", sizeof(dtag_act_data_call_req[ps_id].apn_type) - 1);
+        dtag_act_data_call_req[ps_id].apn_type[sizeof(dtag_act_data_call_req[ps_id].apn_type) - 1] = '\0';
+        dtag_act_data_call_req[ps_id].suff_cond = D2CM_SUFF_COND_NONE;
+        dtag_act_data_call_req[ps_id].flag = D2CM_ACT_DATA_CALL_REQ_FLAG_DANGLING;
+        dtag_act_data_call_req[ps_id].ipv4v6_fb_pref = D2CM_IPV4V6_FB_PREF_DISABLE_IPV4_FIRST;
+    }
+
+    // activating the apn
+    if (d2cm_act_data_call(ps_id, D2CM_CUSTOM_MOD_ID_OP, &dtag_act_data_call_req[ps_id], DTAG_dual_apn_act_data_call_cb, NULL) == D2CM_API_RES_FAIL) {
+        DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG_dual_apn_act_data_call(): Invalid argument!!\n");
+        nodata_state[ps_id] = NODATA_STATE_IDLE;
+        goto DTAG_DUAL_APN_ACT_DATA_CALL_ERR_1;
+    }
+
+    return;
+
+DTAG_DUAL_APN_ACT_DATA_CALL_ERR_1:
+    return;
+}
+
+static void dtag_get_pdn_profile_cb(kal_uint32 ps_id, d2cm_get_pdn_profile_ind_struct *pdn_profile_ptr, void* arg)
+{
+    d2cm_act_data_call_req_struct *act_data_call_req_ptr;
+    kal_int32 cids[2];
+
+    if (pdn_profile_ptr == NULL || arg == NULL) return;
+
+    act_data_call_req_ptr = (d2cm_act_data_call_req_struct *)arg;
+    cids[0] = pdn_profile_ptr->p_cid;
+    cids[1] = pdn_profile_ptr->fb_cid;
+
+    //checking the inputs
+    if (ps_id >= MAX_SIM_NUM || pdn_profile_ptr == NULL) {
+        DDM_CUST_LOG((MOD_D2CUST + ps_id), "dtag_get_pdn_profile_cb(): Invalid argument!!\n");
+        goto DTAG_GET_PDN_PROFILE_CB_ERR_1;
+    }
+
+    DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG: p_cid=%d, fb_cid=%d, apn=[%s], state=%d", cids[0], cids[1], pdn_profile_ptr->apn, pdn_profile_ptr->state);
+
+    //name is matched and (cid or f_cid) is invalid/de-activated
+    if (strncmp((char *)pdn_profile_ptr->apn, (char *)nodata_name[ps_id], strlen((char *)nodata_name[ps_id])) == 0 &&
+        (pdn_profile_ptr->state == D2CM_PDN_STATUS_DEACT) && ((cids[0] == D2CM_INVAL_CID))) {
+        strncpy((char *)act_data_call_req_ptr->apn, (char *)pdn_profile_ptr->apn, sizeof(act_data_call_req_ptr->apn) - 1);
+        act_data_call_req_ptr->apn[sizeof(act_data_call_req_ptr->apn) - 1] = '\0';
+    }
+
+    return;
+
+DTAG_GET_PDN_PROFILE_CB_ERR_1:
+    return;
+}
+
+static void DTAG_dual_apn(kal_uint8 ps_id)
+{
+    int k;
+    kal_bool found;
+
+    DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG_dual_apn check");
+    //1: check if LTE
+    if (current_attached_rat[ps_id] != RAT_LTE) {
+        DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG non LTE, skip");
+        nodata_target_state[ps_id] = NODATA_TARGET_STATE_DEACT;
+        return;
+    }
+
+    //2: check HPLMN
+    do {
+        kal_uint8 l4c_imsi[9] = {0};
+        kal_uint8 i = 0, j = 0;
+        kal_uint8 ch1, ch2;
+        kal_uint8 imsi[17];
+        l4csmu_get_imsi_by_idx(l4c_imsi, ps_id);
+        while(i < 8) {
+            ch1 = l4c_imsi[i] & 0x0f;
+            ch2 = (l4c_imsi[i] & 0xf0) >> 4;
+            *((kal_uint8*)imsi + j) = '0' + ch1;
+            if(0x0f == ch2) {
+                *((kal_uint8*)imsi + j + 1) = '\0';
+                break;
+            } else {
+                *((kal_uint8*)imsi + j + 1) = '0'+ch2;
+            }
+            i++;
+            j+=2;
+        }
+        imsi[16] = '\0';
+
+        DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG IMSI [%s]", &imsi[1]);
+        found = KAL_FALSE;
+        for (k = 0; k < dtag_dual_apn_list_sz; k++) {
+            if (strncmp(dtag_dual_apn_list[k], (char *)&imsi[1], strlen(dtag_dual_apn_list[k])) == 0) {
+                //DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG Compare [%s] found", dtag_dual_apn_list[k]);
+                found = KAL_TRUE;
+            } else {
+                //DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG Compare [%s] not found", dtag_dual_apn_list[k]);
+            }
+        }
+        if (!found) {
+            DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG HPLMN didn't belong to dual apn, skip");
+            nodata_target_state[ps_id] = NODATA_TARGET_STATE_DEACT;
+            return;
+        }
+    } while(0);
+
+    //check camped PLMN
+    DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG PLMN [%s]", &current_plmn[0]);
+    found = KAL_FALSE;
+    for (k = 0; k < dtag_dual_apn_list_sz; k++) {
+        if (strncmp(dtag_dual_apn_list[k], (char *)&current_plmn[0], strlen(dtag_dual_apn_list[k])) == 0) {
+            //DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG Compare [%s] found", dtag_dual_apn_list[k]);
+            found = KAL_TRUE;
+        } else {
+            //DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG Compare [%s] not found", dtag_dual_apn_list[k]);
+        }
+    }
+    if (!found) {
+        DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG camped PLMN didn't belong to dual apn, skip");
+        nodata_target_state[ps_id] = NODATA_TARGET_STATE_DEACT;
+        return;
+    }
+
+    //3: check if NODATA PDN exist
+    do {
+        d2cm_get_pdn_profile_req_struct dtag_get_pdn_profile_req;
+        d2cm_act_data_call_req_struct act_data_call_req;
+
+        //get PDN list
+        memset((void*)(&dtag_get_pdn_profile_req), 0, sizeof(d2cm_get_pdn_profile_req_struct));
+
+        DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG dual APN state check");
+        // initializing the variables
+        act_data_call_req.apn[0] = '\0';    // assumed NOT ""
+        // searching the pdn_tbl
+        if (d2cm_get_pdn_profile(ps_id, D2CM_CUSTOM_MOD_ID_OP, &dtag_get_pdn_profile_req, dtag_get_pdn_profile_cb, &act_data_call_req) == D2CM_API_RES_FAIL) {
+            DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG_dual_apn(): Invalid argument!!\n");
+            goto DTAG_DUAL_APN_ERR_1;
+        }
+
+        if (act_data_call_req.apn[0] != '\0') { //found but it's de-activated
+            DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG dual APN deactivated, then activate one %d", nodata_state[ps_id]);
+
+            nodata_target_state[ps_id] = NODATA_TARGET_STATE_ACT;
+            if (nodata_state[ps_id] == NODATA_STATE_TIMER) {
+                evshed_cancel_event(custom_d2_event_scheduler[ps_id], &nodata_evid[ps_id]);
+                nodata_retry_count[ps_id] = 0;
+                DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG_dual_apn_act_data_call & cancel old timer");
+                DTAG_dual_apn_act_data_call(ps_id, &act_data_call_req);
+            } else if (nodata_state[ps_id] == NODATA_STATE_IDLE) {
+                nodata_retry_count[ps_id] = 0;
+                DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG_dual_apn_act_data_call");
+                DTAG_dual_apn_act_data_call(ps_id, &act_data_call_req);
+            }
+
+        } else {
+            //activating, activated or deactivating
+            DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG dual APN activated/activating/deactivating do nothing");
+        }
+    } while(0);
+
+    return;
+
+DTAG_DUAL_APN_ERR_1:
+    return;
+}
+void custom_ia_apn(kal_uint8 *apn, kal_uint8 *req_apn, kal_uint8 ps_id)
+{
+    /* customize for operator in the future */
+    kal_uint32 sbp_id = sbp_get_sim_sbp_id(ps_id);
+
+    /* Null APN: use NW assigned apn name */
+    if (req_apn[0] == 0)
+        return;
+
+    switch (sbp_id) {
+        /* Change default setting so remove sbp 186 */
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+        /* Default: Use req_apn to re-use, not nw assigned apn */
+        default:
+            strcpy((char *)apn, (char *)req_apn);
+            break;
+    }
+    return;
+}
+void custom_d2_ia_success(d2am_ddm_attach_pdn_activate_success_ind_struct *ind, kal_uint8 ps_id)
+{
+    char apn_network_id[APN_STRING_LEN];
+
+    //remove suffix
+    hasOperatorId((char *)ind->apn, apn_network_id);
+
+    memcpy(nodata_name[ps_id], apn_network_id, APN_STRING_LEN);
+    DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG dual APN IA [%s]", nodata_name[ps_id]);
+}
+
+void custom_d2_attached_rat_ind(l4bnw_attached_rat_ind_struct *ind, kal_uint8 ps_id)
+{
+    //save current RAT
+    current_attached_rat[ps_id] = ind->attached_network_info.currently_attached_rat;
+    current_is_roaming[ps_id] = ind->attached_network_info.is_roaming;
+    //save current plmn
+    memcpy(current_plmn[ps_id], ind->attached_network_info.plmn, sizeof(ind->attached_network_info.plmn));
+
+    DDM_CUST_LOG((MOD_D2CUST + ps_id), "DTAG RAT[%s] ps_id=%d %d to %d, roaming %d to %d", current_plmn[ps_id], ps_id, last_attached_rat[ps_id], current_attached_rat[ps_id], last_is_roaming[ps_id], current_is_roaming[ps_id]);
+
+    //DTAG dual APN, When to check dual-APN:
+    //Condition1: non-4G to 4G
+    //Condition2: 4G and home to roaming
+    if (current_attached_rat[ps_id] == RAT_LTE) {
+        if (((last_attached_rat[ps_id] != RAT_NONE && last_attached_rat[ps_id] != RAT_LTE)) ||
+            ((last_is_roaming[ps_id] == 0) && current_is_roaming[ps_id])) {
+            DTAG_dual_apn(ps_id);
+        }
+    } else {
+        nodata_target_state[ps_id] = NODATA_TARGET_STATE_DEACT;
+    }
+
+    last_attached_rat[ps_id] = ind->attached_network_info.currently_attached_rat;
+    last_is_roaming[ps_id] = ind->attached_network_info.is_roaming;
+}
+
+
+/************************/
+/* DTAG Dual APN Code End */
+/************************/
+static void update_internet_cid(kal_uint8 ps_id, kal_uint8 cid, char *engaged_apn_type, char *profile_apn_type, char *apn_name)
+{
+
+    kal_uint32 sbp_id;
+
+    // List all the OP IDs, which do not want to keep Internet PDN.
+    // Code goes here.
+    sbp_id = sbp_get_sim_sbp_id(ps_id);
+    kal_uint32 default_sbp_id = sbp_query_id();
+
+
+    // Return from here without updating internet_cid.
+    switch (sbp_id)
+    {
+        case 0:
+        // Add more cases here
+        {
+            if(default_sbp_id == 0) {
+                DDM_CUST_LOG(MOD_D2CUST + ps_id, "update_internet_cid(): test sim and OM.");
+                //internet_cid[ps_id] = cid;
+                return;
+            }
+            break;
+        }
+        case 1:
+        {
+#if defined(__MTK_TARGET__) || defined(__NANO_UT__)
+            if(NULL == strcasestr(apn_name,"cmnet"))
+            {
+                DDM_CUST_LOG(MOD_D2CUST + ps_id, "update_internet_cid(): CMCC_SIM, ignore non-cmnet apn to avoid case fail");
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+                return;
+            }
+#else
+            if(NULL == StrStrI(apn_name,"cmnet"))
+            {
+                DDM_CUST_LOG(MOD_D2CUST + ps_id, "update_internet_cid(): CMCC_SIM, ignore non-cmnet apn to avoid case fail");
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+                return;
+            }
+#endif
+            else
+            {
+                 internet_cid[ps_id] = cid;
+                 return;
+            }
+            break;
+        }
+        default:
+        {
+            // Allow this cid.
+            break;
+        }
+    }
+    // Check if APN type = "default" for Internet PDN.
+#if defined(__MTK_TARGET__) || defined(__NANO_UT__)
+    if (((strcasestr((char*)engaged_apn_type, "default")) == NULL) &&
+        (!((strcasecmp((char*)engaged_apn_type, "unknown") == 0) && ((strcasestr((char*)profile_apn_type, "default"))||(strcasestr((char*)profile_apn_type, "nw_assigned")))))) {
+        if (cid == internet_cid[ps_id])
+        {
+            internet_cid[ps_id] = INVALID_INTERNET_CID;
+        }
+        return;
+    }
+#else
+    if (((StrStrI((char*)engaged_apn_type, "default")) == NULL) &&
+        (!((strcasecmp((char*)engaged_apn_type, "unknown") == 0) && ((StrStrI((char*)profile_apn_type, "default"))||(StrStrI((char*)profile_apn_type, "nw_assigned")))))) {
+        if (cid == internet_cid[ps_id])
+        {
+            internet_cid[ps_id] = INVALID_INTERNET_CID;
+        }
+        return;
+    }
+#endif
+    internet_cid[ps_id] = cid;
+}
+
+kal_int32 internet_apn_check(kal_uint8 ps_id, char *apn)
+{
+    kal_uint32 sbp_id;
+
+    sbp_id = sbp_get_sim_sbp_id(ps_id);
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "internet_apn_check apn = [%s]", apn);
+
+    switch(sbp_id) {
+        case 124: { //APTG
+            if (strcmp("gtnet", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 18: { // RJIL
+            if (strcmp("jionet", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 1003: { // Erricson
+            if (strcmp("apn03.ert.com", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 1: {
+            if (strcmp("cmnet", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 9: {
+            if (strcmp("ctnet", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 2: {
+            if (strcmp("3gnet", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 5: {
+            if (strcmp("internet.telekom", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 145: // AT&T
+        case 196: // AT&T
+        case 7: {
+            if (strcmp("nxtgenphone", apn) == 0 || strcmp("firstnet-phone", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 12: {
+            if (strcmp("vzwinternet", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 111: { // Vodafone
+            if (strcmp("www", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 121: { // Bell
+            if (strcmp("pda.bell.ca", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 186: { // Idea
+            if (strcmp("internet", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 147: { // Airtel
+            if (strcmp("airtelgprs.com", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 120: { // Claro
+            if (strcmp("java.claro.com.br", apn) == 0 || strcmp("claro.pe", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 150: { // Swisscomm
+            if (strcmp("gprs.swisscom.ch", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 6: { // web.vodafone
+            if (strcmp("web.vodafone.de", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 148: { // seatel
+            if (strcmp("seatel", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 178: { // smart
+            if (strcmp("smart", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 129: { //KDDI
+            if (strcmp("unod.au-net.ne.jp", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 130: { // timbrasil.br
+            if (strcmp("timbrasil.br", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 151: { // sunsurf
+            if (strcmp("sunsurf", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 132: { // movistar.pe
+            if (strcmp("movistar.pe", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 134: { // internet
+            if (strcmp("internet", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 136: { // entel.pe
+            if (strcmp("entel.pe", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 104: { // shwap
+            if (strcmp("shwap", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 103: { // e-ideas
+            if (strcmp("e-ideas", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 210: { // bsnlnet
+            if (strcmp("bsnlnet", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 112: { // internet.itelcel.com
+            if (strcmp("internet.itelcel.com", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+        case 211: { // apn01.cwpanama.com.pa
+            if (strcmp("apn01.cwpanama.com.pa", apn) == 0) { //matched
+                return 1;
+            }
+            break;
+        }
+    }
+    return -1;
+}
+
+
+void check_internet_cid(kal_uint8 ps_id, kal_uint8 cid, char *apn)
+{
+    kal_uint32 sbp_id;
+
+    sbp_id = sbp_get_sim_sbp_id(ps_id);
+
+    switch(sbp_id) {
+        case 124: { //APTG
+            if (strcmp("gtnet", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 18: { // RJIL
+            if (strcmp("jionet", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 1003: { // Erricson
+            if (strcmp("apn03.ert.com", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 1: {
+            if (strcmp("cmnet", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 2: {
+            if (strcmp("3gnet", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 5: {
+            if (strcmp("internet.telekom", apn) == 0) { //matched
+                        internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 145: // AT&T
+        case 196: // AT&T
+        case 7: {
+            if (strcmp("nxtgenphone", apn) == 0 || strcmp("firstnet-phone", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 12: {
+            if (strcmp("vzwinternet", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 111: { // Vodafone
+            if (strcmp("www", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 121: { // Bell
+            if (strcmp("pda.bell.ca", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 186: { // Idea
+            if (strcmp("internet", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 147: { // Airtel
+            if (strcmp("airtelgprs.com", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 120: { // Claro
+            if (strcmp("java.claro.com.br", apn) == 0 || strcmp("claro.pe", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 150: { // Swisscomm
+            if (strcmp("gprs.swisscom.ch", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 6: { // web.vodafone
+            if (strcmp("web.vodafone.de", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 148: { // seatel
+            if (strcmp("seatel", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 178: { // smart
+            if (strcmp("smart", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 129: { //KDDI
+            if (strcmp("unod.au-net.ne.jp", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 130: { // timbrasil.br
+            if (strcmp("timbrasil.br", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 151: { // sunsurf
+            if (strcmp("sunsurf", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 132: { // movistar.pe
+            if (strcmp("movistar.pe", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 134: { // internet
+            if (strcmp("internet", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 136: { // entel.pe
+            if (strcmp("entel.pe", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 104: { // shwap
+            if (strcmp("shwap", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 103: { // e-ideas
+            if (strcmp("e-ideas", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 210: { // bsnlnet
+            if (strcmp("bsnlnet", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 112: { // internet.itelcel.com
+            if (strcmp("internet.itelcel.com", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+        case 211: { // apn01.cwpanama.com.pa
+            if (strcmp("apn01.cwpanama.com.pa", apn) == 0) { //matched
+                internet_cid[ps_id] = cid;
+            } else { //not matched
+                if (cid == internet_cid[ps_id]) {
+                    internet_cid[ps_id] = INVALID_INTERNET_CID;
+                }
+            }
+            break;
+        }
+    }
+}
+
+kal_bool isTestSim(kal_uint8 ps_id)
+{
+#if defined(__GEMINI__)
+    return(is_test_sim(ps_id));
+#else
+    return(is_test_sim());
+#endif
+}
+
+static kal_bool hasOperatorId(const char *apn_full, char *apn_network_id)
+{
+    int i;
+    char *saveptr;
+    char *token[16];
+    char *str;
+    char apn[APN_STRING_LEN];
+
+    if (apn_full == NULL || apn_network_id == NULL) ASSERT(0);
+
+    //according to 3GPP TS 23.003:
+    //The APN is composed of two parts as follows:
+    //- The APN Network Identifier; this defines to which external network the GGSN is connected and optionally a requested service by the MS. This part of the APN is mandatory
+    //- The APN Operator Identifier; this defines in which PLMN GPRS backbone the GGSN is located. This part of the APN is optional.
+    //  The APN Operator Identifier format should be: mncXXX.mccYYY.gprs
+
+    //strncpy(apn, apn_full, APN_STRING_LEN);
+    strncpy((char*)apn, apn_full, sizeof(apn) - 1);
+    apn[sizeof(apn) - 1] = '\0';
+
+    str = apn;
+    for(i = 0; i < (sizeof(token)/(sizeof(char *))); i++) {
+        token[i] = strtok_r(str, ".", &saveptr);
+        str = NULL;
+        if (token[i] == NULL) break;
+    }
+    if (i > 3) {
+        if ((strcasecmp(token[i - 1], "gprs") == 0) && (strncasecmp(token[i - 2], "mcc", 3) == 0)&& (strncasecmp(token[i - 3], "mnc", 3) == 0)) {
+            //try APN Network Identifier again
+            strncpy(apn_network_id, apn_full, (token[i - 3] - token[0]) - 1);
+            apn_network_id[(token[i - 3] - token[0]) - 1] = '\0';
+            return (KAL_TRUE);
+        }
+    }
+
+    strcpy(apn_network_id, apn_full);
+    return (KAL_FALSE);
+}
+
+static void ddm_post_act_data_call_internet_check_hdl (kal_uint32 ps_id, d2cm_get_pdn_profile_ind_struct *ind_ptr, void *arg)
+{
+    const d2cm_act_data_call_cnf_struct *act_data_call_cnf_ptr;
+    //kal_uint32 default_sbp_id = sbp_query_id();
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || ind_ptr == NULL || arg == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "ddm_post_act_data_call_internet_check_hdl(): Invalid argument!!\n");
+        goto D2PM_IS_APN_INDEX_REUSABLE_HDL_ERR_1;
+    }
+
+    // initializing the variables
+    act_data_call_cnf_ptr = (const d2cm_act_data_call_cnf_struct*)arg;
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "ddm_post_act_data_call_internet_check_hdl(): ps_id = %d, apn = \"%s\", p_cid = %d, fb_cid = %d!!\n", ps_id, ind_ptr->apn, ind_ptr->p_cid, ind_ptr->fb_cid);
+// ++++ DEBUG ++++
+
+    if(ind_ptr->p_cid == act_data_call_cnf_ptr->cid || ind_ptr->fb_cid == act_data_call_cnf_ptr->cid)
+    {
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+        DDM_CUST_LOG(
+            (MOD_D2CUST + ps_id),
+            "ddm_post_act_data_call_internet_check cid=%d apn=[%s] engaged_apn_type=[%s] apn_type=[%s] SBP_ID=%d test_sim=%d",
+            act_data_call_cnf_ptr->cid,
+            ind_ptr->apn,
+            ind_ptr->engaged_apn_type,
+            ind_ptr->apn_type,
+            sbp_get_sim_sbp_id(ps_id),
+            (isTestSim(ps_id)) ? 1 : 0);
+
+        update_internet_cid(ps_id, act_data_call_cnf_ptr->cid, ind_ptr->engaged_apn_type, ind_ptr->apn_type, ind_ptr->apn);
+    }
+
+    return;
+
+    // withdrawing what this function did
+D2PM_IS_APN_INDEX_REUSABLE_HDL_ERR_1:
+    return;
+}
+
+
+static void ddm_post_act_data_call_internet_check (kal_uint32 ps_id, const d2cm_act_data_call_cnf_struct *act_data_call_cnf_ptr, void* arg)
+{
+    d2cm_get_pdn_profile_req_struct req;
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || act_data_call_cnf_ptr == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "ddm_post_act_data_call_internet_check(): Invalid argument!!\n");
+        return;
+    }
+
+    // getting the PDN profiles
+    memset((void*)(&req), 0, sizeof(req));
+    if(d2cm_get_pdn_profile(ps_id, D2CM_CUSTOM_MOD_ID_OP, &req, ddm_post_act_data_call_internet_check_hdl, (void*)act_data_call_cnf_ptr) == D2CM_API_RES_FAIL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "ddm_post_act_data_call_internet_check(): d2cm_get_pdn_profile() error!!\n");
+        return;
+    }
+
+    return;
+}
+
+kal_uint32 custom_d2_set_fallback_parameter()
+{
+    // Change the return value if needed, or MTK modem uses its own default setting.
+#ifdef __TC10__
+    return ATCMD_FALLBACK_ENABLE_ENABLE_IPV4V6_FALLBACK;
+#else
+    return ATCMD_FALLBACK_ENABLE_MAX;
+#endif
+}
+
+kal_uint32 custom_d2_set_ipfallback_parameter()
+{
+    // Change the return value if needed, or MTK modem uses its own default setting.
+    return ATCMD_IPV4_FIRST_MAX;
+}
+
+static void d2pm_fetch_apn_type_hdl (kal_uint32 ps_id, d2cm_get_pdn_profile_ind_struct *ind_ptr, void *arg)
+{
+    struct
+    {
+        kal_uint8 *apn;
+        kal_char *engaged_apn_type;
+    }*hdl_arg_ptr = arg;
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || ind_ptr == NULL || arg == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_type_default_hdl(): Invalid argument!!\n");
+        return;
+    }
+
+    if(strncasecmp((const char*)(ind_ptr->apn), (char *)hdl_arg_ptr->apn, sizeof(ind_ptr->apn)) == 0)
+    {
+        strncpy(hdl_arg_ptr->engaged_apn_type, (const char*)(ind_ptr->engaged_apn_type), sizeof(ind_ptr->engaged_apn_type) - 1);
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_type_default_hdl(): hdl_arg_ptr->engaged_apn_type \"%s\" ", hdl_arg_ptr->engaged_apn_type);
+    }
+    return;
+}
+
+void d2pm_fetch_apn_type (kal_uint32 ps_id, kal_uint8 *apn, kal_char *apn_type)
+{
+
+    d2cm_get_pdn_profile_req_struct req;
+    struct
+    {
+        kal_uint8 *apn;
+        kal_char *engaged_apn_type;
+    }hdl_arg;
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || apn == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_type_default(): Invalid argument!!\n");
+        return;
+    }
+
+    // initializing the variables
+    hdl_arg.apn = apn;
+    hdl_arg.engaged_apn_type = apn_type;
+
+    // getting the PDN profiles
+    memset((void*)(&req), 0, sizeof(req));
+    req.flag |= D2CM_GET_PDN_PROFILE_REQ_FLAG_INCL_APN_IDX;
+    if(d2cm_get_pdn_profile(ps_id, D2CM_CUSTOM_MOD_ID_OP, &req, d2pm_fetch_apn_type_hdl, (void*)(&hdl_arg)) == D2CM_API_RES_FAIL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_type_default(): d2cm_get_pdn_profile() error!!\n");
+        return;
+    }
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "hdl_arg.engaged_apn_type %s \n", hdl_arg.engaged_apn_type);
+    return;
+
+}
+kal_bool custom_reset_data_retry(kal_uint32 sbp_id, apn_data_retry_info_t *apn_retry_info, retrytime_reset_event_enum event)
+{
+    kal_bool result = KAL_FALSE;
+    kal_uint32 default_sbp_id = sbp_query_id();
+    switch (event) {
+        case RETRY_RESET_POWER_CYCLE_ON:
+            if (apn_retry_info->has_power_off) {
+                DDM_CUST_LOG(MOD_DDM, "RETRY_RESET_POWER_CYCLE_ON %s: reset", apn_retry_info->apn);
+                if(sbp_id == 3 && apn_retry_info->apn_type & DDM_APN_TYPE_IMS){
+                    DDM_CUST_LOG(MOD_DDM, "RETRY_RESET_POWER_CYCLE_ON Don't reset for IMS PDN");
+                    return KAL_FALSE;
+                }
+                return KAL_TRUE;
+            } else {
+                DDM_CUST_LOG(MOD_DDM, "RETRY_RESET_POWER_CYCLE_ON %s", apn_retry_info->apn);
+            }
+            break;
+        case RETRY_RESET_POWER_CYCLE_OFF:
+            DDM_CUST_LOG(MOD_DDM, "RETRY_RESET_POWER_CYCLE_OFF %s", apn_retry_info->apn);
+            apn_retry_info->has_power_off = KAL_TRUE;
+            break;
+        case RETRY_RESET_APN_CONFIG_CHANGED:
+            {
+                DDM_CUST_LOG(MOD_D2CUST,
+                    "APN config changed. SBP ID = %d, APN = %s, Error cause = %d",
+                    sbp_id,
+                    apn_retry_info->apn,
+                    apn_retry_info->error_cause);
+
+                // Telstra 19
+                if(default_sbp_id == 19 || sbp_id == 19)
+                {
+                    if (apn_retry_info->error_cause == RMMI_ERR_OPERATOR_BARRING ||
+                        apn_retry_info->error_cause == RMMI_ERR_USER_AUTH_FAIL ||
+                        apn_retry_info->error_cause == RMMI_ERR_SERV_OPTION_NOT_SUPPORTED ||
+                        apn_retry_info->error_cause == RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED)
+                    {
+                        DDM_CUST_LOG(MOD_D2CUST, "Reset retry timer.");
+                        result = KAL_TRUE;
+                    }
+                    else
+                    {
+                        DDM_CUST_LOG(MOD_D2CUST, "No reset retry timer for err # %d", apn_retry_info->error_cause);
+                    }
+                }
+                else
+                {
+                    // Please add above this 'else' for other opertors.
+                    DDM_CUST_LOG(MOD_D2CUST, "No customization!");
+                }
+
+                return result;
+            }
+            break;
+    }
+
+    return KAL_FALSE;
+}
+kal_bool custom_is_retrytime_specify_by_operator(kal_uint32 ps_id, kal_uint8 *apn, kal_uint16 err_cause)
+{
+    kal_uint32 sbp_id = sbp_get_sim_sbp_id(ps_id);
+
+    switch (sbp_id) {
+        case 145: // AT&T
+        case 196: // AT&T
+        case 7:
+            {
+                if(strncasecmp((char *)apn, (char *)"ims", strlen("ims")) == 0) {
+                    if(ESM_REQ_SERVICE_NOT_SUBSCRIBED == err_cause || ESM_UNKNOWN_PDN_TYPE == err_cause)
+                        return KAL_TRUE;
+                    else
+                        return KAL_FALSE;
+                } else {
+                    return KAL_FALSE;
+                }
+                break;
+            }
+        case 129:
+            {
+                if(TCM_ESM_TIMER_TIMEOUT == err_cause)
+                    return KAL_TRUE;
+                else
+                    return KAL_FALSE;
+                break;
+            }
+        case 19:
+            {
+                if(ESM_INSUFFICIENT_RESOURCES == err_cause || ESM_UNKNOWN_OR_MISSING_APN == err_cause || ESM_UNKNOWN_PDN_TYPE == err_cause || RMMI_ERR_ACTIVATION_REJ_UNSPECIFIED == err_cause || ESM_SERVICE_TEMP_OUT_OF_ORDER == err_cause || ESM_NETWORK_FAILURE == err_cause || ESM_REQUEST_REJECTED_BY_SGW_OR_PDNGW == err_cause)
+                    return KAL_TRUE;
+                else
+                    return KAL_FALSE;
+                break;
+            }
+        case 6:
+            {
+                if(strncasecmp((char *)apn, (char *)"ims", strlen("ims")) == 0) {
+                    if(ESM_REQ_SERVICE_NOT_SUBSCRIBED == err_cause || ESM_UNKNOWN_OR_MISSING_APN == err_cause || ESM_INSUFFICIENT_RESOURCES == err_cause)
+                        return KAL_TRUE;
+                    else
+                        return KAL_FALSE;
+                } else{
+                    return KAL_FALSE;
+                }
+                break;
+            }
+        case 5:
+            {
+                if(strncasecmp((char *)apn, (char *)"ims", strlen("ims")) == 0) {
+                    if(ESM_REQUEST_REJECTED_BY_SGW_OR_PDNGW == err_cause)
+                        return KAL_TRUE;
+                    else
+                        return KAL_FALSE;
+                } else{
+                    return KAL_FALSE;
+                }
+                break;
+            }
+        case 112:
+            {
+                if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_CLEAR_CODE_33_29_NO_RETRY, ps_id)) {
+                    if(ESM_REQ_SERVICE_NOT_SUBSCRIBED == err_cause || ESM_USER_AUTH_FAILED == err_cause ||
+                    ESM_MULTIPLE_PDN_APN_NOT_ALLOWED == err_cause || UNSUBSCRIBED_SERVICE_OPTION == err_cause)
+                        return KAL_TRUE;
+                    else
+                        return KAL_FALSE;
+                } else if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_CLEAR_CODE_33, ps_id)) {
+                    if(ESM_REQ_SERVICE_NOT_SUBSCRIBED == err_cause || ESM_USER_AUTH_FAILED == err_cause || 
+                    ESM_MULTIPLE_PDN_APN_NOT_ALLOWED == err_cause || UNSUBSCRIBED_SERVICE_OPTION == err_cause)
+                        return KAL_TRUE;
+                    else
+                        return KAL_FALSE;
+                }
+                break;
+            }
+        case 8:
+            {
+                if(strncasecmp((char *)apn, (char *)"ims", strlen("ims")) == 0) {
+                    if(ESM_REQ_SERVICE_NOT_SUBSCRIBED == err_cause)
+                        return KAL_TRUE;
+                    else
+                        return KAL_FALSE;
+                } else{
+                    if(ESM_UNKNOWN_OR_MISSING_APN == err_cause)
+                        return KAL_TRUE;
+                    else
+                        return KAL_FALSE;
+                }
+                break;
+            }
+        case 3:
+        case 107:
+        case 124:
+        case 156:
+        case 178:
+        case 211:
+        case 127:
+        case 157:
+        case 216:
+        case 219:
+        case 210:
+        case 221:
+        case 347:
+            {
+                if(strncasecmp((char *)apn, (char *)"ims", strlen("ims")) == 0) {
+                    if(ESM_REQ_SERVICE_NOT_SUBSCRIBED == err_cause || ESM_UNKNOWN_OR_MISSING_APN == err_cause)
+                        return KAL_TRUE;
+                    else
+                        return KAL_FALSE;
+                } else{
+                    return KAL_FALSE;
+                }
+                break;
+            }
+        case 186:
+            {
+                if(strncasecmp((char *)apn, (char *)"ims", strlen("ims")) == 0) {
+                    if(ESM_REQ_SERVICE_NOT_SUBSCRIBED == err_cause || ESM_INSUFFICIENT_RESOURCES == err_cause || ESM_NETWORK_FAILURE == err_cause)
+                        return KAL_TRUE;
+                    else
+                        return KAL_FALSE;
+                } else{
+                    return KAL_FALSE;
+                }
+                break;
+            }
+        case 103:
+            {
+                if(strncasecmp((char *)apn, (char *)"ims", strlen("ims")) == 0) {
+                    if(ESM_REQ_SERVICE_NOT_SUBSCRIBED == err_cause || ESM_UNKNOWN_OR_MISSING_APN == err_cause || ESM_UNKNOWN_PDN_TYPE == err_cause || ESM_MULTIPLE_PDN_APN_NOT_ALLOWED == err_cause)
+                        return KAL_TRUE;
+                    else
+                        return KAL_FALSE;
+                } else{
+                    return KAL_FALSE;
+                }
+                break;
+            }
+        case 120:
+            {
+                if(strncasecmp((char *)apn, (char *)"ims", strlen("ims")) == 0) {
+                    if(ESM_REQ_SERVICE_NOT_SUBSCRIBED == err_cause || ESM_UNKNOWN_OR_MISSING_APN == err_cause)
+                        return KAL_TRUE;
+                    else
+                        return KAL_FALSE;
+                } else{
+                    if(ESM_USER_AUTH_FAILED == err_cause || ESM_REQ_SERVICE_NOT_SUBSCRIBED == err_cause)
+                        return KAL_TRUE;
+                    else
+                        return KAL_FALSE;
+                }
+                break;
+            }
+        case 17:
+            {
+                return KAL_TRUE;
+                break;
+            }
+        case 50:
+            {
+                if(strncasecmp((char *)apn, (char *)"ims", strlen("ims")) == 0)
+                    return KAL_TRUE;
+                else
+                    return KAL_FALSE;
+                break;
+            }
+        default:
+            return KAL_FALSE;
+    }
+    return KAL_FALSE;
+}
+
+
+void custom_dump_data_retry_info(kal_uint32 ps_id, apn_data_retry_info_t *apn_retry_info)
+{
+    if(apn_retry_info != NULL)
+    {
+        DDM_CUST_LOG(
+            MOD_D2CUST + ps_id,
+            "custom_handle_data_retry - apn_retry_info data : "
+            "apn = %s, "
+            "apn_type = %d, "
+            "end_time = %d, "
+            "error_cause = %d, "
+            "error_occured = %d, "
+            "has_power_off = %d, "
+            "retrytime_type = %d, "
+            "retry_count = %d, "
+            "retry_count_exhaustible = %d, "
+            "retry_count_setted = %d, "
+            "retry_time = %d.",
+            apn_retry_info->apn,
+            apn_retry_info->apn_type,
+            apn_retry_info->end_time,
+            apn_retry_info->error_cause,
+            apn_retry_info->error_occured,
+            apn_retry_info->has_power_off,
+            apn_retry_info->retrytime_type,
+            apn_retry_info->retry_count,
+            apn_retry_info->retry_count_exhaustible,
+            apn_retry_info->retry_count_setted,
+            apn_retry_info->retry_time);
+    }
+    else
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_handle_data_retry - apn_retry_info data : NULL");
+    }
+}
+
+void custom_handle_data_retry(kal_uint32 sbp_id, apn_data_retry_info_t *apn_retry_info, kal_uint16 err_cause, kal_uint32 ps_id, rat_enum rat, kal_uint8 *plmn, kal_bool is_mcf_support, kal_uint32 *retrytime, kal_uint8 retry_time_idx, kal_bool is_roaming)
+{
+    kal_char current_apn_type[APN_TYPE_STRING_LEN];
+    kal_uint8 *mcc214 =(kal_uint8 *) "214";
+
+    DDM_CUST_LOG(
+        MOD_D2CUST + ps_id,
+        "custom_handle_data_retry"
+        "sbp_id = %d, "
+        "err_cause = %d, "
+        "rat = %d, "
+        "is_roaming = %d, "
+        "plmn = %s.",
+        sbp_id,
+        err_cause,
+        rat,
+        is_roaming,
+        plmn == NULL ? "no data" : (char *)plmn);
+
+    custom_dump_data_retry_info(ps_id, apn_retry_info);
+
+    memset((void*)(current_apn_type), 0, sizeof(kal_char)*APN_TYPE_STRING_LEN);
+    d2pm_fetch_apn_type(ps_id, apn_retry_info->apn, current_apn_type);
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_type_default():  %s \n", current_apn_type);
+
+    switch (sbp_id) {
+        case 129:
+            { // KDDI
+                d2pm_fetch_apn_type(ps_id, apn_retry_info->apn, current_apn_type);
+                DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2pm_is_apn_type_default():  %s \n", current_apn_type);
+
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_EMERGENCY)
+                {
+                    apn_retry_info->retrytime_type = RETRY_TYPE_NO_SUGGEST;
+                    apn_retry_info->retry_time = 0;
+                }
+                else if(strcasecmp(current_apn_type, "dun") == 0
+                            && (RMMI_ERR_MISSING_APN == err_cause
+                                || RMMI_ERR_UNKNOWN_PDP_ADDR == err_cause
+                                || RMMI_ERR_USER_AUTH_FAIL == err_cause
+                                || RMMI_ERR_ACTIVATION_REJ_UNSPECIFIED == err_cause
+                                || ESM_NETWORK_FAILURE == err_cause))
+                {
+                    //Modified based on AP expectation.
+                    DDM_CUST_LOG(MOD_D2CUST + ps_id, "inside the dun case \n");
+                }
+                else
+                {
+                    if(apn_retry_info->retrytime_type != RETRY_TYPE_WITH_SUGGEST)
+                    { // ensuring backoff timer is not affected
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 60;
+                        apn_retry_info->end_time = 60 + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                }
+                break;
+            }
+        case 12:
+            {
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+                if (TCM_ESM_FAIL_CAUSE_REQ_RES_APN_MISMATCH == err_cause)
+                {
+                    DDM_CUST_LOG(MOD_DDM, "Blocking if APN mismatch from NW");
+                    apn_retry_info->error_occured = KAL_TRUE;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                    apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                }
+                //apn_retry_info->error_occured = KAL_FALSE;
+                //apn_retry_info->retrytime_type = RETRY_TYPE_NO_SUGGEST;
+                //apn_retry_info->retry_time = 0;
+                break;
+            }
+        case 11:
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(TCM_ESM_FAIL_CAUSE_GEMINI_SUSPEND == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 8;
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                }
+                break;
+            }
+        case 19:
+            {
+                // Telstra
+                if(RMMI_ERR_INSUFF_RESOURCE == err_cause
+                    || RMMI_ERR_MISSING_APN == err_cause
+                    || RMMI_ERR_UNKNOWN_PDP_ADDR == err_cause
+                    || RMMI_ERR_ACTIVATION_REJ_BY_GGSN == err_cause
+                    || RMMI_ERR_ACTIVATION_REJ_UNSPECIFIED == err_cause
+                    || RMMI_ERR_SERV_OPTION_TEMP_OUT_OF_ORDER == err_cause
+                    || ESM_NETWORK_FAILURE == err_cause)
+                {
+                    int time_unit = 12 * 60; // 12 minutes
+                    DDM_CUST_LOG(MOD_DDM, "[Telstra]retry count :%d", apn_retry_info->retry_count);
+
+                    if(apn_retry_info->retry_count < 8)
+                    {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->error_cause = err_cause;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+
+                        if(apn_retry_info->retry_count == 0)
+                        {
+                            apn_retry_info->retry_count_exhaustible = KAL_TRUE;
+                        }
+                        apn_retry_info->retry_count++;
+
+                        switch (apn_retry_info->retry_count) {
+                            case 1:
+                                apn_retry_info->retry_time = time_unit;
+                                break;
+                            case 2:
+                                apn_retry_info->retry_time = time_unit * 2;
+                                break;
+                            case 3:
+                                apn_retry_info->retry_time = time_unit * 2 * 2 ;
+                                break;
+                            case 4:
+                                apn_retry_info->retry_time = time_unit * 2 * 2 * 2;
+                                break;
+                            case 5:
+                                apn_retry_info->retry_time = time_unit * 2 * 2 * 2 * 2;
+                                break;
+                            case 6:
+                                apn_retry_info->retry_time = time_unit * 2 * 2 * 2 * 2 * 2;
+                                break;
+                            case 7:
+                                apn_retry_info->retry_time = time_unit * 2 * 2 * 2 * 2 * 2 * 2;
+                                break;
+                            case 8:
+                                apn_retry_info->retry_time = time_unit * 2 * 2 * 2 * 2 * 2 * 2 * 2;
+                                break;
+                            default:
+                                DDM_CUST_LOG(MOD_DDM, "[Telstra]");
+                                break;
+                            }
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                        DDM_CUST_LOG(MOD_DDM, "[Telstra]retry_time :%d", apn_retry_info->retry_time);
+                    }
+                    else
+                    {
+                        DDM_CUST_LOG(MOD_DDM, "[Telstra]retry time is longer than 2 days. No more retries.");
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->error_cause = err_cause;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+                else if(RMMI_ERR_OPERATOR_BARRING == err_cause
+                    || RMMI_ERR_USER_AUTH_FAIL == err_cause
+                    || RMMI_ERR_SERV_OPTION_NOT_SUPPORTED == err_cause
+                    || RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause)
+                {
+                    DDM_CUST_LOG(MOD_D2CUST + ps_id, "[err cause = %d]", err_cause);
+                    apn_retry_info->error_occured = KAL_TRUE;
+                    apn_retry_info->error_cause = err_cause;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                    apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                }
+                else
+                {
+                    apn_retry_info->error_occured = KAL_FALSE;
+                    apn_retry_info->error_cause = 0;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_NO_SUGGEST;
+                    apn_retry_info->retry_time = 0;
+                }
+                break;
+            }
+        case 145: // AT&T
+        case 196: // AT&T
+        case 7:
+            { // ATT
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause ) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                        DDM_CUST_LOG(MOD_DDM, "ATT enter no retry scenario");
+                    } else if(VGSM_PROPRIETARY_CAUSE_CORE_TIMER_TIMEOUT == err_cause){
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 12 * 60; // retry time is 12 min for this cause
+                        apn_retry_info->end_time = (12 * 60) + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                } else {
+                    if(apn_retry_info->retry_count_setted == KAL_FALSE) {
+                        apn_retry_info->retry_count_setted = KAL_TRUE;
+                        if(SM_LOCAL_REJECT_ACT_REQ_DUE_TO_REACH_RETRY_COUNTER == err_cause) { // we needed to make sure the no of attempts should be <= 60 in 1 hr
+                            apn_retry_info->retry_count = 12;
+                            apn_retry_info->retry_time = 160;
+                        } else {
+                            apn_retry_info->retry_count = 20;
+                            apn_retry_info->retry_time = 5;
+                        }
+                        apn_retry_info->end_time = (60 * 60) + kal_ticks_to_secs(kal_get_systicks());
+                    }
+
+                    apn_retry_info->error_occured = KAL_TRUE;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+
+                    apn_retry_info->retry_count--;
+                    if(apn_retry_info->retry_count == 0) {
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+                break;
+            }
+        case 6:
+            { // Vodafone
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    } else if(RMMI_ERR_MISSING_APN == err_cause) {
+                        if(!is_roaming) {
+                            apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                            apn_retry_info->retry_time = 22 * 60 * 60; //22 hours
+                            apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                            apn_retry_info->error_occured = KAL_TRUE;
+                        } else {
+                            apn_retry_info->error_occured = KAL_TRUE;
+                            apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                            apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                        }
+                    } else if(RMMI_ERR_INSUFF_RESOURCE == err_cause) {
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 22 * 60 * 60; //22 hours
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                        apn_retry_info->error_occured = KAL_TRUE;
+                    }
+                }
+                break;
+            }
+        case 3:
+            { // Orange
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->error_cause = RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED;
+                        apn_retry_info->retry_time = 24 * 60 * 60; //24 hours
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    } else if(RMMI_ERR_MISSING_APN == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->error_cause = RMMI_ERR_MISSING_APN;
+                        apn_retry_info->retry_time = 24 * 60 * 60; //24 hours
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+
+                    } else if (RMMI_ERR_ACTIVATION_REJ_BY_GGSN == err_cause
+                        || RMMI_ERR_ACTIVATION_REJ_UNSPECIFIED == err_cause
+                        || RMMI_ERR_SERV_OPTION_TEMP_OUT_OF_ORDER == err_cause
+                        || ESM_NETWORK_FAILURE == err_cause) {
+
+                        DDM_CUST_LOG(MOD_DDM, "orange, error cause :%d, retry count before :retry_count = %d, end_time = %d",
+                            err_cause, apn_retry_info->retry_count, apn_retry_info->end_time);
+
+                        if(apn_retry_info->retry_count_setted == KAL_FALSE && apn_retry_info->retry_count == 0) {
+                            apn_retry_info->retry_count_setted = KAL_TRUE;
+                            apn_retry_info->retry_count_exhaustible = KAL_TRUE;
+                            apn_retry_info->retry_count = 11;
+                            apn_retry_info->end_time = 60*60 + 26*60 + kal_ticks_to_secs(kal_get_systicks());//1 hour+ 26min
+                        }
+
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+
+                        switch (apn_retry_info->retry_count) {
+                            case 11:
+                                apn_retry_info->retry_time = 1;
+                                break;
+                            case 10:
+                                apn_retry_info->retry_time = 2;
+                                break;
+                            case 9:
+                                apn_retry_info->retry_time = 4;
+                                break;
+                            case 8:
+                                apn_retry_info->retry_time = 8;
+                                break;
+                            case 7:
+                                apn_retry_info->retry_time = 16;
+                                break;
+                            case 6:
+                                apn_retry_info->retry_time = 32;
+                                break;
+                            case 5:
+                                apn_retry_info->retry_time = 64;
+                                break;
+                            case 4:
+                                apn_retry_info->retry_time = 128;
+                                break;
+                            case 3:
+                                apn_retry_info->retry_time = 256;
+                                break;
+                            case 2:
+                                apn_retry_info->retry_time = 512;
+                                break;
+                            case 1:
+                                apn_retry_info->retry_time = 1024;
+                                apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                               break;
+                            default:
+                                apn_retry_info->retry_time = 1024;
+                                apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                                break;
+                        }
+                        if (apn_retry_info->retry_count > 0) {
+                            apn_retry_info->retry_count--;
+                        }
+                     } else {
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_SUGGEST;
+                        apn_retry_info->retry_time = 0;
+                        apn_retry_info->end_time = 0;
+                    }
+                }
+                break;
+            }
+        case 5:
+            { // DTAG
+#ifdef __IPC_ADAPTER__
+                // ALPS05054751 - DTAG ustomization of No Retry for Titan projects only. For all APN types.
+                if(RMMI_ERR_OPERATOR_BARRING == err_cause
+                    || RMMI_ERR_MISSING_APN == err_cause
+                    || RMMI_ERR_SERV_OPTION_NOT_SUPPORTED == err_cause
+                    || RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause)
+                {
+                    apn_retry_info->error_occured = KAL_TRUE;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                    apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                }
+#endif
+
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_ACTIVATION_REJ_BY_GGSN == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+                break;
+            }
+        case 107:
+            { // SFR
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_MISSING_APN == err_cause || RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 24 * 60 * 60; //24 hours
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                }
+                break;
+            }
+        case 108:
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+                break;
+            }
+        case 109:
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+                break;
+            }
+        case 112: // telcel
+            {
+                if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_CLEAR_CODE_33_29_NO_RETRY, ps_id)) { // Apply new CC33
+                    DDM_CUST_LOG(MOD_DDM, "Apply telcel new cc33");
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause || RMMI_ERR_USER_AUTH_FAIL == err_cause || ESM_MULTIPLE_PDN_APN_NOT_ALLOWED == err_cause){
+                        if(!strcasecmp(current_apn_type, "supl") == 0) {
+                            apn_retry_info->error_occured = KAL_TRUE;
+                            apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                            apn_retry_info->retry_time = 2 * 60 * 60;
+                            apn_retry_info->end_time = 7200 + kal_ticks_to_secs(kal_get_systicks());
+                        } else {
+                            //Modified based on AP expectation.
+                            apn_retry_info->error_occured = KAL_FALSE;
+                            apn_retry_info->retrytime_type = RETRY_TYPE_NO_SUGGEST;
+                            apn_retry_info->retry_time = 0;
+                        }
+                    }
+                } else if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_CLEAR_CODE_33, ps_id)) { // Apply old CC33
+                    DDM_CUST_LOG(MOD_DDM, "Apply telcel old cc33");
+                   if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause || RMMI_ERR_USER_AUTH_FAIL == err_cause || ESM_MULTIPLE_PDN_APN_NOT_ALLOWED == err_cause){
+                       apn_retry_info->error_occured = KAL_TRUE;
+                        if(apn_retry_info->retry_count_setted == KAL_FALSE) {
+                            apn_retry_info->retry_count_setted = KAL_TRUE;
+                            apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                            if(rat == RAT_LTE) {
+                                apn_retry_info->retry_count = 5;
+                                apn_retry_info->retry_time = 10;
+                            } else if(rat == RAT_UMTS) {
+                                apn_retry_info->retry_count = 2;
+                                apn_retry_info->retry_time = 45;
+                            }
+                            apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                        } else {
+                           apn_retry_info->retry_count--;
+                           if(apn_retry_info->retry_count == 0) {
+                                apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                                apn_retry_info->retry_time = 2 * 60 * 60; // 2 hour bartimer
+                                apn_retry_info->retry_count_setted = KAL_FALSE;
+                           } else {
+                                if(rat == RAT_LTE) {
+                                    apn_retry_info->retry_time = 10;
+                                } else if(rat == RAT_UMTS) {
+                                    apn_retry_info->retry_time = 45;
+                                }
+                           }
+                           apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                        }
+                    }
+                }
+                break;
+            }
+        case 110:
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+                break;
+            }
+        case 124:
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                    else if(RMMI_ERR_MISSING_APN == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 24 * 60 * 60;
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                }
+                break;
+            }
+        case 176:
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+                break;
+            }
+        case 8: // TMO
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 60;
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                }
+                if(RMMI_ERR_MISSING_APN == err_cause) {
+                    apn_retry_info->error_occured = KAL_TRUE;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                    apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                }
+                break;
+            }
+        case 200:  // JTL
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+                break;
+            }
+        case 186:
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    } else if(RMMI_ERR_INSUFF_RESOURCE == err_cause || ESM_NETWORK_FAILURE == err_cause) {
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 30;
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                }
+                break;
+            }
+        case 1003: // Erricson
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+                break;
+            }
+        case 17:
+            {   // DoCoMo
+                if(RMMI_ERR_MISSING_APN == err_cause || RMMI_ERR_UNKNOWN_PDP_ADDR == err_cause || ESM_PTI_ALREADY_USED == err_cause || ESM_PDN_TYPE_IPV4_ONLY_ALLOWED == err_cause || ESM_PDN_TYPE_IPV6_ONLY_ALLOWED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                } else if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    apn_retry_info->error_occured = KAL_TRUE;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                    apn_retry_info->retry_time = 5 * 60;
+                    apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                } else {
+                    // RMSC00930810
+                    if(apn_retry_info->retry_count_setted == KAL_FALSE && apn_retry_info->retry_count == 0) {
+                        apn_retry_info->retry_count_setted = KAL_TRUE;
+                        apn_retry_info->retry_count_exhaustible = KAL_TRUE;
+                        apn_retry_info->retry_count = 9;
+						apn_retry_info->end_time = 2 * 60 * 60 + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                    apn_retry_info->error_occured = KAL_TRUE;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                    switch (apn_retry_info->retry_count) {
+                        case 9:
+                            apn_retry_info->retry_time = 5;
+                            break;
+                        case 8:
+                            apn_retry_info->retry_time = 10;
+                            break;
+                        case 7:
+                            apn_retry_info->retry_time = 20;
+                            break;
+                        case 6:
+                            apn_retry_info->retry_time = 40;
+                            break;
+                        case 5:
+                            apn_retry_info->retry_time = 80;
+                            break;
+                        case 4:
+                            apn_retry_info->retry_time = 160;
+                            break;
+                        case 3:
+                            apn_retry_info->retry_time = 320;
+                            break;
+                        case 2:
+                            apn_retry_info->retry_time = 640;
+                            break;
+                        case 1:
+                            apn_retry_info->retry_time = 1280;
+                            apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                            break;
+                        default:
+                            apn_retry_info->retry_time = 1800;
+                            apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                            break;
+                    }
+                    if (apn_retry_info->retry_count > 0) {
+                        apn_retry_info->retry_count--;
+                    }
+                }
+                break;
+            }
+        case 50:
+            {   //Softbank
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS)
+                {
+                    if (rat == RAT_NR) {
+                        // RMSC00954474
+                        // Backoff of OTR-CORE_GEN-000264 should not be use for 5G PDU
+                        DDM_CUST_LOG(MOD_DDM + ps_id, "Not apply back-off mechanism for 5G PDU");
+                        break;
+                    }
+                    
+                    if(RMMI_ERR_INSUFF_RESOURCE == err_cause)
+                    {
+                        // RMSC00185517
+                        // Back-off timer T3396 should not be affected in case of ERROR #26 - Insufficient resources
+                        break;
+                    }
+                    if(apn_retry_info->retry_count_setted == KAL_FALSE) {
+                        apn_retry_info->retry_count_setted = KAL_TRUE;
+                        apn_retry_info->retry_count = 0;
+						apn_retry_info->end_time = 44*60*60 + 45*60 + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                    apn_retry_info->error_occured = KAL_TRUE;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                    switch (apn_retry_info->retry_count) {
+                        case 6:
+                            apn_retry_info->retry_time = 24 * 60 * 60;
+                            break;
+                        case 5:
+                            apn_retry_info->retry_time = 12 * 60 * 60;
+                            break;
+                        case 4:
+                            apn_retry_info->retry_time = 6 * 60 * 60;
+                            break;
+                        case 3:
+                            apn_retry_info->retry_time = 60 * 60;
+                            break;
+                        case 2:
+                            apn_retry_info->retry_time = 30 * 60;
+                            break;
+                        case 1:
+                            apn_retry_info->retry_time = 10 * 60;
+                            break;
+                        case 0:
+                            apn_retry_info->retry_time = 5 * 60;
+                            break;
+                        default:
+                            if(apn_retry_info->retry_count > 6) {
+                                apn_retry_info->retry_time = 24 * 60 * 60;
+                                apn_retry_info->end_time = 2*apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                            }
+                            else {
+                                apn_retry_info->retrytime_type = RETRY_TYPE_NO_SUGGEST;
+                                apn_retry_info->retry_time = 0;
+                                apn_retry_info->end_time = 0;
+                            }
+                            break;
+                    }
+                    apn_retry_info->retry_count++;
+                } else {
+                    apn_retry_info->retrytime_type = RETRY_TYPE_NO_SUGGEST;
+                    apn_retry_info->retry_time = 0;
+                }
+                break;
+            }
+        case 103:
+            {//Singtel
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause || RMMI_ERR_MISSING_APN == err_cause || RMMI_ERR_UNKNOWN_PDP_ADDR == err_cause || ESM_MULTIPLE_PDN_APN_NOT_ALLOWED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+                break;
+            }
+        case 0:
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(ESM_MULTIPLE_PDN_APN_NOT_ALLOWED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+                break;
+            }
+        case 156:
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    } else if(RMMI_ERR_MISSING_APN == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 24 * 60 * 60;
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                }
+                break;
+            }
+        case 120: // claro
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    } else if(RMMI_ERR_MISSING_APN == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 24 * 60 * 60;
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                } else {
+                    if(RMMI_ERR_USER_AUTH_FAIL == err_cause) {
+                        if(apn_retry_info->retry_count_setted == KAL_FALSE) {
+                            apn_retry_info->retry_count = 2;
+                            apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                            apn_retry_info->retry_time = 45;
+                            apn_retry_info->retry_count_setted = KAL_TRUE;
+                        }
+                        apn_retry_info->retry_count--;
+                        if(apn_retry_info->retry_count == 0) {
+                            apn_retry_info->error_occured = KAL_TRUE;
+                            apn_retry_info->retry_count_setted = KAL_FALSE;
+                        }
+                    } else if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        if(apn_retry_info->retry_count_setted == KAL_FALSE) {
+                            apn_retry_info->retry_count = 2;
+                            apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                            apn_retry_info->retry_time = 45;
+                            apn_retry_info->retry_count_setted = KAL_TRUE;
+                        }
+                        apn_retry_info->retry_count--;
+                        if(apn_retry_info->retry_count == 0) {
+                            apn_retry_info->error_occured = KAL_TRUE;
+                            apn_retry_info->retry_time = 12 * 60;
+                            apn_retry_info->end_time = 7200 + kal_ticks_to_secs(kal_get_systicks());
+                            apn_retry_info->retry_count_setted = KAL_FALSE;
+                        }
+                    }
+                }
+                break;
+            }
+        case 178:
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    } else if(RMMI_ERR_MISSING_APN == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 24 * 60 * 60;
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                }
+                break;
+            }
+        case 211: //C&W Panama
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    } else if(RMMI_ERR_MISSING_APN == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 24 * 60 * 60;
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                }
+                break;
+            }
+        case 127:
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    } else if(RMMI_ERR_MISSING_APN == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 24 * 60 * 60;
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                }
+                break;
+            }
+        case 157:
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_MISSING_APN == err_cause || RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+                break;
+            }
+        case 227: //Wind Greece
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    } else if(RMMI_ERR_MISSING_APN == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 24 * 60 * 60;
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                }
+                break;
+            }
+        case 237: //ICE Norway
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    } else if(RMMI_ERR_MISSING_APN == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 24 * 60 * 60;
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                }
+                break;
+            }
+        case 238: //videotron
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+                break;
+            }
+        case 216: //Zong Pakistan
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    } else if(RMMI_ERR_MISSING_APN == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 24 * 60 * 60;
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                }
+                break;
+            }
+        case 15: //telefonica: This eventually results in CC#55, and the expectation is that the UE will stop retrying until power cycled
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(ESM_MULTIPLE_PDN_APN_NOT_ALLOWED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                } else if(RMMI_ERR_USER_AUTH_FAIL == err_cause) {
+                    DDM_CUST_LOG(MOD_DDM, "telefonica plmn is %s", plmn);
+                    if (strncmp((char *)plmn, (char *)mcc214, strlen((char *)mcc214)) == 0) {
+                        DDM_CUST_LOG(MOD_DDM, "telefonica inside condition PASS");
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+                break;
+            }
+        case 102:
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+                break;
+            }
+        case 219: //Mytel Myanmar
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    } else if(RMMI_ERR_MISSING_APN == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 24 * 60 * 60;
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                }
+                break;
+            }
+        case 126: // Avea
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 24 * 60 * 60; //24 hours
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                }
+                break;
+            }
+        case 153:
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS)
+                {
+                    if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause)
+                    {
+                    apn_retry_info->error_occured = KAL_TRUE;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                    apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+            break;
+        }
+        case 217:
+        {
+            if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                    apn_retry_info->error_occured = KAL_TRUE;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                    apn_retry_info->retry_time = 24 * 60 * 60; //24 hours
+                    apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                }
+            }
+            break;
+        }
+        case 210: //BSNL
+        {
+            if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                    apn_retry_info->error_occured = KAL_TRUE;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                    apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                } else if(RMMI_ERR_MISSING_APN == err_cause) {
+                    apn_retry_info->error_occured = KAL_TRUE;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                    apn_retry_info->retry_time = 24 * 60 * 60;
+                    apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                }
+            }
+            break;
+        }
+        case 221: //TGP Singapore
+        {
+            if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                    apn_retry_info->error_occured = KAL_TRUE;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                    apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                } else if(RMMI_ERR_MISSING_APN == err_cause) {
+                    apn_retry_info->error_occured = KAL_TRUE;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                    apn_retry_info->retry_time = 24 * 60 * 60;
+                    apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                }
+            }
+            break;
+        }
+        case 154:
+        {
+            if (apn_retry_info->apn_type & DDM_APN_TYPE_IMS)
+            {
+                if ((RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) ||
+                        (ESM_MULTIPLE_PDN_APN_NOT_ALLOWED == err_cause) ||
+                        (RMMI_ERR_MISSING_APN == err_cause))
+                {
+                    apn_retry_info->error_occured = KAL_TRUE;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                    apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                }
+                else
+                {
+                    apn_retry_info->error_occured = KAL_FALSE;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_NO_SUGGEST;
+                    apn_retry_info->retry_time = 0;
+                }
+            }
+            break;
+        }
+        case 20: //Sprint
+        {
+            if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                    apn_retry_info->error_occured = KAL_TRUE;
+                    apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                    apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                }
+            }
+            break;
+        }
+        case 116: // LGU
+        {
+            if(RMMI_ERR_OPERATOR_BARRING == err_cause) {
+                apn_retry_info->error_occured = KAL_TRUE;
+                apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+            }
+            break;
+        }
+        case 130: // Tim
+        {
+            if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                if(RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause) {
+                     apn_retry_info->error_occured = KAL_TRUE;
+                     apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                     apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                } else if(RMMI_ERR_USER_AUTH_FAIL == err_cause) {
+                       if(apn_retry_info->retry_count_setted == KAL_FALSE) {
+                            apn_retry_info->retry_count = 4;
+                            apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                            apn_retry_info->retry_time = 8;
+                            apn_retry_info->retry_count_setted = KAL_TRUE;
+                        }
+                        apn_retry_info->retry_count--;
+                       if(apn_retry_info->retry_count == 0) {
+                           apn_retry_info->error_occured = KAL_TRUE;
+                           apn_retry_info->retry_count_setted = KAL_FALSE;
+                        }
+                    }
+                }
+                break;
+            }
+        case 204: // Rogers, RMSC00959710, RMSC00959709, RMSC00959708
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_MISSING_APN == err_cause || RMMI_ERR_USER_AUTH_FAIL  == err_cause || ESM_NETWORK_FAILURE  == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_NO_RETRY;
+                        apn_retry_info->retry_time = RETRYTIME_NO_RETRY;
+                    }
+                }
+                break;
+            }
+        case 347: //Kenya Airtel requirement 20220324
+            {
+                if(apn_retry_info->apn_type & DDM_APN_TYPE_IMS) {
+                    if(RMMI_ERR_MISSING_APN == err_cause) {
+                        apn_retry_info->error_occured = KAL_TRUE;
+                        apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+                        apn_retry_info->retry_time = 4 * 60 * 60;
+                        apn_retry_info->end_time = apn_retry_info->retry_time + kal_ticks_to_secs(kal_get_systicks());
+                    }
+                }
+                break;
+            }
+        default:
+        if(is_mcf_support) {
+            apn_retry_info->error_occured = KAL_TRUE;
+            apn_retry_info->retrytime_type = RETRY_TYPE_WITH_SUGGEST;
+            apn_retry_info->retry_time = retrytime[retry_time_idx];
+        }
+                //apn_retry_info->error_occured = KAL_FALSE;
+                //apn_retry_info->retrytime_type = RETRY_TYPE_NO_SUGGEST;
+                //apn_retry_info->retry_time = 0;
+                break;
+    }
+}
+#ifdef __TC01__
+kal_bool custom_etimer_urc_enable(kal_uint16 err_cause)
+{
+    if((err_cause > PAM_CAUSE_START && err_cause < PAM_CAUSE_END) || err_cause == RMMI_ERR_INSUFF_RESOURCE || err_cause == RMMI_ERR_GPRS_NON_GPRS_NOT_ALLOWED || err_cause == RMMI_ERR_MISSING_APN || err_cause == RMMI_ERR_SERV_OPTION_NOT_SUPPORTED || err_cause == RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED || err_cause == RMMI_ERR_USER_AUTH_FAIL || err_cause == ESM_NETWORK_FAILURE)
+        return KAL_TRUE;
+    else
+        return KAL_FALSE;
+}
+#endif
+d2am_keep_pdn_event_enum custom_data_switch_keep_pdn(d2am_pdn_info_for_custom_struct *pdn_info_for_custom)
+{
+    // Customer can decide to keep pdn or not based on apn/apn type or anything else in profile
+    //return D2AM_KEEP_PDN,D2AM will not deact PDN
+    //return D2AM_NOT_KEEP_PDN, D2AM will trigger deact to lowerlayer
+    //retunrn D2AM_FOLLOW_DEFAULT, D2AM will follow current default design
+	return D2AM_FOLLOW_DEFAULT;
+}
+void custom_d2_update_ia_apn(kal_uint8 ps_id, kal_uint8 cid, char *apn)
+{
+    //kal_uint32 sbp_id = sbp_get_sim_sbp_id(ps_id);
+    internet_cid[ps_id] = cid;
+}
+kal_bool custom_d2_ims_last_pdn(kal_uint32 sim_sbp_id)
+{
+    switch(sim_sbp_id){
+        case 1:
+        case 2:
+        case 9:
+            return KAL_TRUE;
+            break;
+        default:
+            return KAL_FALSE;
+            break;
+    }
+}
+
+kal_bool custom_d2_keep_internet_pdn(kal_uint32 cid, kal_uint8 ps_id, kal_bool mobile_data_on, kal_bool data_switch_on, rat_enum rat, atcmd_deact_cause_enum deact_cause, nvram_d2_mcf_keep_internet_struct *mcf_keep_internet, kal_uint8 *plmn)
+{
+    kal_uint32 sbp_id = sbp_get_sim_sbp_id(ps_id);
+    kal_uint32 default_sbp_id = sbp_query_id();
+
+    DDM_CUST_LOG(MOD_DDM + ps_id, "default_sbp_id : %d, sbp_id : %d, is wifi enable : %d, mobile data on = %d",
+        default_sbp_id, sbp_id, is_wifi_en(ps_id), mobile_data_on);
+
+    DDM_CUST_LOG(MOD_DDM + ps_id, "data_switch_on = %d, internet_cid[ps_id] = %d, cid = %d, rat = %d, deact_cause = %d, plmn = %s",
+        data_switch_on, internet_cid[ps_id], cid, rat, deact_cause, plmn);
+
+    if(mcf_keep_internet->is_valid == KAL_TRUE) {
+        kal_prompt_trace(MOD_DDM + ps_id, "[MOD_DDM DEBUG] use mcf logic for keep internet");
+        if(mcf_keep_internet->enable_keep == KAL_TRUE) {
+            if(mcf_keep_internet->rat == 0) // ALL RAT
+                return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+            else if(mcf_keep_internet->rat == 1) {// 2/3G
+                if(rat == RAT_UMTS)
+                    return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+            } else if(mcf_keep_internet->rat == 2) { // LTE
+                if(rat == RAT_LTE)
+                    return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+                else
+                    return KAL_FALSE;
+            } else if(mcf_keep_internet->rat == 3) { // NR
+                if(rat == RAT_NR)
+                    return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+                else
+                    return KAL_FALSE;
+            }
+            else
+                return KAL_FALSE;
+        } else {
+            return KAL_FALSE;
+        }
+    }
+    // Special cases :
+    if (deact_cause == ATCMD_DEACT_CAUSE_EGACT_CAUSE_AOSP_SHUTDOWN)
+    {
+#if !defined (__IPC_ADAPTER__)
+        if(sbp_id == 161)
+        {
+            return KAL_FALSE;
+        }
+#endif
+        return KAL_TRUE;
+    }
+
+    if (deact_cause == ATCMD_DEACT_CAUSE_EGACT_CAUSE_DEACT_TEMP_DATA_SWITCH)
+    {
+        return KAL_TRUE;
+    }
+
+#if defined (__IPC_ADAPTER__)
+    // For Titan, always deact PDN.
+    return KAL_FALSE;
+#else
+    // Always choose if to deact PDN or not.
+
+    switch(default_sbp_id) {
+        case 1: // CMCC
+        case 2:
+            if(test_mode_consider_sim(ps_id) == PS_CONF_TEST_FTA) {
+                if(rat == RAT_LTE)
+                    return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+                else
+                    return KAL_FALSE;
+            }
+            if (last_internet_mode_is_enabled == KAL_TRUE){
+                return KAL_FALSE; 
+            }
+            if(internet_cid[ps_id] == cid && rat == RAT_LTE)
+                return KAL_TRUE;
+            else
+                return KAL_FALSE;
+            break;
+        case 0: // OM
+        case 145: // AT&T
+        case 196: // AT&T
+        case 7: // AT&T
+        case 12: // VzW
+        case 16: {// EE
+            if(sbp_id == 9)
+                return KAL_FALSE;
+            if(sbp_id == 129 && mobile_data_on == KAL_FALSE)// KDDI requirement, RMSC00497579
+                return KAL_FALSE;
+            if(sbp_id == 5 && rat == RAT_LTE) {
+                if(internet_cid[ps_id] == cid)
+                    return KAL_TRUE;
+            }
+            
+            if(sbp_id == 8 && rat == RAT_LTE ) { // MOLY00656034
+                if (test_mode_consider_sim(ps_id) == PS_CONF_TEST_FTA) {
+                    if(is_wifi_en(ps_id) == KAL_TRUE)
+                        return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+                    else
+                        return KAL_FALSE;
+                } else {
+                    return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+                }
+            }
+            if((sbp_id == 7 || sbp_id == 145 || sbp_id == 196) && rat == RAT_LTE) { //AT&T
+                return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+            }
+            if(sbp_id == 1 && rat == RAT_LTE) { //CMCC
+                if(last_internet_mode_is_enabled){//game mode always deact internet apn
+                    return KAL_FALSE;
+                }else{
+                    return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+                }
+            }
+            if(sbp_id == 2 && rat == RAT_LTE) { //CU
+                if(last_internet_mode_is_enabled){//game mode always deact internet apn
+                    return KAL_FALSE;
+                }else{
+                    return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+                }
+            }
+            if (sbp_id == 121 && rat == RAT_LTE) {
+                if (internet_cid[ps_id] == cid)
+                    return KAL_TRUE;
+                else
+                    return KAL_FALSE;
+            }
+
+            if(is_wifi_en(ps_id) == KAL_TRUE && mobile_data_on == KAL_TRUE && rat == RAT_LTE) {
+                if(sbp_id == 12) {
+                    return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+                }
+            }
+#if 0
+/* under construction !*/
+/* under construction !*/
+#endif
+            if(data_switch_on == KAL_TRUE && rat == RAT_LTE) {
+                if(sbp_id == 18) {
+                    return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+                }
+				return KAL_FALSE;
+            }
+            else if(is_wifi_en(ps_id) == KAL_TRUE && mobile_data_on == KAL_TRUE && rat == RAT_LTE) {
+                DDM_CUST_LOG(MOD_DDM + ps_id, "WiFi Enable, mobile_data_on, consider to keep internet");
+                if(sbp_id == 17) {
+                    DDM_CUST_LOG(MOD_DDM + ps_id, "For Docomo no need to keep internet");
+                    return KAL_FALSE;
+                }
+                if(sbp_id == 12) {
+                    return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+                }
+                if(internet_cid[ps_id] == cid)
+                    return KAL_TRUE;
+                else
+                    return KAL_FALSE;
+            } else if(mobile_data_on == KAL_FALSE && rat == RAT_LTE) {
+                if(sbp_id == 17) {
+                    DDM_CUST_LOG(MOD_DDM + ps_id, "For Docomo no need to keep internet");
+                    return KAL_FALSE;
+                }
+                if(sbp_id == 12)
+                    return KAL_FALSE;
+                /*************************************************************************************************************
+                *
+                * Reference code for Keep Internet mechanism based on specific 'plmn' to send deactivate REQ to NW.
+                * Please focus on comparing the length of the 'plmn' string to compare.
+                * Example : Vodafone Italy plmn = 22210
+                * if((strncmp((char *)plmn, (char *)"22210", strlen((char *)"22210"))) == 0) {
+                *     return KAL_FALSE;
+                * }
+                **************************************************************************************************************/
+                return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+            } else {
+                return KAL_FALSE;
+            }
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+        }
+        case 8:
+            if((sbp_id == 8 || isTestSim(ps_id) == KAL_TRUE) && rat == RAT_LTE ) {
+                if (test_mode_consider_sim(ps_id) == PS_CONF_TEST_FTA)  {
+                    if(is_wifi_en(ps_id) == KAL_TRUE)
+                        return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+                    else
+                        return KAL_FALSE;
+                } else {
+                    return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+                }
+            } else
+                    return KAL_FALSE;
+            break; 
+        case 9:
+            return KAL_FALSE;
+        case 18: {//RJIO
+            DDM_CUST_LOG(MOD_DDM + ps_id, "RJIO specific is wifi enable : %d,  mobile data on =  %d, data_switch_on = %d, internet_cid[ps_id] = %d, cid = %d ", is_wifi_en(ps_id), mobile_data_on, data_switch_on, internet_cid[ps_id], cid);
+            if(sbp_id == 5 && rat == RAT_LTE) {
+                if(internet_cid[ps_id] == cid)
+                    return KAL_TRUE;
+            }
+            if(sbp_id == 8) {
+                return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+            }
+            if(sbp_id == 7 && rat == RAT_LTE) { //AT&T
+                return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+            }
+			if(sbp_id == 1 && rat == RAT_LTE) { //CMCC
+            	return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+            }
+            if (sbp_id == 121 && rat == RAT_LTE) {
+                if (internet_cid[ps_id] == cid)
+                    return KAL_TRUE;
+                else
+                    return KAL_FALSE;
+            }
+            if(sbp_id == 18 && rat == RAT_LTE && is_wifi_en(ps_id) == KAL_TRUE) { //RJIO
+                return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+            }
+            if(is_wifi_en(ps_id) == KAL_TRUE && mobile_data_on == KAL_TRUE && rat == RAT_LTE) {
+                if(sbp_id == 12) {
+                    return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+                }
+            }
+#if 0
+/* under construction !*/
+/* under construction !*/
+#endif
+            if(data_switch_on == KAL_TRUE && rat == RAT_LTE)
+				return KAL_FALSE;
+            else if(is_wifi_en(ps_id) == KAL_TRUE && mobile_data_on == KAL_TRUE && rat == RAT_LTE) {
+                DDM_CUST_LOG(MOD_DDM + ps_id, "WiFi Enable, mobile_data_on, consider to keep internet");
+                if(sbp_id == 12) {
+                    return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+                }
+                if(internet_cid[ps_id] == cid)
+                    return KAL_TRUE;
+                else
+                    return KAL_FALSE;
+            } else if(mobile_data_on == KAL_FALSE && rat == RAT_LTE) {
+                return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+            } else {
+                return KAL_FALSE;
+            }
+        }
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+        default:
+            DDM_CUST_LOG(MOD_DDM + ps_id, "is wifi enable : %d,  mobile data on =  %d , data_switch_on = %d", is_wifi_en(ps_id), mobile_data_on, data_switch_on);
+            if (data_switch_on == KAL_TRUE && rat == RAT_LTE) {
+                //if no specific default_sbp_id, no keep internet when doing data switch
+                return KAL_FALSE;
+            } else if(is_wifi_en(ps_id) == KAL_TRUE && mobile_data_on == KAL_TRUE) {
+                DDM_CUST_LOG(MOD_DDM + ps_id, "WiFi Enable, mobile_data_on, consider to keep internet");
+                if(sbp_id == 17) {
+                    DDM_CUST_LOG(MOD_DDM + ps_id, "For Docomo no need to keep internet");
+                    return KAL_FALSE;
+                }
+                if(internet_cid[ps_id] == cid)
+                    return KAL_TRUE;
+                else
+                    return KAL_FALSE;
+            } else {
+                if(mobile_data_on == KAL_FALSE && rat == RAT_LTE) {
+                    return (internet_cid[ps_id] == cid) ? KAL_TRUE : KAL_FALSE;
+                } else {
+                    return KAL_FALSE;
+                }
+            }
+    }
+#endif
+}
+
+kal_bool custom_d2_retry_with_no_suggest(kal_uint32 sbp_id, kal_uint8 ps_id, atcmd_request_type_enum request_type, kal_uint16 err_cause)
+{
+    kal_prompt_trace(MOD_DDM+ ps_id, "[MOD_DDM_DEBUG] sbp_id=%d, pdn request type : %d,  act data call failure =  %d", sbp_id, request_type, err_cause);
+    switch(sbp_id)
+    {
+        case 325:
+            if (request_type == ATCMD_REQUEST_TYPE_HANDOVER && err_cause == RMMI_ERR_MISSING_APN) // ALPS06253702
+            {
+                return KAL_TRUE;
+            }
+            break;
+            
+        default:
+            break;
+    }
+    
+    return KAL_FALSE;
+}
+
+pdp_type_enum custom_d2_determine_reactivate_data_call_type(kal_uint32 sbp_id, kal_bool is_roamming, kal_uint16 err_cause, pdp_addr_type_enum  pdp_addr_type, kal_uint32 apn_type, kal_uint32 fail_count)
+{
+    kal_uint32 default_sbp_id = sbp_query_id();
+    kal_prompt_trace(MOD_DDM, "determine_reactivate_data_call_type,is_roamming:%d, err_cause:%d, apn_type:%x", is_roamming, err_cause, apn_type);
+    kal_prompt_trace(MOD_DDM, "determine_reactivate_data_call_type, sbp_id:%d, default_sbp_id:%d", sbp_id, default_sbp_id);
+    if(sbp_id == 8 || default_sbp_id == 8){
+        if(is_roamming == KAL_FALSE && (apn_type & DDM_APN_TYPE_DEFAULT)) { // RMSC00314203
+            if(fail_count < 2) {
+                if(pdp_addr_type == IPV6_ADDR_TYPE && err_cause == ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED)
+                    return IS_IPV4_ADDR_TYPE;
+                else if(pdp_addr_type == IPV4_ADDR_TYPE && err_cause == ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED)
+                    return IS_IPV6_ADDR_TYPE;
+                else
+                    return NULL_ADDR_TYPE;
+            } else
+                return NULL_ADDR_TYPE;
+        } else if(apn_type & DDM_APN_TYPE_IMS) { // RMSC00763078
+            if(pdp_addr_type == IPV6_ADDR_TYPE && (err_cause == VGSM_PDU_SESSION_TYPE_IPV4_ONLY_ALLOWED || err_cause == PAM_5G_PDU_SESSION_ACCESS_REJECT_DUE_TO_CAUSE_50))
+                return IS_IPV4_ADDR_TYPE;
+            else
+                return NULL_ADDR_TYPE; 
+        }
+        if(is_roamming == KAL_TRUE && pdp_addr_type == IPV4V6_ADDR_TYPE && (apn_type & DDM_APN_TYPE_EMERGENCY)) { // RMSC01070747
+            if( err_cause == RMMI_ERR_ACTIVATION_REJ_UNSPECIFIED
+                        || err_cause == RMMI_ERR_SERV_OPTION_NOT_SUPPORTED
+                        || err_cause == RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED
+                        || err_cause == RMMI_ERR_SERV_OPTION_TEMP_OUT_OF_ORDER
+                        || err_cause == ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED
+                        || err_cause == ESM_PDN_TYPE_IPV4_ONLY_ALLOWED)
+            {
+                if(fail_count < 2)
+                    return IS_IPV4_ADDR_TYPE;
+                else
+                    return NULL_ADDR_TYPE;
+            } else {
+                return NULL_ADDR_TYPE;
+            }
+        } else {
+            return NULL_ADDR_TYPE;
+        }
+    } else if(sbp_id == 204 || default_sbp_id == 204) {
+        if(pdp_addr_type == IPV4V6_ADDR_TYPE || pdp_addr_type == IPV6_ADDR_TYPE) {
+            if(err_cause == RMMI_ERR_MISSING_APN || err_cause == RMMI_ERR_UNKNOWN_PDP_ADDR || err_cause == RMMI_ERR_ACTIVATION_REJ_UNSPECIFIED
+                        || err_cause == RMMI_ERR_SERV_OPTION_NOT_SUPPORTED || err_cause == RMMI_ERR_SERV_OPTION_TEMP_OUT_OF_ORDER || err_cause == ESM_NETWORK_FAILURE
+                        || err_cause == ESM_ESM_INFORMATION_NOT_RECEIVED || err_cause == ESM_SEMANTIC_INCORRECT_MSG || err_cause == ESM_INVALID_MANDATORY_IE ||
+                        err_cause == ESM_MSG_TYPE_NON_EXISTENT || err_cause == ESM_PROTOCOL_ERROR_UNSPECIFIED)    {
+                if(fail_count < 3)
+                    return IS_IPV4_ADDR_TYPE;
+                else
+                    return NULL_ADDR_TYPE;
+            } else {
+                return NULL_ADDR_TYPE;
+            }
+        } else {
+            return NULL_ADDR_TYPE; 
+        }
+    } else {
+        return NULL_ADDR_TYPE;    
+    }
+}
+
+kal_bool custom_d2_signalling_flag(
+            kal_uint8 ps_id,
+            kal_bool apn_type_is_ims,
+            kal_uint32 default_sbp_id,
+            kal_uint32 sbp_id,
+            char *apn,
+            kal_uint8 *plmn,
+            kal_bool is_roaming)
+{
+    DDM_CUST_LOG(MOD_D2CUST,
+        "ps_id=%d, "
+        "apn_type_is_ims=%d, "
+        "default_sbp_id=%d, "
+        "sbp_id=%d, "
+        "apn=%s, "
+        "plmn=%s, "
+        "is_roaming=%d",
+        ps_id,
+        apn_type_is_ims,
+        default_sbp_id,
+        sbp_id,
+        apn,
+        plmn,
+        is_roaming);
+    if((apn_type_is_ims == KAL_TRUE) || (default_sbp_id == 1) || (default_sbp_id == 0 && sbp_id == 1) || (default_sbp_id == 0 && sbp_id == 147)) {
+        if(default_sbp_id == 1 || (default_sbp_id == 0 && sbp_id == 1) || (default_sbp_id == 0 && sbp_id == 147)) // CMCC
+            return KAL_FALSE;
+        else
+            return KAL_TRUE;
+    } else {
+        if(default_sbp_id == 0 && sbp_id == 6 && (strcmp(apn, "") == 0))
+            return KAL_TRUE;
+
+        if((default_sbp_id == 0 || default_sbp_id == 17)&& sbp_id == 17 && (strcmp(apn, "") == 0))
+            return KAL_TRUE;
+
+        if(default_sbp_id == 0 && sbp_id == 3 && (strcmp(apn, "") == 0))
+            return KAL_TRUE;
+
+        if((default_sbp_id == 0 || default_sbp_id == 129)&& sbp_id == 129 && (strcmp(apn, "") == 0))
+            return KAL_TRUE;
+
+#ifdef __TC01__
+        // ALPS05180470 - Adding plmn, is_roaming in custom functions to enable/disable pcscf and IM signalling.
+        {
+            kal_uint8 *mcc450 =(kal_uint8 *) "450";
+
+            if(default_sbp_id == 0 &&
+                sbp_id == 116 &&
+                (strcmp(apn, "") == 0) &&
+                (is_roaming == KAL_TRUE) &&
+                (strncmp((char *)plmn, (char *)mcc450, strlen((char *)mcc450)) == 0))
+            {
+                return KAL_FALSE;
+            }
+        }
+#endif
+        return KAL_FALSE;
+    }
+
+}
+
+kal_bool custom_d2_pcscf_discovery_flag(
+            kal_uint8 ps_id,
+            kal_bool apn_type_is_ims,
+            kal_bool apn_type_is_rcs,
+            kal_uint32 default_sbp_id,
+            kal_uint32 sbp_id,
+            char *apn,
+            kal_uint8 *plmn,
+            kal_bool is_roaming)
+{
+    DDM_CUST_LOG(MOD_D2CUST,
+        "ps_id=%d, "
+        "apn_type_is_ims=%d, "
+        "apn_type_is_rcs=%d, "
+        "default_sbp_id=%d, "
+        "sbp_id=%d, "
+        "apn=%s, "
+        "plmn=%s, "
+        "is_roaming=%d",
+        ps_id,
+        apn_type_is_ims,
+        apn_type_is_rcs,
+        default_sbp_id,
+        sbp_id,
+        apn,
+        plmn,
+        is_roaming);
+
+    if(sbp_id == 114 || sbp_id == 115 || sbp_id == 116){
+        return KAL_TRUE;
+    }
+    if((apn_type_is_ims == KAL_TRUE) || (apn_type_is_rcs == KAL_TRUE) || (default_sbp_id == 1) || (default_sbp_id == 0 && sbp_id == 1)) {
+        return KAL_TRUE;
+    } else {
+        if(default_sbp_id == 0 && sbp_id == 6 && (strcmp(apn, "") == 0))
+            return KAL_TRUE;
+
+        if((default_sbp_id == 0 || default_sbp_id == 17)&& sbp_id == 17 && (strcmp(apn, "") == 0))
+            return KAL_TRUE;
+
+        if(default_sbp_id == 0 && sbp_id == 3 && (strcmp(apn, "") == 0))
+            return KAL_TRUE;
+
+        if((default_sbp_id == 0 || default_sbp_id == 129)&& sbp_id == 129 && (strcmp(apn, "") == 0))
+            return KAL_TRUE;
+
+#ifdef __TC01__
+        // ALPS05180470 - Adding plmn, is_roaming in custom functions to enable/disable pcscf and IM signalling.
+        {
+            kal_uint8 *mcc450 =(kal_uint8 *) "450";
+
+            if(default_sbp_id == 0 &&
+                sbp_id == 116 &&
+                (strcmp(apn, "") == 0) &&
+                (is_roaming == KAL_TRUE) &&
+                (strncmp((char *)plmn, (char *)mcc450, strlen((char *)mcc450)) == 0))
+            {
+                return KAL_FALSE;
+            }
+        }
+#endif
+        return KAL_FALSE;
+    }
+}
+kal_bool custom_d2_need_to_fallback(kal_uint32 sbp_id, kal_uint16 err_cause)
+{
+    switch(sbp_id) {
+        case 6: // Vodafone
+            {
+                if(err_cause == INVALID_CHARACTERS_IN_DIAL_ERRSTRING_ERR || err_cause == NO_NW_SERVICE)
+                    return KAL_FALSE;
+                break;
+            }
+        case 157: // Telus
+            {
+                if(RMMI_ERR_MISSING_APN == err_cause || RMMI_ERR_REQ_SERV_OPTION_NOT_SUBSCRIBED == err_cause)
+                    return KAL_FALSE;
+                break;
+            }
+        default:
+            return KAL_TRUE;
+            break;
+    }
+    return KAL_TRUE;
+}
+kal_bool custom_d2_need_to_get_pco_info(kal_uint32 sbp_id)
+{
+    switch(sbp_id) {
+        case 12:
+            return KAL_TRUE;
+        default:
+            return KAL_FALSE;
+    }
+    return KAL_FALSE;
+}
+kal_bool custom_d2_need_to_set_pco_info(kal_uint32 sbp_id)
+{
+    kal_uint32 default_sbp_id = sbp_query_id();
+    switch(sbp_id) {
+        case 12:
+            return KAL_TRUE;
+        default:
+            if(default_sbp_id == 12)
+                return KAL_TRUE;
+            return KAL_FALSE;
+    }
+    return KAL_FALSE;
+}
+kal_bool custom_d2_is_ia_need_fallback(kal_uint32 sbp_id, kal_uint8 ps_id)
+{
+    kal_uint32 default_sbp_id = sbp_query_id();
+    switch(default_sbp_id) {
+        case 145: // AT&T
+        case 196: // AT&T
+        case 7:
+            return isTestSim(ps_id) ? KAL_TRUE : KAL_FALSE;
+        default:
+            if(sbp_id == 19)
+                return KAL_TRUE;
+            if(isTestSim(ps_id))
+                return (sbp_id == 7) ? KAL_TRUE : KAL_FALSE;
+            else
+                return KAL_FALSE;
+    }
+}
+kal_bool custom_d2_need_to_deact_and_act_for_emergency(kal_uint32 sbp_id)
+{
+    kal_uint32 default_sbp_id = sbp_query_id();
+    switch(default_sbp_id) {
+        case 12:
+            return KAL_TRUE;
+        default:
+            return (sbp_id == 12) ? KAL_TRUE : KAL_FALSE;
+    }
+}
+kal_bool custom_d2_need_to_reactivate_data_call(kal_uint32 sbp_id, kal_uint16 err_cause, kal_uint32 fail_cnt)
+{
+    kal_uint32 default_sbp_id = sbp_query_id();
+    switch(default_sbp_id) {
+        case 12:
+            if((err_cause == PAM_VZW_PDN_ACCESS_REJECT_DISABLE_IN_APN_TABLE || err_cause == PAM_VZW_PDN_ACCESS_REJECT_STOP_ATTACH_FOR_CLASS1_AND_CLASS2_NOT_ENABLED) && fail_cnt < 20)
+                return KAL_TRUE;
+            else
+                return KAL_FALSE;
+        default:
+            if(sbp_id == 12 || default_sbp_id == 0) {
+                if((err_cause == PAM_VZW_PDN_ACCESS_REJECT_DISABLE_IN_APN_TABLE || err_cause == PAM_VZW_PDN_ACCESS_REJECT_STOP_ATTACH_FOR_CLASS1_AND_CLASS2_NOT_ENABLED) && fail_cnt < 20)
+                    return KAL_TRUE;
+                else
+                    return KAL_FALSE;
+            } else {
+                return KAL_FALSE;
+            }
+    }
+}
+kal_bool custom_d2_need_to_retry_with_timer(kal_uint32 ps_id, kal_uint32 sbp_id, kal_uint16 err_cause, kal_uint32 apn_type, kal_uint32 fail_cnt, kal_uint32 *time_duration)
+{
+    kal_bool ret_value = KAL_FALSE;
+    kal_uint32 default_sbp_id = sbp_query_id();
+
+    // Check for default SBP ID first.
+    switch(default_sbp_id)
+    {
+#ifdef __IPC_ADAPTER__
+        //For ALPS05046779 Titan's request for LGU+ requirement
+        case 116:
+        {
+            if(apn_type == DDM_APN_TYPE_EMERGENCY && fail_cnt < 5)
+            {
+                *time_duration = 2;
+                ret_value = KAL_TRUE;
+                break;
+            }
+        }
+#endif
+
+        case 129:
+        {
+            if (apn_type == DDM_APN_TYPE_EMERGENCY && fail_cnt < 5)
+            {
+                *time_duration = 1;
+                ret_value = KAL_TRUE;
+                break;
+            }
+        }
+        default:
+        {
+            // Check SIM SBP ID now.
+            switch(sbp_id)
+            {
+#ifdef __IPC_ADAPTER__
+                //For ALPS05046779 Titan's request for LGU+ requirement
+                case 116:
+                {
+                    if(apn_type == DDM_APN_TYPE_EMERGENCY && fail_cnt < 5)
+                    {
+                        *time_duration = 2;
+                        ret_value = KAL_TRUE;
+                        break;
+                    }
+                }
+#endif
+
+                case 129:
+                {
+                    if (apn_type == DDM_APN_TYPE_EMERGENCY && fail_cnt < 5)
+                    {
+                        *time_duration = 1;
+                        ret_value = KAL_TRUE;
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
+    DDM_CUST_LOG(
+        MOD_D2CUST + ps_id,
+        "sbp id = %d, is_retry = %d, err_cause = %d, apn_type = %d, fail_cnt = %d, time_duration = %d.",
+        sbp_id,
+        ret_value,
+        err_cause,
+        apn_type,
+        fail_cnt,
+        *time_duration);
+
+    return ret_value;
+}
+kal_bool custom_d2_need_to_set_rqos_ind(kal_uint32 sbp_id, ddm_apn_type_enum apn_type, kal_uint8 ps_id)
+{
+    kal_uint32 default_sbp_id = sbp_query_id();
+    if(KAL_FALSE == sbp_query_md_feature_by_ps(SBP_REFLECTIVE_QOS_SUPPORT, ps_id))
+        return KAL_FALSE;
+    else {
+        switch(default_sbp_id) {
+            case 8:
+                return KAL_TRUE;
+            default:
+                if(sbp_id == 8)
+                    return KAL_TRUE;
+                else
+                    return KAL_FALSE;
+        }
+    }
+    return KAL_FALSE;
+}
+kal_bool custom_d2_ipv4_mtu_discovery_not_influence(kal_uint32 sbp_id)
+{
+    kal_uint32 default_sbp_id = sbp_query_id();
+    switch(default_sbp_id) {
+        case 20:
+        case 50:
+            return KAL_TRUE;
+        default:
+            if(sbp_id == 20 || sbp_id == 50)
+                return KAL_TRUE;
+            else
+                return KAL_FALSE;
+    }
+}
+kal_bool custom_d2_need_to_set_always_on(kal_uint32 sbp_id, ddm_apn_type_enum apn_type)
+{
+    kal_uint32 default_sbp_id = sbp_query_id();
+    switch(default_sbp_id) {
+        case 8:
+            if((apn_type & DDM_APN_TYPE_IMS) || (apn_type & DDM_APN_TYPE_EMERGENCY))
+                return KAL_TRUE;
+            else
+                return KAL_FALSE;
+        case 11: // 3UK
+            return KAL_TRUE;
+        case 114: // KT
+        case 145: // AT&T
+        case 196: // AT&T
+        case 7: // AT&T
+            if((apn_type & DDM_APN_TYPE_IMS) || (apn_type & DDM_APN_TYPE_DEFAULT))
+                return KAL_TRUE;
+            else
+                return KAL_FALSE;
+        default:
+            if(sbp_id == 8) {
+                if((apn_type & DDM_APN_TYPE_IMS) || (apn_type & DDM_APN_TYPE_EMERGENCY))
+                    return KAL_TRUE;
+                else
+                    return KAL_FALSE;
+            } else if(sbp_id == 11) {
+                return KAL_TRUE;
+            } else if(sbp_id == 114 || sbp_id == 7 || sbp_id == 145 || sbp_id == 196) {
+                if((apn_type & DDM_APN_TYPE_IMS) || (apn_type & DDM_APN_TYPE_DEFAULT))
+                    return KAL_TRUE;
+                else
+                    return KAL_FALSE;
+            }
+            else {
+                return KAL_FALSE;
+            }
+    }
+}
+static kal_bool custom_check_uid_filter(kal_uint32 ps_id, kal_uint32 cid) {
+    d2cm_get_pdn_profile_ind_struct pdn_profile;
+    kal_uint32 i;
+
+    // d2cm_get_pdn_profile()
+    // Used2cm_search_pdn_profile_by_cid, and search if the p_cid_usr_list[] contains MOD_D2AT ~ MOD_D2AT_4.
+
+    if(d2cm_search_pdn_profile_by_cid(ps_id, MOD_DDM, cid, &pdn_profile) == D2CM_API_RES_FAIL)
+    {
+        DDM_CUST_LOG(MOD_DDM + ps_id, "custom_check_uid_filter(): d2cm_search_pdn_profile_by_cid() error!\n");
+        return KAL_FALSE;
+    }
+
+    if (pdn_profile.num_of_p_cid_usr <= 0) {
+        DDM_CUST_LOG(MOD_DDM + ps_id, "custom_check_uid_filter(): No user!\n");
+        return KAL_FALSE;
+    }
+
+    for (i = 0; i < pdn_profile.num_of_p_cid_usr; i++) {
+        module_type usr_id = pdn_profile.p_cid_usr_list[i];
+
+        if (usr_id == MOD_IMSM) {
+            break;
+        }
+
+#ifdef __GEMINI__
+        if (usr_id == MOD_IMSM_2) {
+            break;
+        }
+#if (GEMINI_PLUS >= 3)
+        if (usr_id == MOD_IMSM_3) {
+            break;
+        }
+#if (GEMINI_PLUS >= 4)
+        if (usr_id == MOD_IMSM_4) {
+            break;
+        }
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+    }
+
+    if (i >= pdn_profile.num_of_p_cid_usr) {
+        DDM_CUST_LOG(MOD_DDM + ps_id, "custom_check_uid_filter(): IMSM not user!\n");
+        return KAL_FALSE;
+    }
+    return KAL_TRUE;
+}
+
+static void d2cm_netif_send_imsm_intermediate_cnf(kal_uint32 ps_id, const d2cm_act_data_call_cnf_struct *act_data_call_cnf_ptr, void* arg){
+
+    // ---- DEBUG ----
+    //DDM_CUST_LOG(MOD_D2CM + ps_id, "d2cm_netif_send_imsm_intermediate_cnf(INPUT): ps_id = %d!!\n", ps_id);
+    // ++++ DEBUG ++++
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || act_data_call_cnf_ptr == NULL)
+    {
+        //DDM_CUST_LOG(MOD_D2CM + ps_id, "d2cm_netif_send_imsm_intermediate_cnf(): Invalid argument!!\n");
+        goto D2CM_NETIF_SEND_IMSM_INTERMEDIATE_CNF_ERR_1;
+    }
+
+    // ---- DEBUG ----
+    //DDM_CUST_LOG(MOD_D2CM + ps_id, "d2cm_netif_send_imsm_intermediate_cnf(): res = %d, cid = %d!!\n", act_data_call_cnf_ptr->res, act_data_call_cnf_ptr->cid);
+    // ++++ DEBUG ++++
+
+    // initializing the variables
+    // N/A
+    // checking the res
+    if(custom_check_uid_filter(ps_id, act_data_call_cnf_ptr->cid) == KAL_TRUE)
+    {
+		if(act_data_call_cnf_ptr->res == D2CM_RES_SUCC || act_data_call_cnf_ptr->res == D2CM_RES_SUCC_ABORT || act_data_call_cnf_ptr->res == D2CM_RES_SUCC_CONT)
+		{
+			d2cm_netif_send_imsm_intermediate_cnf_struct *intermediate_cnf_ptr = NULL;
+
+			// allocating the event_ind_ptr
+			if((intermediate_cnf_ptr = (d2cm_netif_send_imsm_intermediate_cnf_struct*)construct_local_para(sizeof(d2cm_netif_send_imsm_intermediate_cnf_struct), TD_RESET)) == NULL)
+			{
+				//DDM_CUST_LOG(MOD_D2CM + ps_id, "d2cm_netif_send_imsm_intermediate_cnf(): mdfx_event_alloc() error!!\n");
+				goto D2CM_NETIF_SEND_IMSM_INTERMEDIATE_CNF_ERR_1;
+			}
+			//intermediate_cnf_ptr = act_data_call_cnf_ptr;
+
+			intermediate_cnf_ptr->src_id = act_data_call_cnf_ptr->src_id;
+			intermediate_cnf_ptr->cid = act_data_call_cnf_ptr->cid;
+			intermediate_cnf_ptr->p_cid = act_data_call_cnf_ptr->p_cid;
+			intermediate_cnf_ptr->fb_cid = act_data_call_cnf_ptr->fb_cid;
+			memcpy((void*)(&(intermediate_cnf_ptr->ip_info)), (const void*)(&(act_data_call_cnf_ptr->ip_info)), sizeof(act_data_call_cnf_ptr->ip_info));
+			memcpy((void*)(&(intermediate_cnf_ptr->net_info)), (const void*)(&(act_data_call_cnf_ptr->net_info)), sizeof(act_data_call_cnf_ptr->net_info));
+			intermediate_cnf_ptr->if_info.if_type = act_data_call_cnf_ptr->if_info.if_type;
+			intermediate_cnf_ptr->if_info.if_id = act_data_call_cnf_ptr->if_info.if_id;
+			memcpy((void*)(&(intermediate_cnf_ptr->prv.imsm.ims_info)), (const void*)(&(act_data_call_cnf_ptr->prv.imsm.ims_info)), sizeof(act_data_call_cnf_ptr->prv.imsm.ims_info));
+			memset((void*)(&(intermediate_cnf_ptr->retry_info)), 0, sizeof(act_data_call_cnf_ptr->retry_info));
+			intermediate_cnf_ptr->ran_info.iwlan_ran = act_data_call_cnf_ptr->ran_info.iwlan_ran;
+			DDM_CUST_LOG(MOD_D2CM + ps_id, "intermediate_cnf_ptr->cid %d", intermediate_cnf_ptr->cid);
+			DDM_CUST_LOG(MOD_D2CM + ps_id, "intermediate_cnf_ptr->prv.imsm.rat_type %d", intermediate_cnf_ptr->ran_info.iwlan_ran);
+			DDM_CUST_LOG(MOD_D2CM + ps_id, ".d2cm_act_data_call_cnf_struct.ip_info.PDPv4_addr_present %d", intermediate_cnf_ptr->ip_info.PDPv4_addr_present);
+			DDM_CUST_LOG(MOD_D2CM + ps_id, ".d2cm_act_data_call_cnf_struct.ip_info.PDPv6_addr_present %d", intermediate_cnf_ptr->ip_info.PDPv6_addr_present);
+
+			//memcpy((d2cm_act_data_call_cnf_struct*)intermediate_cnf_ptr, act_data_call_cnf_ptr, sizeof(d2cm_act_data_call_cnf_struct));
+
+			// sending the event_ptr
+			msg_send6(MOD_D2CM + ps_id, MOD_IMSM + ps_id, IMSM_D2CM_SAP, MSG_ID_D2CM_NETIF_SEND_IMSM_INTERMEDIATE_CNF, (local_para_struct*)intermediate_cnf_ptr, NULL);
+
+		}
+
+		// ---- DEBUG ----
+		//DDM_CUST_LOG(MOD_D2CM + ps_id, "d2cm_netif_send_imsm_intermediate_cnf(OUTPUT): ps_id = %d!!\n", ps_id);
+		// ++++ DEBUG ++++
+		return;
+
+		// withdrawing what this function did
+		D2CM_NETIF_SEND_IMSM_INTERMEDIATE_CNF_ERR_1:
+			return;
+
+    }
+}
+void custom_ddm_register_reset_retry_timer_on_apn_config_change_func(ddm_reset_retry_timer_on_apn_config_change_func_ptr func)
+{
+    ddm_reset_retry_timer_on_apn_config_change_callback = func;
+}
+void custom_ddm_register_ddm_deact_dangling_cid(ddm_deact_dangling_cid_ptr func)
+{
+    ddm_deact_dangling_cid_func_ptr = func;
+}
+void custom_ddm_deact_dangling_cid(unsigned int ps_id, kal_uint32 cid, ddm_deact_event_enum reason)
+{
+    ddm_deact_dangling_cid_func_ptr(ps_id, cid, reason);
+}
+
+static kal_bool d2rm_is_apn_idx_reusable_cond (unsigned int ps_id, const char *apn, const d2cm_get_pdn_profile_ind_struct *dst_pdn_profile_ptr, const d2cm_get_pdn_profile_ind_struct *src_pdn_profile_ptr)
+{
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || apn == NULL || dst_pdn_profile_ptr == NULL || src_pdn_profile_ptr == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2rm_is_apn_idx_reusable_cond(): Invalid argument!!\n");
+        goto D2RM_IS_APN_IDX_REUSABLE_COND_ERR_1;
+    }
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+    // if src.egg_apn_type == "unknown", let it reuse (it may be IA PDN)
+    // ALPS04802349 (xcap)
+    // ALPS04817537 (ims)
+    if (strncasecmp((const char*)(src_pdn_profile_ptr->engaged_apn_type), "unknown", sizeof(src_pdn_profile_ptr->engaged_apn_type)) == 0) {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2rm_is_apn_idx_reusable_cond(): pass: src.egg_apn_type=unknown");
+        return KAL_TRUE;
+    }
+
+    // Both p_cid and fb_cid has no users, it's a dangling PDN, let it reuse
+    if ((src_pdn_profile_ptr->num_of_p_cid_usr == 0) && (src_pdn_profile_ptr->num_of_fb_cid_usr == 0)) {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2rm_is_apn_idx_reusable_cond(): pass: dangling");
+        return KAL_TRUE;
+    }
+
+    // May have longest prefix matching issue
+    if (strcasestr((const char*)(&(dst_pdn_profile_ptr->apn_type)), (const char*)(src_pdn_profile_ptr->engaged_apn_type)) == NULL) {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "d2rm_is_apn_idx_reusable_cond(): fail: src.egg_apn_type=[%s] dst.apn_type=[%s]!!\n", src_pdn_profile_ptr->engaged_apn_type, dst_pdn_profile_ptr->apn_type);
+        goto D2RM_IS_APN_IDX_REUSABLE_COND_ERR_1;
+    }
+
+    return KAL_TRUE;
+
+    // withdrawing what this function did
+D2RM_IS_APN_IDX_REUSABLE_COND_ERR_1:
+    return KAL_FALSE;
+}
+
+
+kal_bool custom_d2_report_ewopdnerr_config (
+        kal_uint8 ps_id,
+        atcmd_request_type_enum req_type,
+        kal_uint32 pdn_type,
+        kal_uint32 errcause,
+        kal_uint32 ike_errcause,
+        kal_bool retrytime_present, kal_uint32 retrytime)
+{
+    if (sbp_get_sim_sbp_id(ps_id) == 8 && pdn_type == IWLAN_PDN_APN_TYPE_IMS) {
+        // TMO-US: GID-MTRREQ-5025
+        return KAL_TRUE;
+    }
+
+    if (sbp_get_sim_sbp_id(ps_id) == 204) { // Rogers
+        if (pdn_type == 2 /* IMS */ &&
+                ike_errcause == 24 /* AUTHENTICATION_FAILED */) {
+            if (retrytime_present == KAL_TRUE && retrytime == RETRYTIME_NO_RETRY) {
+                return KAL_TRUE;
+            } else {
+                return KAL_FALSE;
+            }
+        }
+
+        return KAL_TRUE;
+    }
+
+    if (ike_errcause != 0) {
+        if (req_type == ATCMD_REQUEST_TYPE_INITIAL || req_type == ATCMD_REQUEST_TYPE_EMERGENCY) {
+            return KAL_TRUE;
+        }
+
+        return custom_d2_report_ewopdnerr_l2who_fail();
+    }
+
+    return KAL_FALSE;
+}
+
+kal_bool custom_d2_report_ewopdnerr_l2who_fail ()
+{
+    /* This API is deprecated but won't be deleted to prevent unexpected build failures.
+     * Suggested to move customization to custom_d2_report_ewopdnerr_config() */
+    return KAL_FALSE;
+}
+
+kal_uint32 custom_d2_w2lho_disconn_src_duration (kal_uint8 ps_id)
+{
+    /* This function is for customizing the duration of UE sending PDN
+     * deactivation request after handover from IWLAN to Celluar NW.
+     * By default, the value is 3000 ms.
+     * It's just a default value, as there is no operator requirement for it.
+     *
+     * For AT&T testcase, the value is changed to 1500, for passing the test. */
+
+    /* For AT&T testcase LTE-BTR-5-7224, machine allows UE deact PDN in 2 seconds */
+    if (sbp_query_id() == SBP_ID_ATT && isTestSim(ps_id)) {
+        return 1500;
+    }
+
+    return 3000;
+}
+
+kal_uint32 custom_d2_l2who_disconn_src_duration (kal_uint8 ps_id)
+{
+    /* This function is for customizing the duration of UE sending PDN
+     * deactivation request after handover from Celluar NW to IWLAN.
+     * By default, the value is 3000 ms.
+     * It's just a default value, as there is no operator requirement for it.
+     *
+     * For AT&T testcase, the value is changed to 1500, for passing the test. */
+
+    return custom_d2_w2lho_disconn_src_duration(ps_id);
+}
+
+kal_uint32 custom_d2rm_epdg_ims_initial_setup_time_limit (kal_uint8 ps_id) {
+    //kal_uint32 default_sbp_id = sbp_query_id();
+    //kal_uint32 sim_sbp_id = sbp_get_sim_sbp_id(ps_id);
+    return 0;
+}
+
+#define QOS_DATA_STRING_TOKENS_MAX      3
+#define QOS_DATA_STRING_TOKEN_LEN       6
+/** custom_ddm_check_nw_limit_QoS *****
+ * ps_id                    SIM ID
+ * cid                      CID, to check PDN type
+ * param(last_plmn)         Last PLMN
+ * param(qos_info)          MBR/AMBR info
+ * param(qos_data_string)   NVRAM stored MBR/AMBR info
+ * rat                      RAT - LTE(4G) or NR(5G)
+ *
+ * RETURN Value
+ *  kal_uint32          value          Sends URC <+ENWLIMIT:value> to AP
+ *      -1              Do not send URC
+ *      0               <+ENWLIMIT:0>  NW did not limit QoS
+ *      1               <+ENWLIMIT:1>  NW limits the QoS
+ */
+kal_int32 custom_ddm_check_nw_limit_QoS(
+    kal_uint8 ps_id,
+    char* apn_name,
+    const char* last_plmn,
+    const QosInfo_t *qos_info,
+    const char* qos_data_string,
+    rat_enum rat)
+{
+    // Customization
+
+    ////////////////////////////////////////////////////////////
+    // Split the qos_data_string.
+    // Example : split "3968,3968,460xx" to uint32,uint32,string
+    char *saveptr;
+    char *token[QOS_DATA_STRING_TOKENS_MAX];
+    char *str;
+    char qos_data[256];
+    //unsigned int token1 = 0, token2 = 0;
+    char token3[QOS_DATA_STRING_TOKEN_LEN];
+
+    ////////////////////////////////////////////////////////////
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_ddm_check_nw_limit_QoS(): ps_id = %d, apn_name = [%s], last_plmn = [%s], rat = [%d]", ps_id, apn_name, last_plmn, rat);
+
+    ////////////////////////////////////////////////////////////
+    // Reference code to identify if need to send URC back to AP
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_ddm_check_nw_limit_QoS(): Invalid argument!!\n");
+        return -1;
+    }
+
+    //check if pdn is for internet
+    //for ALPS04881952
+    char apn_network_id[APN_STRING_LEN];
+    char apn_network_id2[APN_STRING_LEN];
+    int i, len;
+
+    hasOperatorId(apn_name, apn_network_id);
+
+    len = strlen(apn_network_id);
+    for (i = 0; i < len; i++) {
+        if (apn_network_id[i] >= 'A' && apn_network_id[i] <= 'Z') {
+            apn_network_id2[i] = apn_network_id[i] + ('a' - 'A');
+        } else {
+            apn_network_id2[i] = apn_network_id[i];
+       }
+    }
+    apn_network_id2[len] = '\0';
+
+    if(internet_apn_check(ps_id, apn_network_id2) == -1)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_ddm_check_nw_limit_QoS(): not internet apn!\n");
+        return -1;
+    }
+
+    // split the tokens
+    if(qos_data_string == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_ddm_check_nw_limit_QoS(): qos_data_string is NULL!!\n");
+        return -1;
+    }
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_ddm_check_nw_limit_QoS(): qos_data_string - %s.", qos_data_string);
+
+    memset((void*)(qos_data), 0, sizeof(qos_data));
+    strncpy((char*)qos_data, qos_data_string, sizeof(qos_data) - 1);
+
+    str = qos_data;
+    // Use these values as required.
+    for(i = 0; i < QOS_DATA_STRING_TOKENS_MAX; i++) {
+        token[i] = strtok_r(str, ",", &saveptr);
+        str = NULL;
+        if (token[i] == NULL) break;
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_ddm_check_nw_limit_QoS(): QoS data [%d] - %s.", i, token[i]);
+    }
+
+    if (i < QOS_DATA_STRING_TOKENS_MAX) {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_ddm_check_nw_limit_QoS(): ERROR : QoS data insufficient. Num of tokens = %d.", i);
+        return -1;
+    }
+
+    // Token # 1. Uint32
+    //token1 = strtoul(token[0], NULL, 10);
+    //DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_ddm_check_nw_limit_QoS(): token1 = %d", token1);
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_ddm_check_nw_limit_QoS(): token1 = %d", strtoul(token[0], NULL, 10));
+
+    // Token # 2. Uint32
+    //token2 = strtoul(token[1], NULL, 10);
+    //DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_ddm_check_nw_limit_QoS(): token2 = %d", token2);
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_ddm_check_nw_limit_QoS(): token2 = %d", strtoul(token[1], NULL, 10));
+
+    // Token # 3. String of size 5 characters
+    memset((void*)(token3), 0, sizeof(token3));
+    memcpy(token3, (const void*)(token[2]), sizeof(token3) - 1);
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_ddm_check_nw_limit_QoS(): token3 = %s", token3);
+
+    // Use the tokens, as you like.
+
+    // If NW limits QoS, return 1; otherwise 0. Please write customization logic.
+    // May need to check MBR/AMBR values if they are present in the struct.
+    return 1;
+}
+
+
+/****************************************************/
+/* ---- Custom D2CM Utility Registration Start ---- */
+/****************************************************/
+void custom_d2cm_event_cb (kal_uint32 ps_id, d2cm_event_ind_struct *ind_ptr, void *arg)
+{
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || ind_ptr == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_event_cb(): Invalid argument!!\n");
+        goto CUSTOM_D2CM_EVENT_CB_ERR_1;
+    }
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_event_cb(): event = %d, apn_present = %d, cid_present = %d!!\n", ind_ptr->event, ind_ptr->info.apn_present, ind_ptr->info.cid_present);
+    if(ind_ptr->info.apn_present == KAL_TRUE)
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_event_cb(): apn = \"%s\", apn_idx = %d!!\n", ind_ptr->info.apn, ind_ptr->info.apn_idx);
+    if(ind_ptr->info.cid_present == KAL_TRUE)
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_event_cb(): cid = %d!!\n", ind_ptr->info.cid);
+// ++++ DEBUG ++++
+
+    switch(ind_ptr->event)
+    {
+        case D2CM_EVENT_PDN_PROFILE_CHG:
+        {
+            d2cm_get_pdn_profile_req_struct req;
+            kal_bool is_vzw;
+
+/*****************/
+/* ==== VzW ==== */
+/*****************/
+            // checking it is VzW or not, NEED_TO_BE_NOTICED, to be replaced by sbp_get_sim_sbp_id()
+            memset((void*)(&req), 0, sizeof(req));
+            req.flag |= D2CM_GET_PDN_PROFILE_REQ_FLAG_INCL_APN_IDX;
+            is_vzw = KAL_FALSE;
+            if(d2cm_get_pdn_profile(ps_id, D2CM_CUSTOM_MOD_ID_OP, &req, vzw_d2cm_is_vzw_hdl, (void*)(&is_vzw)) == D2CM_API_RES_FAIL)
+            {
+                DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_event_cb(): d2cm_get_pdn_profile() error!!\n");
+                goto CUSTOM_D2CM_EVENT_CB_ERR_1;
+            }
+
+            if(is_vzw == KAL_TRUE)
+            {
+                // getting the PDN profiles
+                req.mcc_mnc = 310012;
+                req.op.vzw.apncl = 3;
+                if(d2cm_get_pdn_profile(ps_id, D2CM_CUSTOM_MOD_ID_OP, &req, vzw_d2cm_pdn_profile_chg_hdl, arg) == D2CM_API_RES_FAIL)
+                {
+                    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_event_cb(): d2cm_get_pdn_profile() error!!\n");
+                    goto CUSTOM_D2CM_EVENT_CB_ERR_1;
+                }
+            }
+
+/*****************/
+/* ==== DDM ==== */
+/*****************/
+            // getting the PDN profiles
+            memset((void*)(&req), 0, sizeof(req));
+            if(d2cm_get_pdn_profile(ps_id, D2CM_CUSTOM_MOD_ID_OP, &req, ddm_pdn_profile_chg_hdl, arg) == D2CM_API_RES_FAIL)
+            {
+                DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_event_cb(): d2cm_get_pdn_profile() error!!\n");
+                goto CUSTOM_D2CM_EVENT_CB_ERR_1;
+            }
+            break;
+        }
+        case D2CM_EVENT_IPV6_RA_INIT_FAIL:
+        case D2CM_EVENT_IPV6_RA_REFRESH_FAIL:
+        {
+            d2cm_get_pdn_profile_req_struct req;
+            kal_bool is_vzw;
+            struct
+            {
+                void *arg;
+                atcmd_deact_cause_enum deact_cause;
+            }hdl_arg;
+
+/*****************/
+/* ==== VzW ==== */
+/*****************/
+            // checking it is VzW or not, NEED_TO_BE_NOTICED, to be replaced by sbp_get_sim_sbp_id()
+            memset((void*)(&req), 0, sizeof(req));
+            is_vzw = KAL_FALSE;
+            if(d2cm_get_pdn_profile(ps_id, D2CM_CUSTOM_MOD_ID_OP, &req, vzw_d2cm_is_vzw_hdl, (void*)(&is_vzw)) == D2CM_API_RES_FAIL)
+            {
+                DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_event_cb(): d2cm_get_pdn_profile() error!!\n");
+                goto CUSTOM_D2CM_EVENT_CB_ERR_1;
+            }
+
+            if(is_vzw == KAL_TRUE)
+            {
+                // checking the inputs
+                if(ind_ptr->info.apn_present == KAL_FALSE && ind_ptr->info.cid_present == KAL_FALSE)
+                {
+                    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_event_cb(): Invalid request code %d, %d!!\n", ind_ptr->info.apn_present, ind_ptr->info.cid_present);
+                    goto CUSTOM_D2CM_EVENT_CB_ERR_1;
+                }
+
+                // getting the PDN profiles
+                if((req.apn_present = ind_ptr->info.apn_present) == KAL_TRUE)
+                {
+                    strncpy((char*)(&req.apn), (const char*)(ind_ptr->info.apn), sizeof(req.apn) - 1);
+                    req.apn[sizeof(req.apn) - 1] = '\0';
+                }
+                if((req.cid_present = ind_ptr->info.cid_present) == KAL_TRUE)
+                    req.cid = ind_ptr->info.cid;
+                req.mcc_mnc = 310012;
+                req.op.vzw.apncl = 1;
+                hdl_arg.arg = arg;
+                hdl_arg.deact_cause = ind_ptr->event == D2CM_EVENT_IPV6_RA_REFRESH_FAIL ? ATCMD_DEACT_CAUSE_EGACT_CAUSE_DEACT_RA_REFRESH_ERROR : ATCMD_DEACT_CAUSE_EGACT_CAUSE_DEACT_RA_INITIAL_ERROR;
+                if(d2cm_get_pdn_profile(ps_id, D2CM_CUSTOM_MOD_ID_OP, &req, vzw_d2cm_ipv6_no_ra_hdl, (void*)(&hdl_arg)) == D2CM_API_RES_FAIL)
+                {
+                    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_event_cb(): d2cm_get_pdn_profile() error!!\n");
+                    goto CUSTOM_D2CM_EVENT_CB_ERR_1;
+                }
+            }
+            break;
+        }
+        default:
+        {
+
+// ---- DEBUG ----
+            DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_event_cb(): event %d has no action!!\n", ind_ptr->event);
+// ++++ DEBUG ++++
+
+            // N/A
+            break;
+        }
+    }
+
+    return;
+
+    // withdrawing what this function did
+CUSTOM_D2CM_EVENT_CB_ERR_1:
+    return;
+}
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+void custom_d2cm_post_act_data_call_cb (kal_uint32 ps_id, d2cm_act_data_call_cnf_struct *cnf_ptr, void *arg)
+{
+    d2cm_get_pdn_profile_req_struct req;
+    kal_bool is_vzw;
+    struct
+    {
+        d2cm_act_data_call_cnf_struct *act_data_call_cnf_ptr;
+        void *arg;
+    }hdl_arg;
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_post_act_data_call_cb(INPUT): ps_id = %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || cnf_ptr == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_post_act_data_call_cb(): Invalid argument!!\n");
+        goto CUSTOM_D2CM_POST_ACT_DATA_CALL_CB_ERR_1;
+    }
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_post_act_data_call_cb(VzW): res = %d, cid = %d!!\n", cnf_ptr->res, cnf_ptr->cid);
+// ++++ DEBUG ++++
+
+/*****************/
+/* ==== VzW ==== */
+/*****************/
+    // checking it is VzW or not, NEED_TO_BE_NOTICED, to be replaced by sbp_get_sim_sbp_id()
+    memset((void*)(&req), 0, sizeof(req));
+    req.flag |= D2CM_GET_PDN_PROFILE_REQ_FLAG_INCL_APN_IDX;
+    is_vzw = KAL_FALSE;
+    if(d2cm_get_pdn_profile(ps_id, D2CM_CUSTOM_MOD_ID_OP, &req, vzw_d2cm_is_vzw_hdl, (void*)(&is_vzw)) == D2CM_API_RES_FAIL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_post_act_data_call_cb(): d2cm_get_pdn_profile() error!!\n");
+        goto CUSTOM_D2CM_POST_ACT_DATA_CALL_CB_ERR_1;
+    }
+
+    if(is_vzw == KAL_TRUE)
+    {
+        if((cnf_ptr->res == D2CM_RES_SUCC || cnf_ptr->res == D2CM_RES_SUCC_ABORT || cnf_ptr->res == D2CM_RES_SUCC_CONT) && cnf_ptr->net_info.pcscfv4_num == 0 && cnf_ptr->net_info.pcscfv6_num == 0)
+        {
+            // getting the PDN profiles
+            req.mcc_mnc = 310012;
+            req.op.vzw.apncl = 1;
+            hdl_arg.act_data_call_cnf_ptr = cnf_ptr;
+            hdl_arg.arg = arg;
+            if(d2cm_get_pdn_profile(ps_id, D2CM_CUSTOM_MOD_ID_OP, &req, vzw_d2cm_post_act_data_call_hdl, (void*)(&hdl_arg)) == D2CM_API_RES_FAIL)
+            {
+                DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_post_act_data_call_cb(): d2cm_get_pdn_profile() error!!\n");
+                goto CUSTOM_D2CM_POST_ACT_DATA_CALL_CB_ERR_1;
+            }
+        }
+    }
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_post_act_data_call_cb(DDM): res = %d, cid = %d!!\n", cnf_ptr->res, cnf_ptr->cid);
+// ++++ DEBUG ++++
+
+/*****************/
+/* ==== DDM ==== */
+/*****************/
+    ddm_post_act_data_call_internet_check(ps_id, (const d2cm_act_data_call_cnf_struct*)cnf_ptr, arg);
+
+/**********************/
+/* ==== For IMSM ==== */
+/**********************/
+    d2cm_netif_send_imsm_intermediate_cnf(ps_id, (const d2cm_act_data_call_cnf_struct*)cnf_ptr, arg);
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_post_act_data_call_cb(OUTPUT): ps_id = %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+    return;
+
+    // withdrawing what this function did
+CUSTOM_D2CM_POST_ACT_DATA_CALL_CB_ERR_1:
+    return;
+}
+
+void sim_d2cm_post_act_data_call_cb (kal_uint32 ps_id, d2cm_act_data_call_cnf_struct *cnf_ptr, void *arg)
+{
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "sim_d2cm_post_act_data_call_cb(INPUT): ps_id = %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || cnf_ptr == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "sim_d2cm_post_act_data_call_cb(): Invalid argument!!\n");
+        goto SIM_D2CM_POST_ACT_DATA_CALL_CB_ERR_1;
+    }
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "sim_d2cm_post_act_data_call_cb(): res = %d, cid = %d!!\n", cnf_ptr->res, cnf_ptr->cid);
+// ++++ DEBUG ++++
+
+    // initializing the variables
+    // N/A
+
+     // checking the res
+    if(cnf_ptr->res == D2CM_RES_SUCC || cnf_ptr->res == D2CM_RES_SUCC_ABORT || cnf_ptr->res == D2CM_RES_SUCC_CONT)
+    {
+        d2cm_get_pdn_profile_ind_struct get_pdn_profile_ind;
+
+         // searching the cid
+        if(d2cm_search_pdn_profile_by_cid(ps_id, D2CM_CUSTOM_MOD_ID_OP, cnf_ptr->cid, &get_pdn_profile_ind) == D2CM_API_RES_FAIL)
+        {
+            DDM_CUST_LOG(MOD_D2CUST + ps_id, "sim_d2cm_post_act_data_call_cb(): d2cm_search_pdn_profile_by_cid() errpr!!\n");
+            goto SIM_D2CM_POST_ACT_DATA_CALL_CB_ERR_1;
+        }
+
+        if(cnf_ptr->cid == get_pdn_profile_ind.p_cid || cid_bitmap_get((void*)(get_pdn_profile_ind.p_ded_cid), sizeof(get_pdn_profile_ind.p_ded_cid), cnf_ptr->cid) == KAL_TRUE || \
+           cnf_ptr->cid == get_pdn_profile_ind.fb_cid || cid_bitmap_get((void*)(get_pdn_profile_ind.fb_ded_cid), sizeof(get_pdn_profile_ind.fb_ded_cid), cnf_ptr->cid) == KAL_TRUE)
+        {
+            d2cm_event_ind_struct *event_ind_ptr;
+
+// ---- DEBUG ----
+            DDM_CUST_LOG(MOD_D2CUST + ps_id, "sim_d2cm_post_act_data_call_cb(): (p_cid, fb_cid, p_ded_cid, fb_ded_cid) = (%d, %d, %x, %x) has APN \"%s\"!!\n", get_pdn_profile_ind.p_cid, get_pdn_profile_ind.fb_cid, get_pdn_profile_ind.p_ded_cid, get_pdn_profile_ind.fb_ded_cid, get_pdn_profile_ind.apn);
+// ++++ DEBUG ++++
+
+            // allocating the event_ind_ptr
+            if((event_ind_ptr = (d2cm_event_ind_struct*)construct_local_para(sizeof(d2cm_event_ind_struct), TD_RESET)) == NULL)
+            {
+                DDM_CUST_LOG(MOD_D2CUST + ps_id, "sim_d2cm_post_act_data_call_cb(): mdfx_event_alloc() error!!\n");
+                goto SIM_D2CM_POST_ACT_DATA_CALL_CB_ERR_1;
+            }
+
+            // setting the event_ind_ptr
+//            memset((void*)((uint8_t*)event_ind_ptr + offsetof(d2cm_event_ind_struct, event)), 0, sizeof(d2cm_event_ind_struct) - offsetof(d2cm_event_ind_struct, event));
+            event_ind_ptr->event = D2CM_EVENT_POST_ACT_DATA_CALL;
+            event_ind_ptr->info.cid_present = KAL_TRUE;
+            event_ind_ptr->info.cid = cnf_ptr->cid;
+            strncpy((char*)event_ind_ptr->info.apn, (const char*)(get_pdn_profile_ind.apn), sizeof(event_ind_ptr->info.apn) - 1);
+            event_ind_ptr->info.apn[sizeof(event_ind_ptr->info.apn) - 1] = '\0';
+            event_ind_ptr->info.apn_idx = get_pdn_profile_ind.apn_idx;
+            event_ind_ptr->info.apn_present = KAL_TRUE;
+
+            // sending the event_ptr
+            msg_send6(MOD_D2CM + ps_id, MOD_SIM + ps_id, ME_D2CM_SAP, MSG_ID_D2CM_EVENT_IND, (local_para_struct*)event_ind_ptr, NULL);
+        }
+    }
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "sim_d2cm_post_act_data_call_cb(OUTPUT): ps_id = %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+    return;
+
+
+    // withdrawing what this function did
+SIM_D2CM_POST_ACT_DATA_CALL_CB_ERR_1:
+     return;
+}
+
+#ifdef __L5_SUPPORT__
+void l5updn_d2cm_post_act_data_call_cb (kal_uint32 ps_id, d2cm_act_data_call_cnf_struct *cnf_ptr, void *arg)
+{
+// ---- DEBUG ----
+    kal_prompt_trace(MOD_D2CUST + ps_id, "l5updn_d2cm_post_act_data_call_cb(INPUT): ps_id = %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || cnf_ptr == NULL)
+    {
+        kal_prompt_trace(MOD_D2CUST + ps_id, "l5updn_d2cm_post_act_data_call_cb(): Invalid argument!!\n");
+        goto L5UPDN_D2CM_POST_ACT_DATA_CALL_CB_ERR_1;
+    }
+
+// ---- DEBUG ----
+    kal_prompt_trace(MOD_D2CUST + ps_id, "l5updn_d2cm_post_act_data_call_cb(): res = %d, cid = %d!!\n", cnf_ptr->res, cnf_ptr->cid);
+// ++++ DEBUG ++++
+
+    // initializing the variables
+    // N/A
+
+     // checking the res
+    if(cnf_ptr->res == D2CM_RES_SUCC || cnf_ptr->res == D2CM_RES_SUCC_ABORT || cnf_ptr->res == D2CM_RES_SUCC_CONT)
+    {
+        d2cm_get_pdn_profile_ind_struct get_pdn_profile_ind;
+
+         // searching the cid
+        if(d2cm_search_pdn_profile_by_cid(ps_id, D2CM_CUSTOM_MOD_ID_OP, cnf_ptr->cid, &get_pdn_profile_ind) == D2CM_API_RES_FAIL)
+        {
+            kal_prompt_trace(MOD_D2CUST + ps_id, "l5updn_d2cm_post_act_data_call_cb(): d2cm_search_pdn_profile_by_cid() errpr!!\n");
+            goto L5UPDN_D2CM_POST_ACT_DATA_CALL_CB_ERR_1;
+        }
+
+        if(cnf_ptr->cid == get_pdn_profile_ind.p_cid || cid_bitmap_get((void*)(get_pdn_profile_ind.p_ded_cid), sizeof(get_pdn_profile_ind.p_ded_cid), cnf_ptr->cid) == KAL_TRUE || \
+           cnf_ptr->cid == get_pdn_profile_ind.fb_cid || cid_bitmap_get((void*)(get_pdn_profile_ind.fb_ded_cid), sizeof(get_pdn_profile_ind.fb_ded_cid), cnf_ptr->cid) == KAL_TRUE)
+        {
+            d2cm_event_ind_struct *event_ind_ptr;
+
+// ---- DEBUG ----
+            kal_prompt_trace(MOD_D2CUST + ps_id, "l5updn_d2cm_post_act_data_call_cb(): (p_cid, fb_cid, p_ded_cid, fb_ded_cid) = (%d, %d, %x, %x) has APN \"%s\"!!\n", get_pdn_profile_ind.p_cid, get_pdn_profile_ind.fb_cid, get_pdn_profile_ind.p_ded_cid, get_pdn_profile_ind.fb_ded_cid, get_pdn_profile_ind.apn);
+// ++++ DEBUG ++++
+
+            // allocating the event_ind_ptr
+            if((event_ind_ptr = (d2cm_event_ind_struct*)construct_local_para(sizeof(d2cm_event_ind_struct), TD_RESET)) == NULL)
+            {
+                kal_prompt_trace(MOD_D2CUST + ps_id, "l5updn_d2cm_post_act_data_call_cb(): mdfx_event_alloc() error!!\n");
+                goto L5UPDN_D2CM_POST_ACT_DATA_CALL_CB_ERR_1;
+            }
+
+            // setting the event_ind_ptr
+//            memset((void*)((uint8_t*)event_ind_ptr + offsetof(d2cm_event_ind_struct, event)), 0, sizeof(d2cm_event_ind_struct) - offsetof(d2cm_event_ind_struct, event));
+            event_ind_ptr->event = D2CM_EVENT_POST_ACT_DATA_CALL;
+            event_ind_ptr->info.cid_present = KAL_TRUE;
+            event_ind_ptr->info.cid = cnf_ptr->cid;
+            strncpy((char*)event_ind_ptr->info.apn, (const char*)(get_pdn_profile_ind.apn), sizeof(event_ind_ptr->info.apn) - 1);
+            event_ind_ptr->info.apn[sizeof(event_ind_ptr->info.apn) - 1] = '\0';
+            event_ind_ptr->info.apn_idx = get_pdn_profile_ind.apn_idx;
+            event_ind_ptr->info.apn_present = KAL_TRUE;
+
+            // sending the event_ptr
+            msg_send6(MOD_D2CM + ps_id, MOD_L5UPDN + ps_id, ME_D2CM_SAP, MSG_ID_D2CM_EVENT_IND, (local_para_struct*)event_ind_ptr, NULL);
+        }
+    }
+
+// ---- DEBUG ----
+    kal_prompt_trace(MOD_D2CUST + ps_id, "l5updn_d2cm_post_act_data_call_cb(OUTPUT): ps_id = %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+    return;
+
+    // withdrawing what this function did
+L5UPDN_D2CM_POST_ACT_DATA_CALL_CB_ERR_1:
+     return;
+}
+#endif
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+void custom_d2cm_post_deact_data_call_cb (kal_uint32 ps_id, d2cm_deact_data_call_cnf_struct *cnf_ptr, void *arg)
+{
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_post_deact_data_call_cb(INPUT): ps_id = %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+    //checking the inputs
+    if(ps_id >= MAX_SIM_NUM || cnf_ptr == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_post_deact_data_call_cb(): Invalid argument!!\n");
+        goto CUSTOM_D2CM_POST_DEACT_DATA_CALL_CB_ERR_1;
+    }
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_post_deact_data_call_cb(DTAG): res = %d, cid = %d!!\n", cnf_ptr->res, cnf_ptr->cid);
+// ++++ DEBUG ++++
+
+/*****************/
+/* ==== DTAG ==== */
+/*****************/
+    DTAG_dual_apn(ps_id);
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_post_deact_data_call_cb(DDM): res = %d, cid = %d!!\n", cnf_ptr->res, cnf_ptr->cid);
+// ++++ DEBUG ++++
+
+/*****************/
+/* ==== DDM ==== */
+/*****************/
+    if(ddm_deact_cid_state[cnf_ptr->cid] == KAL_TRUE)
+    {
+        // resetting the ddm_deact_cid_state
+        ddm_deact_cid_state[cnf_ptr->cid] = KAL_FALSE;
+
+// ---- DEBUG ----
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_post_deact_data_call_cb(): CID %d completed deactivation or detach!!\n", cnf_ptr->cid);
+// ++++ DEBUG ++++
+
+    }
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "custom_d2cm_post_deact_data_call_cb(OUTPUT): ps_id = %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+    return;
+
+    // withdrawing what this function did
+CUSTOM_D2CM_POST_DEACT_DATA_CALL_CB_ERR_1:
+    return;
+}
+
+void sim_d2cm_post_deact_data_call_cb (kal_uint32 ps_id, d2cm_deact_data_call_cnf_struct *cnf_ptr, void *arg)
+{
+    d2cm_event_ind_struct *event_ind_ptr;
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "sim_d2cm_post_deact_data_call_cb(INPUT): ps_id = %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || cnf_ptr == NULL)
+    {
+        DDM_CUST_LOG(MOD_D2CUST + ps_id, "sim_d2cm_post_deact_data_call_cb(): Invalid argument!!\n");
+        goto SIM_D2CM_POST_DEACT_DATA_CALL_CB_ERR_1;
+    }
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "sim_d2cm_post_deact_data_call_cb(): res = %d, cid = %d!!\n", cnf_ptr->res, cnf_ptr->cid);
+// ++++ DEBUG ++++
+
+    // initializing the variables
+    event_ind_ptr = NULL;
+
+    // checking the res
+    if(d2cm_get_normal_res(cnf_ptr->res) == D2CM_RES_SUCC)
+    {
+        // allocating the event_ptr
+        if((event_ind_ptr = (d2cm_event_ind_struct*)construct_local_para(sizeof(d2cm_event_ind_struct), TD_RESET)) == NULL)
+        {
+            DDM_CUST_LOG(MOD_D2CUST + ps_id, "sim_d2cm_post_deact_data_call_cb(): mdfx_event_alloc() error!!\n");
+            goto SIM_D2CM_POST_DEACT_DATA_CALL_CB_ERR_1;
+        }
+
+        // setting the data
+//        memset((void*)((uint8_t*)event_ind_ptr + offsetof(d2cm_event_ind_struct, event)), 0, sizeof(d2cm_event_ind_struct) - offsetof(d2cm_event_ind_struct, event));
+        event_ind_ptr->event = D2CM_EVENT_POST_DEACT_DATA_CALL;
+        event_ind_ptr->info.apn_present = KAL_FALSE;
+        event_ind_ptr->info.cid_present = KAL_TRUE;
+        event_ind_ptr->info.cid = cnf_ptr->cid;
+
+        // sending the event_ptr
+        msg_send6(MOD_D2CM + ps_id, MOD_SIM + ps_id, ME_D2CM_SAP, MSG_ID_D2CM_EVENT_IND, (local_para_struct*)event_ind_ptr, NULL);
+    }
+
+// ---- DEBUG ----
+    DDM_CUST_LOG(MOD_D2CUST + ps_id, "sim_d2cm_post_deact_data_call_cb(OUTPUT): ps_id = %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+    return;
+
+
+    // withdrawing what this function did
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+SIM_D2CM_POST_DEACT_DATA_CALL_CB_ERR_1:
+    return;
+}
+
+
+#ifdef __L5_SUPPORT__
+void l5updn_d2cm_post_deact_data_call_cb (kal_uint32 ps_id, d2cm_deact_data_call_cnf_struct *cnf_ptr, void *arg)
+{
+    d2cm_event_ind_struct *event_ind_ptr;
+
+// ---- DEBUG ----
+    kal_prompt_trace(MOD_D2CUST + ps_id, "l5updn_d2cm_post_deact_data_call_cb(INPUT): ps_id = %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+    // checking the inputs
+    if(ps_id >= MAX_SIM_NUM || cnf_ptr == NULL)
+    {
+        kal_prompt_trace(MOD_D2CUST + ps_id, "l5updn_d2cm_post_deact_data_call_cb(): Invalid argument!!\n");
+        goto L5UPDN_D2CM_POST_DEACT_DATA_CALL_CB_ERR_1;
+    }
+
+// ---- DEBUG ----
+    kal_prompt_trace(MOD_D2CUST + ps_id, "l5updn_d2cm_post_deact_data_call_cb(): res = %d, cid = %d!!\n", cnf_ptr->res, cnf_ptr->cid);
+// ++++ DEBUG ++++
+
+    // initializing the variables
+    event_ind_ptr = NULL;
+
+    // checking the res
+    if(d2cm_get_normal_res(cnf_ptr->res) == D2CM_RES_SUCC)
+    {
+        // allocating the event_ptr
+        if((event_ind_ptr = (d2cm_event_ind_struct*)construct_local_para(sizeof(d2cm_event_ind_struct), TD_RESET)) == NULL)
+        {
+            kal_prompt_trace(MOD_D2CUST + ps_id, "l5updn_d2cm_post_deact_data_call_cb(): mdfx_event_alloc() error!!\n");
+            goto L5UPDN_D2CM_POST_DEACT_DATA_CALL_CB_ERR_1;
+        }
+
+        // setting the data
+//        memset((void*)((uint8_t*)event_ind_ptr + offsetof(d2cm_event_ind_struct, event)), 0, sizeof(d2cm_event_ind_struct) - offsetof(d2cm_event_ind_struct, event));
+        event_ind_ptr->event = D2CM_EVENT_POST_DEACT_DATA_CALL;
+        event_ind_ptr->info.apn_present = KAL_FALSE;
+        event_ind_ptr->info.cid_present = KAL_TRUE;
+        event_ind_ptr->info.cid = cnf_ptr->cid;
+
+        // sending the event_ptr
+        msg_send6(MOD_D2CM + ps_id, MOD_L5UPDN + ps_id, ME_D2CM_SAP, MSG_ID_D2CM_EVENT_IND, (local_para_struct*)event_ind_ptr, NULL);
+    }
+
+// ---- DEBUG ----
+    kal_prompt_trace(MOD_D2CUST + ps_id, "l5updn_d2cm_post_deact_data_call_cb(OUTPUT): ps_id = %d!!\n", ps_id);
+// ++++ DEBUG ++++
+
+    return;
+
+    // withdrawing what this function did
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+L5UPDN_D2CM_POST_DEACT_DATA_CALL_CB_ERR_1:
+    return;
+}
+#endif
+
+
+
+kal_bool is_cgdcont_support_eapnset_default_param(kal_uint32 ps_id)
+{
+    kal_uint32 sbp_id;
+    kal_uint32 default_sbp_id;
+    sbp_id = sbp_get_sim_sbp_id(ps_id);
+    default_sbp_id = sbp_query_id();
+    DDM_CUST_LOG(MOD_D2CUST+ps_id, "[%s]sbp_id[%d]default_sbp_id[%d]",__FUNCTION__,sbp_id,default_sbp_id);
+    if(sbp_id == 129 || default_sbp_id == 129)
+    {
+        DDM_CUST_LOG(MOD_D2CUST+ps_id, "KDDI dont support default param from eapnset");
+        return KAL_FALSE;
+    }
+    else
+    {
+        return KAL_TRUE;
+    }
+}
+
+void custom_d2_netif_event_notify_cb(kal_int32 interface_id, d2_netif_interface_cause_enum cause) {
+    if(D2_NETIF_IF_CAUSE_AP_UP_SUCC == cause) {
+        ddm_send_user_interface_id(interface_id);
+    }
+    return;
+}
+kal_bool custom_d2_last_pdn_need_detach_default_case(kal_uint8 ps_id)
+{
+    kal_uint32 sbp_id;
+
+    sbp_id = sbp_get_sim_sbp_id(ps_id);
+    DDM_CUST_LOG(MOD_D2AM+ps_id, "SBPID in custom = %d", sbp_id);
+    switch(sbp_id) {
+#ifdef __TC01__
+        case 114:
+        case 115:
+        case 116: {
+            return KAL_TRUE;
+            break;
+        }
+#endif
+        default:
+            return KAL_FALSE;
+    }
+}
+
+void custom_d2_subscribe_notify_interface_cb (d2_netif_interface_cb cb, void *user_data)
+{
+    DDM_CUST_LOG(MOD_D2AT, "%s is called", __FUNCTION__);
+    set_notify_interface_cb(cb, user_data);
+}
+//#D2AM
+
+/* API is used to check the last error cause of IA failure, due to wrong PDP type used
+API need to return kal_TRUE in case user want to handle ESM failure Cause to re-enable EUTRAN*/
+
+kal_bool custom_check_last_error_casue(kal_uint32 last_error_cause, kal_uint32 ps_id)
+{
+    kal_uint32 default_sbp_id = sbp_query_id();
+    kal_uint32 sbp_id = sbp_get_sim_sbp_id(ps_id);
+    kal_prompt_trace(MOD_D2CUST + ps_id, "[%d][%s]sbp_id[%d]default_sbp_id[%d] err_cause [%d]",
+                  __LINE__, __FUNCTION__, sbp_id, default_sbp_id, last_error_cause);
+
+    if ((default_sbp_id == 120 || sbp_id == 120) && 
+       (last_error_cause == ESM_REQUEST_REJECTED_BY_SGW_OR_PDNGW ||
+        last_error_cause == ESM_SERVICE_OPT_NOT_SUPPORTED))
+    {
+        return KAL_TRUE;
+    }
+
+    return KAL_FALSE;
+}
+/*
+API is used to bypass VzW PDN activation flow.
+in this API we can check inserted SIM CARD MCC MNC.
+
+in case VzW return TRUE.
+
+*/
+#ifdef __TC01__
+
+#define MCC_NON_VzW "262" //MCC 262 
+#define MNC_NON_VzW "01" // MNC 01
+
+kal_bool custom_d2am_bypass_vzw_check(kal_uint8 *mcc, kal_uint8 *mnc, kal_uint8 ps_id, kal_uint32 sim_sbp_id)
+{
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+kal_prompt_trace(MOD_D2CUST + ps_id, "[%s][VzW]\n",__FUNCTION__);
+return KAL_FALSE;
+}
+#endif
+/**************************************************/
+/* ---- Custom D2CM Utility Registration End ---- */
+/**************************************************/
+
+
+void custom_d2_init()
+{
+    int i;
+    kal_uint8 timer_name[20];
+
+    // initializing the variables
+    memset((void*)ddm_deact_cid_state, 0, sizeof(ddm_deact_cid_state));
+
+    for (i = 0; i < MAX_SIM_NUM; i++) {
+        // D2CM utility registration
+        d2cm_reg_event_cb(i, D2CM_CUSTOM_MOD_ID_OP, D2CM_EVENT_PDN_PROFILE_CHG | D2CM_EVENT_IPV6_RA_INIT_FAIL | D2CM_EVENT_IPV6_RA_REFRESH_FAIL, custom_d2cm_event_cb, NULL);
+        // => ACT PDN
+//        d2cm_reg_pre_act_data_call_cb(i, D2CM_CUSTOM_MOD_ID_OP, custom_d2cm_pre_act_data_call_cb, NULL);
+        d2cm_reg_post_act_data_call_cb(i, D2CM_CUSTOM_MOD_ID_OP, custom_d2cm_post_act_data_call_cb, NULL);
+        d2cm_reg_post_act_data_call_cb(i, MOD_SIM, sim_d2cm_post_act_data_call_cb, NULL);    // NEED_TO_BE_NOTICED, a WORKAROUND before reg_post_act_data_call integrated into reg_event_cb
+#ifdef __L5_SUPPORT__
+#ifndef __NANO_UT__
+        d2cm_reg_post_act_data_call_cb(i, MOD_L5UPDN, l5updn_d2cm_post_act_data_call_cb, NULL);
+#endif
+#endif
+
+        // => DEACT PDN
+//        d2cm_reg_pre_deact_data_call_cb(i, D2CM_CUSTOM_MOD_ID_OP, custom_d2cm_pre_deact_data_call_cb, NULL);
+        d2cm_reg_post_deact_data_call_cb(i, D2CM_CUSTOM_MOD_ID_OP, custom_d2cm_post_deact_data_call_cb, NULL);
+        d2cm_reg_post_deact_data_call_cb(i, MOD_SIM, sim_d2cm_post_deact_data_call_cb, NULL);    // NEED_TO_BE_NOTICED, a WORKAROUND before reg_post_deact_data_call integrated into reg_event_cb
+#ifdef __L5_SUPPORT__
+#ifndef __NANO_UT__
+        d2cm_reg_post_deact_data_call_cb(i, MOD_L5UPDN, l5updn_d2cm_post_deact_data_call_cb, NULL);
+#endif
+#endif
+        // ????
+        internet_cid[i] = INVALID_INTERNET_CID;
+        current_ps_id[i] = i;
+        current_attached_rat[i] = RAT_NONE;
+        current_is_roaming[i] = 0;
+        current_plmn[i][0] = '\0';
+        sprintf((char *)nodata_name[i], "NODATA");
+        last_attached_rat[i] = RAT_NONE;
+        last_is_roaming[i] = 0;
+        nodata_target_state[i] = NODATA_TARGET_STATE_DEACT;
+        nodata_state[i] = NODATA_STATE_IDLE;
+
+        //
+        memset(&timer_name[0], 0, sizeof(timer_name));
+        kal_snprintf((char *)&timer_name[0], 19, "D2CUST_%d_TIMER", i + 1);
+        custom_d2_event_scheduler[i] = evshed_create((kal_char *)timer_name, (module_type)MOD_D2RM + i, 0, 255); //TODO should be MOD_D2CUST
+    }
+}
diff --git a/mcu/custom/protocol/common/ps/custom_d2_config.h b/mcu/custom/protocol/common/ps/custom_d2_config.h
new file mode 100644
index 0000000..7eb8801
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_d2_config.h
@@ -0,0 +1,236 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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 __CUSTOM_D2_CONFIG_H__
+#define __CUSTOM_D2_CONFIG_H__
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "module_id_range.h"
+#include "kal_trace.h"
+#include "pdn_public_defs.h"
+#include "d2pm_public_defs.h"
+#include "d2cm_public_defs.h"
+#include "d2pm_d2rm_struct.h"
+//#include "ddm_l4bnw_struct.h"
+#include "d2pm_struct.h"
+#include "d2_netif_struct.h"
+#include "netinfo_common_struct.h"
+#include "d2_nvram_def.h"
+
+typedef enum
+{
+    DDM_EVENT_IS_CLEAN_TABLE,
+    DDM_EVENT_IS_INDEX_CONFLICT,
+    DDM_EVENT_MAX = 0x7FFFFFFF
+}ddm_deact_event_enum;
+
+typedef enum
+{
+    IS_IPV4_ADDR_TYPE      = 0,
+    IS_IPV6_ADDR_TYPE      = 1,
+    IS_IPV4V6_ADDR_TYPE    = 2,
+    ORIGINAL_ADDR_TYPE  = 3,
+    NULL_ADDR_TYPE  = 4
+}pdp_type_enum;
+
+// Type definitions
+// => D2APN
+typedef void (*d2apn_custom_subscriber_msg_cb_t) (kal_uint8 ps_id, msg_type msg_id, local_para_struct *local_para_ptr, void *arg);
+typedef struct d2apn_custom_subscriber_profile d2apn_custom_subscriber_profile_struct;
+typedef void (*d2apn_custom_subscriber_profile_tbl_cb_t) (kal_uint8 ps_id, const d2apn_custom_subscriber_profile_struct *profile_ptr, void* arg);
+struct d2apn_custom_subscriber_profile
+{
+    module_type mod_id;
+    int attr;
+    union
+    {
+        struct
+        {
+            sap_type sap_id;
+        }ilm;
+
+        struct
+        {
+            d2apn_custom_subscriber_msg_cb_t ind_cb;
+            void *ind_cb_arg;
+        }cb;
+    }idv;
+};
+// => D2UM
+typedef void (*d2um_custom_usr_msg_cb_t) (kal_uint8 ps_id, msg_type msg_id, local_para_struct *local_para_ptr, void *arg);
+typedef struct d2um_custom_usr_profile d2um_custom_usr_profile_struct;
+typedef void (*d2um_custom_usr_profile_tbl_cb_t) (kal_uint8 ps_id, const d2um_custom_usr_profile_struct *profile_ptr, void* arg);
+struct d2um_custom_usr_profile
+{
+    module_type mod_id;
+    int attr;
+    union
+    {
+        struct
+        {
+            int unused;
+        }no;
+
+        struct
+        {
+            sap_type sap_id;
+        }at;
+
+        struct
+        {
+            sap_type sap_id;
+        }ilm;
+
+        struct
+        {
+            d2um_custom_usr_msg_cb_t ind_cb;
+            void *ind_cb_arg;
+        }cb;
+    }idv;
+};
+
+// => D2PM
+typedef void (*d2pm_custom_pdn_profile_tbl_cb_t) (kal_uint8 ps_id, const d2pm_custom_pdn_profile_struct *profile_ptr, void* arg);
+// => D2CM
+typedef void (*d2cm_custom_usr_profile_tbl_cb_t) (kal_uint8 ps_id, const d2cm_custom_usr_profile_struct *profile_ptr, void* arg);
+typedef enum
+{
+    D2CM_BYPASS_EVENT_NONE = 0x00000000,
+    D2CM_BYPASS_EVENT_HO = 0x00000001,
+    D2CM_BYPASS_EVENT_GET_RETRY_TMR = 0x00000002,
+    D2CM_BYPASS_EVENT_RESET_RETRY_TMR = 0x00000003,
+    D2CM_BYPASS_EVENT_CGCONTRDP = 0x00000004,
+    D2CM_BYPASS_EVENT_MAX = 0x7FFFFFFF
+}d2cm_bypass_event_enum;
+
+typedef enum
+{
+    D2AM_KEEP_PDN = 0,
+    D2AM_NOT_KEEP_PDN = 1,
+    D2AM_FOLLOW_DEFAULT = 2
+}d2am_keep_pdn_event_enum;
+
+typedef struct
+{
+    kal_char apn[APN_STRING_LEN];
+	kal_char apn_type[APN_STRING_LEN];
+    kal_char engaged_apn_type[APN_STRING_LEN];
+}d2am_pdn_info_for_custom_struct;
+
+
+// Macros
+#define D2UM_CUSTOM_MOD_ID_START    (MOD_ID_END)
+#define D2UM_CUSTOM_MOD_ID_UT    (D2UM_CUSTOM_MOD_ID_START + 1)
+#define D2UM_CUSTOM_MOD_ID_OP    (D2UM_CUSTOM_MOD_ID_START + 2)
+#define D2CM_CUSTOM_MOD_ID_START    (MOD_ID_END)
+#define D2CM_CUSTOM_MOD_ID_UT    (D2CM_CUSTOM_MOD_ID_START + 1)
+#define D2CM_CUSTOM_MOD_ID_OP    (D2CM_CUSTOM_MOD_ID_START + 2)
+#define INVALID_INTERNET_CID (0xff)
+
+
+// ==>DDM
+typedef void (*ddm_deact_dangling_cid_ptr)(unsigned int d2_ps_id, kal_uint32 cid, ddm_deact_event_enum reason);
+typedef void (*ddm_reset_retry_timer_on_apn_config_change_func_ptr)(unsigned int d2_ps_id, kal_uint32 sbp_id, kal_char *apn);
+extern void ddm_send_user_interface_id(kal_int32 interface_id);
+#ifdef __TC01__
+extern kal_bool custom_etimer_urc_enable(kal_uint16 err_cause);
+#endif
+// APIs
+extern void custom_d2_init();
+extern kal_bool custom_reset_data_retry(kal_uint32 sbp_id, apn_data_retry_info_t *apn_retry_info, retrytime_reset_event_enum event);
+extern void custom_handle_data_retry(kal_uint32 sbp_id, apn_data_retry_info_t *apn_retry_info, kal_uint16 err_cause, kal_uint32 ps_id, rat_enum rat, kal_uint8 *plmn, kal_bool is_mcf_support, kal_uint32 *retrytime, kal_uint8 retry_time_idx, kal_bool is_roaming);
+extern kal_bool custom_d2_retry_with_no_suggest(kal_uint32 sbp_id, kal_uint8 ps_id, atcmd_request_type_enum request_type, kal_uint16 err_cause);
+extern kal_uint32 custom_d2_set_fallback_parameter();
+extern kal_uint32 custom_d2_set_ipfallback_parameter();
+extern kal_bool custom_is_retrytime_specify_by_operator(kal_uint32 ps_id, kal_uint8 *apn, kal_uint16 err_cause);
+extern void custom_d2_update_ia_apn(kal_uint8 ps_id, kal_uint8 cid, char *apn);
+extern kal_bool custom_d2_keep_internet_pdn(kal_uint32 cid, kal_uint8 ps_id, kal_bool mobile_data_on, kal_bool data_switch_on, rat_enum rat, atcmd_deact_cause_enum deact_cause, nvram_d2_mcf_keep_internet_struct *mcf_keep_internet, kal_uint8 *plmn);
+extern kal_bool custom_d2_signalling_flag(kal_uint8 ps_id, kal_bool apn_type_is_ims, kal_uint32 default_sbp_id, kal_uint32 sbp_id, char *apn, kal_uint8 *plmn, kal_bool is_roaming);
+extern kal_bool custom_d2_pcscf_discovery_flag(kal_uint8 ps_id, kal_bool apn_type_is_ims, kal_bool apn_type_is_rcs, kal_uint32 default_sbp_id, kal_uint32 sbp_id, char *apn, kal_uint8 *plmn, kal_bool is_roaming);
+extern kal_bool custom_d2_ims_last_pdn(kal_uint32 sim_sbp_id);
+extern kal_bool custom_d2_need_to_fallback(kal_uint32 sbp_id, kal_uint16 err_cause);
+pdp_type_enum custom_d2_determine_reactivate_data_call_type(kal_uint32 sbp_id, kal_bool is_roamming, kal_uint16 err_cause, pdp_addr_type_enum  pdp_addr_type, kal_uint32 apn_type, kal_uint32 fail_count);
+extern void custom_ia_apn(kal_uint8 *apn, kal_uint8 *req_apn, kal_uint8 ps_id);
+// => D2APN
+extern size_t d2apn_sizeof_custom_subscriber_profile_tbl ();
+extern d2apn_custom_subscriber_profile_struct* d2apn_search_custom_subscriber_profile_tbl_by_mod (kal_uint8 ps_id, module_type mod_id);
+extern int d2apn_iterate_custom_subscriber_profile_tbl (kal_uint8 ps_id, d2apn_custom_subscriber_profile_tbl_cb_t cb, void *arg);
+// => D2UM
+extern size_t d2um_sizeof_custom_subscriber_profile_tbl ();
+extern d2um_custom_usr_profile_struct* d2um_search_custom_subscriber_profile_tbl_by_mod (kal_uint8 ps_id, module_type mod_id);
+extern int d2um_iterate_custom_subscriber_profile_tbl (kal_uint8 ps_id, d2um_custom_usr_profile_tbl_cb_t cb, void *arg);
+// => D2PM
+extern int d2pm_iterate_custom_pdn_profile_tbl (unsigned int ps_id, d2pm_custom_pdn_profile_tbl_cb_t cb, void *arg);
+extern kal_bool d2pm_is_apn_idx_reuseable (unsigned int ps_id, const char *apn, int dst_apn_idx, int src_apn_idx);
+// => D2CM
+extern size_t d2cm_sizeof_custom_usr_profile_tbl ();
+extern d2cm_custom_usr_profile_struct* d2cm_search_custom_usr_profile_tbl_by_mod (unsigned int ps_id, module_type mod_id);
+extern int d2cm_iterate_custom_usr_profile_tbl (unsigned int ps_id, d2cm_custom_usr_profile_tbl_cb_t cb, void *arg);
+extern kal_bool is_sim_vzw(kal_uint32 ps_id);
+// => Others
+extern void custom_d2_netif_event_notify_cb(kal_int32 interface_id, d2_netif_interface_cause_enum cause);
+// => Others
+extern void custom_d2_attached_rat_ind(l4bnw_attached_rat_ind_struct *ind, kal_uint8 ps_id);
+extern void custom_d2_ia_success(d2am_ddm_attach_pdn_activate_success_ind_struct *ind, kal_uint8 ps_id);
+d2am_keep_pdn_event_enum custom_data_switch_keep_pdn(d2am_pdn_info_for_custom_struct *pdn_info_for_custom);
+extern kal_int32 custom_ddm_check_nw_limit_QoS(kal_uint8 ps_id, char* apn_name, const char* last_plmn, const QosInfo_t *qos_info, const char* qos_data_string, rat_enum rat);
+
+extern kal_bool custom_d2_need_to_get_pco_info(kal_uint32 sbp_id);
+extern kal_bool custom_d2_need_to_set_pco_info(kal_uint32 sbp_id);
+extern kal_bool custom_d2_need_to_deact_and_act_for_emergency(kal_uint32 sbp_id);
+extern kal_bool custom_d2_is_ia_need_fallback(kal_uint32 sbp_id, kal_uint8 ps_id);
+extern kal_bool custom_d2_need_to_set_always_on(kal_uint32 sbp_id, ddm_apn_type_enum apn_type);
+extern kal_bool custom_d2_ipv4_mtu_discovery_not_influence(kal_uint32 sbp_id);
+extern kal_bool custom_d2_need_to_set_rqos_ind(kal_uint32 sbp_id, ddm_apn_type_enum apn_type, kal_uint8 ps_id);
+extern void custom_ddm_register_ddm_deact_dangling_cid(ddm_deact_dangling_cid_ptr func);
+extern void custom_ddm_deact_dangling_cid(unsigned int ps_id, kal_uint32 cid, ddm_deact_event_enum reason);
+extern void custom_ddm_register_reset_retry_timer_on_apn_config_change_func(ddm_reset_retry_timer_on_apn_config_change_func_ptr func);
+extern kal_bool custom_d2_report_ewopdnerr_config (kal_uint8 ps_id, atcmd_request_type_enum req_type, kal_uint32 pdn_type, kal_uint32 errcause, kal_uint32 ike_errcause, kal_bool retrytime_present, kal_uint32 retrytime);
+extern kal_bool custom_d2_report_ewopdnerr_l2who_fail();
+extern kal_uint32 custom_d2_w2lho_disconn_src_duration (kal_uint8 ps_id);
+extern kal_uint32 custom_d2_l2who_disconn_src_duration (kal_uint8 ps_id);
+extern kal_uint32 custom_d2rm_epdg_ims_initial_setup_time_limit (kal_uint8 ps_id);
+extern kal_bool custom_d2_need_to_reactivate_data_call(kal_uint32 sbp_id, kal_uint16 err_cause, kal_uint32 fail_cnt);
+kal_bool custom_d2_last_pdn_need_detach_default_case(kal_uint8 ps_id);
+kal_bool custom_d2_need_to_retry_with_timer(kal_uint32 ps_id, kal_uint32 sbp_id, kal_uint16 err_cause, kal_uint32 apn_type, kal_uint32 fail_cnt, kal_uint32 *time_duration);
+kal_bool is_cgdcont_support_eapnset_default_param(kal_uint32 ps_id);
+void custom_d2_subscribe_notify_interface_cb (d2_netif_interface_cb cb, void* user_data);
+#ifdef __TC01__
+kal_bool custom_d2am_bypass_vzw_check(kal_uint8 *mcc, kal_uint8 *mnc, kal_uint8 ps_id,kal_uint32 sim_sbp_id);
+#endif
+kal_bool custom_check_last_error_casue(kal_uint32 last_error_cause, kal_uint32 ps_id);
+#endif
+
diff --git a/mcu/custom/protocol/common/ps/custom_d2_trc.h b/mcu/custom/protocol/common/ps/custom_d2_trc.h
new file mode 100644
index 0000000..0afe00c
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_d2_trc.h
@@ -0,0 +1,50 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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 _CUSTOM_D2_TRC_H
+#define _CUSTOM_D2_TRC_H
+
+/* Note: BASIC projects would have NVRAM_NOT_PRESENT but still build custom files. */
+#ifdef __PS_SERVICE__ 
+/* to avoid L1S related project build error*/
+#ifndef __L1_STANDALONE__
+
+#if !defined(GEN_FOR_PC)
+#include "custom_d2_trc_utmd.h"
+#endif
+
+#endif /* __L1_STANDALONE__ */
+#endif /* __PS_SERVICE__ */
+#endif /* _CUSTOM_D2_TRC_H */
\ No newline at end of file
diff --git a/mcu/custom/protocol/common/ps/custom_d2_trc_utmd.json b/mcu/custom/protocol/common/ps/custom_d2_trc_utmd.json
new file mode 100644
index 0000000..5467e21
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_d2_trc_utmd.json
@@ -0,0 +1,170 @@
+{
+  "endGen": "-",
+  "legacyParameters": {}, 
+  "module": "MOD_D2CUST", 
+  "startGen": "97",
+  "traceClassDefs": [
+    {
+      "TRACE_INFO": {
+        "debugLevel": "High", 
+        "tag": [
+          "Baseline", 
+          "TRACE_INFO"
+        ], 
+        "traceType": "Public"
+      }
+    }, 
+    {
+      "TRACE_WARNING": {
+        "debugLevel": "Medium", 
+        "tag": [
+          "Baseline", 
+          "TRACE_WARNING"
+        ], 
+        "traceType": "Public"
+      }
+    }, 
+    {
+      "TRACE_ERROR": {
+        "debugLevel": "Ultra-High", 
+        "tag": [
+          "Baseline", 
+          "TRACE_ERROR"
+        ], 
+        "traceType": "Public"
+      }
+    }, 
+    {
+      "TRACE_FUNC": {
+        "debugLevel": "Medium", 
+        "tag": [
+          "Baseline", 
+          "TRACE_FUNC"
+        ], 
+        "traceType": "Public"
+      }
+    }, 
+    {
+      "TRACE_STATE": {
+        "debugLevel": "Medium", 
+        "tag": [
+          "Baseline", 
+          "TRACE_STATE"
+        ], 
+        "traceType": "Public"
+      }
+    }, 
+    {
+      "TRACE_GROUP_1": {
+        "debugLevel": "High", 
+        "tag": [
+          "Baseline"
+        ], 
+        "traceType": "Public"
+      }
+    }, 
+    {
+      "TRACE_GROUP_2": {
+        "debugLevel": "Low", 
+        "tag": [
+          "Baseline"
+        ], 
+        "traceType": "DesignInfo"
+      }
+    }, 
+    {
+      "TRACE_GROUP_3": {
+        "debugLevel": "High", 
+        "tag": [
+          "Baseline"
+        ], 
+        "traceType": "InternalDesign"
+      }
+    }, 
+    {
+      "TRACE_GROUP_4": {
+        "debugLevel": "Low", 
+        "tag": [
+          "Baseline"
+        ], 
+        "traceType": "Public"
+      }
+    }, 
+    {
+      "TRACE_GROUP_5": {
+        "debugLevel": "Ultra-Low", 
+        "tag": [
+          "Baseline"
+        ], 
+        "traceType": "Public"
+      }
+    }, 
+    {
+      "TRACE_GROUP_6": {
+        "debugLevel": "Ultra-Low", 
+        "tag": [
+          "Baseline"
+        ], 
+        "traceType": "Public"
+      }
+    }, 
+    {
+      "TRACE_GROUP_7": {
+        "debugLevel": "Ultra-Low", 
+        "tag": [
+          "Baseline"
+        ], 
+        "traceType": "Public"
+      }
+    }, 
+    {
+      "TRACE_GROUP_8": {
+        "debugLevel": "Ultra-Low", 
+        "tag": [
+          "Baseline"
+        ], 
+        "traceType": "Public"
+      }
+    }, 
+    {
+      "TRACE_GROUP_9": {
+        "debugLevel": "Ultra-Low", 
+        "tag": [
+          "Baseline"
+        ], 
+        "traceType": "Public"
+      }
+    }, 
+    {
+      "TRACE_GROUP_10": {
+        "debugLevel": "Ultra-Low", 
+        "tag": [
+          "Baseline",
+          "Sensitive"
+        ], 
+        "traceType": "Public"
+      }
+    }, 
+    {
+      "TRACE_SENSITIVE_USIR": {
+        "debugLevel": "High", 
+        "tag": [
+          "Baseline",
+          "USIR"
+        ], 
+        "traceType": "Public"
+      }
+    }
+  ], 
+  "traceDefs": [
+    {
+      "D2CUST_TRACE_INFO_TEST": {
+        "apiType": "index",
+        "format": "[D2CUST]:hi~ ps%d", 
+        "traceClass": "TRACE_INFO"
+      }
+    }
+  ], 
+  "traceFamily": "PS",
+  "userModule": ""
+}
diff --git a/mcu/custom/protocol/common/ps/custom_dmf_app.c b/mcu/custom/protocol/common/ps/custom_dmf_app.c
new file mode 100644
index 0000000..b3a588b
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_dmf_app.c
@@ -0,0 +1,225 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * custom_dmf_app.c
+ *
+ * Project:
+ * --------
+ * UMOLYA
+ *
+ * Description:
+ * ------------
+ * This file is for customized DMF APP
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *
+ * ==========================================================================
+ * $Log$
+ *
+ * 01 14 2020 jack-mh.tsai
+ * [MOLY00474607] ModemºÝ¤j?Õu¦¬¶°:fix build error
+ *
+ *
+ *
+*****************************************************************************/
+#ifdef __DMF_SUPPORT__
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "kal_public_defs.h"
+
+#include "em_mtf_public_struct.h"
+
+#include "dmf_public_event.h"
+#include "dmf_public_def.h"
+
+#include "protocol_section.h"
+#include "icd_logging.h"
+#include "mte_if.h"
+#include "em_msgid.h"
+
+#define DMF_REG_EM(EM_INFO, EM_MSG_ID, HDLR) \
+extern void HDLR(const mte_rule_t *mte_rule, void* msg, kal_uint32 msg_size);
+
+#define DMF_REG_PEER(PEER_ID, HDLR) \
+extern void HDLR(const mte_rule_t *mte_rule, void* msg, kal_uint32 msg_size);
+
+#ifdef __ICD_LOGGING_SUPPORT__
+#define DMF_REG_ICD_EVENT(ICD_EVENT_CODE, HDLR) \
+extern void HDLR(const mte_rule_t *mte_rule, void* msg, kal_uint32 msg_size);
+
+#define DMF_REG_ICD_RECORD(ICD_RECORD_CODE, HDLR) \
+extern void HDLR(const mte_rule_t *mte_rule, void* msg, kal_uint32 msg_size);
+#endif
+
+#include "custom_dmf_app_reg.h"
+
+static kal_uint32 dmf_custom_needed_peer_msg_id[] = 
+{
+    0xffffffff,
+    #define DMF_REG_PEER(PEER_ID, HDLR) PEER_ID,
+        #include "custom_dmf_app_reg.h"
+};
+
+kal_bool dmf_custom_needed_peer_trace(kal_uint32 global_peer_msg_id)
+{
+    kal_uint16 i;
+    kal_uint32 size = sizeof(dmf_custom_needed_peer_msg_id) / sizeof(kal_uint32);
+    for (i=0; i< size; i++)
+    {
+        if (dmf_custom_needed_peer_msg_id[i] == global_peer_msg_id)
+            return KAL_TRUE;
+    }
+    return KAL_FALSE;
+}
+
+void dmf_custom_set_em_filters(mtfl4c_em_update_req_struct *em_ptr)
+{
+    #define DMF_REG_EM(EM_INFO, EM_MSG_ID, HDLR) \
+        em_ptr->info_request[EM_INFO] = EM_ON;
+        #include "custom_dmf_app_reg.h"
+}
+
+#ifdef __ICD_LOGGING_SUPPORT__
+void dmf_custom_set_icd_filters()
+{
+
+    #define DMF_REG_ICD_EVENT(ICD_EVENT_CODE, HDLR) \
+        icd_set_mtf_event_filter(KAL_TRUE, ICD_PROTOCOL_ID_1, ICD_EVENT_CODE); \
+        icd_set_mtf_event_filter(KAL_TRUE, ICD_PROTOCOL_ID_2, ICD_EVENT_CODE);
+    #define DMF_REG_ICD_RECORD(ICD_RECORD_CODE, HDLR) \
+        icd_set_mtf_record_filter(KAL_TRUE, ICD_PROTOCOL_ID_1, ICD_RECORD_CODE); \
+        icd_set_mtf_record_filter(KAL_TRUE, ICD_PROTOCOL_ID_2, ICD_RECORD_CODE);
+        #include "custom_dmf_app_reg.h"
+}
+#endif
+
+void dmf_custom_reset()
+{
+    // reset and initial contexts
+
+}
+
+void dmf_custom_create()
+{
+    // Register callback function thorugh MTF
+
+    /* define Info Collect static variables*/
+#define DMF_REG_EM(EM_INFO, EM_MSG_ID, HDLR) \
+    static mte_rule_t EM_INFO##EM_MSG_ID##HDLR##_em_rule;
+#define DMF_REG_PEER(PEER_ID, HDLR) \
+    static mte_rule_t PEER_ID##HDLR##_peer_rule;
+#ifdef __ICD_LOGGING_SUPPORT__
+#define DMF_REG_ICD_EVENT(ICD_EVENT_CODE, HDLR) \
+    static mte_rule_t ICD_EVENT_CODE##HDLR##_icd_event_rule; \
+    static mte_rule_t ICD_EVENT_CODE##HDLR##_icd_event_rule_2;
+#define DMF_REG_ICD_RECORD(ICD_RECORD_CODE, HDLR) \
+    static mte_rule_t ICD_RECORD_CODE##HDLR##_icd_record_rule; \
+    static mte_rule_t ICD_RECORD_CODE##HDLR##_icd_record_rule_2;
+#endif
+    #include "custom_dmf_app_reg.h"
+
+/* Register InfoCollect source */
+#define DMF_REG_EM(EM_INFO, EM_MSG_ID, HDLR) \
+    EM_INFO##EM_MSG_ID##HDLR##_em_rule.fmt_id = MT_FMT_ILM; \
+    EM_INFO##EM_MSG_ID##HDLR##_em_rule.code = EM_MSG_ID; \
+    EM_INFO##EM_MSG_ID##HDLR##_em_rule.context = NULL; \
+    EM_INFO##EM_MSG_ID##HDLR##_em_rule.execute = HDLR; \
+    mt_register_mte_rule(&EM_INFO##EM_MSG_ID##HDLR##_em_rule);
+
+#define DMF_REG_PEER(PEER_ID, HDLR) \
+    PEER_ID##HDLR##_peer_rule.fmt_id = MT_FMT_PEER_TRACE; \
+    PEER_ID##HDLR##_peer_rule.code = PEER_ID; \
+    PEER_ID##HDLR##_peer_rule.context = NULL; \
+    PEER_ID##HDLR##_peer_rule.execute = HDLR; \
+    mt_register_mte_rule(&PEER_ID##HDLR##_peer_rule);
+
+#ifdef __ICD_LOGGING_SUPPORT__
+
+#define DMF_REG_ICD_EVENT(ICD_EVENT_CODE, HDLR) \
+    ICD_EVENT_CODE##HDLR##_icd_event_rule.fmt_id = MT_FMT_ICD; \
+    ICD_EVENT_CODE##HDLR##_icd_event_rule.code = GET_RULE_CODE(ICD_LOG_EVENT_T, ICD_EVENT_CODE, ICD_PROTOCOL_ID_1); \
+    ICD_EVENT_CODE##HDLR##_icd_event_rule.context = NULL; \
+    ICD_EVENT_CODE##HDLR##_icd_event_rule.execute = HDLR; \
+    mt_register_mte_rule(&ICD_EVENT_CODE##HDLR##_icd_event_rule); \
+    ICD_EVENT_CODE##HDLR##_icd_event_rule_2.fmt_id = MT_FMT_ICD; \
+    ICD_EVENT_CODE##HDLR##_icd_event_rule_2.code = GET_RULE_CODE(ICD_LOG_EVENT_T, ICD_EVENT_CODE, ICD_PROTOCOL_ID_2); \
+    ICD_EVENT_CODE##HDLR##_icd_event_rule_2.context = NULL; \
+    ICD_EVENT_CODE##HDLR##_icd_event_rule_2.execute = HDLR; \
+    mt_register_mte_rule(&ICD_EVENT_CODE##HDLR##_icd_event_rule_2); \
+
+#define DMF_REG_ICD_RECORD(ICD_RECORD_CODE, HDLR) \
+    ICD_RECORD_CODE##HDLR##_icd_record_rule.fmt_id = MT_FMT_ICD; \
+    ICD_RECORD_CODE##HDLR##_icd_record_rule.code = GET_RULE_CODE(ICD_LOG_RECORD_T, ICD_RECORD_CODE, ICD_PROTOCOL_ID_1); \
+    ICD_RECORD_CODE##HDLR##_icd_record_rule.context = NULL; \
+    ICD_RECORD_CODE##HDLR##_icd_record_rule.execute = HDLR; \
+    mt_register_mte_rule(&ICD_RECORD_CODE##HDLR##_icd_record_rule); \
+    ICD_RECORD_CODE##HDLR##_icd_record_rule_2.fmt_id = MT_FMT_ICD; \
+    ICD_RECORD_CODE##HDLR##_icd_record_rule_2.code = GET_RULE_CODE(ICD_LOG_RECORD_T, ICD_RECORD_CODE, ICD_PROTOCOL_ID_2); \
+    ICD_RECORD_CODE##HDLR##_icd_record_rule_2.context = NULL; \
+    ICD_RECORD_CODE##HDLR##_icd_record_rule_2.execute = HDLR; \
+    mt_register_mte_rule(&ICD_RECORD_CODE##HDLR##_icd_record_rule_2); \
+
+#endif /* __ICD_LOGGING_SUPPORT__ */
+    #include "custom_dmf_app_reg.h"
+
+    // reset contexts here
+    dmf_custom_reset();
+}
+
+void dmf_custom_clean_context(void)
+{
+    // Clean contexts when assert/fatal happened for USIR
+}
+
+extern void dmf_event_cmcc_eps_attach_info_handler (dmf_event_struct *event);
+
+void dmf_custom_event_hdlr(dmf_event_struct *event)
+{
+/*
+    // handle event broadcasted by DMF InfoCollector in this function
+    if (event->event_id == DMF_EVENT_CMCC_EPS_ATTACH_INFO)
+    {
+        dmf_event_cmcc_eps_attach_info_handler(event);
+    }
+*/
+}
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_dmf_app.h b/mcu/custom/protocol/common/ps/custom_dmf_app.h
new file mode 100644
index 0000000..587ac01
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_dmf_app.h
@@ -0,0 +1,123 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * custom_dmf_app.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file provides the custom DMF APP related definition.
+ *
+ * Author:
+ * -------
+ * 
+ *
+ *
+ * ==========================================================================
+ * $Log$
+ *
+ * 10 18 2021 ot_muhammed.rafy
+ * [MOLY00572177] Bar cell????
+ * 	
+ * 	.
+ *
+ * 01 19 2020 kunkun.shao
+ * [MOLY00475736] Modem¶Ë´óÊý¾ÝÊÕ¼¯:custom dmf
+ *
+ *
+ *
+*****************************************************************************/
+
+#ifndef CUSTOM_DMF_APP_H
+#define CUSTOM_DMF_APP_H
+
+#include "kal_general_types.h"
+#include "em_mtf_public_struct.h"
+#include "atp_dmf_struct.h"
+#include "atp_public_defs.h"
+#include "dmf_public_event.h"
+
+#define DEFAULT_CUST_APP_ID 20000
+#define DMF_CUST_KPI_APP_ID 20001
+
+// structure of MSG_ID_MT_DMF_L4C_CONFIG_REQ
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8 cause;
+    kal_uint8 rat_type;
+    // ...
+} mt_dmf_l4c_custom_config_req_struct;
+
+// structure of MSG_ID_MT_DMF_L4C_CONFIG_CNF
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8 cause;
+    kal_uint8 rat_type;
+    // ...
+} mt_dmf_l4c_custom_config_cnf_struct;
+
+extern void dmf_custom_clean_context(void);
+
+extern void dmf_custom_event_hdlr(dmf_event_struct *event);
+
+extern kal_bool dmf_custom_needed_peer_trace(kal_uint32 global_peer_msg_id);
+
+extern void dmf_custom_set_em_filters(mtfl4c_em_update_req_struct *em_ptr);
+
+extern void dmf_custom_set_icd_filters();
+
+extern void dmf_custom_reset();
+
+extern void dmf_custom_create();
+
+extern kal_bool dmf_custom_at_req_handler(protocol_id_enum ps_id, atp_mt_dmf_cmd_req_struct *req_struct);
+
+kal_bool custom_atp_edmfapp_hdlr(atp_mt_dmf_cmd_req_struct *msg_ptr, atp_string_struct *source_string_ptr);
+
+kal_bool custom_atp_mt_urc_to_ap(atp_mt_dmf_urc_ind_struct *ind_ptr, kal_uint8 *urc);
+
+kal_bool custom_atp_mt_dmf_cmd_cnf_hdlr(atp_mt_dmf_cmd_cnf_struct *msg_ptr, kal_uint8 *at_data);
+
+
+#endif /* CUSTOM_EM_H */
diff --git a/mcu/custom/protocol/common/ps/custom_dmf_app_atp_hdlr.c b/mcu/custom/protocol/common/ps/custom_dmf_app_atp_hdlr.c
new file mode 100644
index 0000000..d64b197
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_dmf_app_atp_hdlr.c
@@ -0,0 +1,276 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * custom_dmf_app_atp_hdlr.c
+ *
+ * Project:
+ * --------
+ * MAUI
+ *
+ * Description:
+ * ------------
+ * This file is for encode/decode ATP AT/URC
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *
+ * ==========================================================================
+ * $Log$
+ *
+ * 01 14 2020 jack-mh.tsai
+ * [MOLY00474607] ModemºÝ¤j?Õu¦¬¶°:fix build error
+ *
+ *
+ *
+*****************************************************************************/
+
+#ifdef __DMF_SUPPORT__
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "kal_public_defs.h"
+
+#include "atp_dmf_struct.h"
+
+#include "custom_dmf_app.h"
+
+#define ATP_FIELD_TYPE(_PTR_, _INDEX_) _PTR_->field_list[_INDEX_].field_type
+#define ATP_FIELD_VALUE(_PTR_, _INDEX_) _PTR_->field_list[_INDEX_].field_value
+#define ATP_FIELD_LEN(_PTR_, _INDEX_) _PTR_->field_list[_INDEX_].field_len
+#define ATP_FIELD_PTR(_PTR_, _INDEX_) _PTR_->field_list[_INDEX_].field_ptr
+
+#define ATP_TEMP_BUF_SIZE (512)
+#define ATP_MAX_URC_DATA_SIZE   (2048)
+
+kal_uint16 custom_atp_get_sizeof_atp_mt_dmf_cmd_req_struct()
+{
+    return sizeof(atp_mt_dmf_cmd_req_struct);
+}
+
+kal_uint16 custom_atp_get_sizeof_atp_mt_dmf_cmd_cnf_struct()
+{
+    return sizeof(atp_mt_dmf_cmd_cnf_struct);
+}
+
+kal_uint16 custom_atp_get_sizeof_atp_mt_dmf_urc_ind_struct()
+{
+    return sizeof(atp_mt_dmf_urc_ind_struct);
+}
+
+kal_bool custom_atp_edmfapp_hdlr(atp_mt_dmf_cmd_req_struct *msg_ptr, atp_string_struct *source_string_ptr)
+{
+    kal_bool result = KAL_FALSE;
+    kal_uint32 app_id = 0;
+    kal_uint16 i=0;
+
+    app_id = (kal_uint32) source_string_ptr->field_list[i].field_value;
+    i++;
+
+    // parse AT data according to APP ID    
+    switch (app_id)    
+    {        
+        #define DMF_APP(APP_ID) \
+        case APP_ID: \
+        {        
+            #define DMF_CMD_REQ(STRUCT_NAME, PARA_NAME) \
+            STRUCT_NAME *pp = &(msg_ptr->p.PARA_NAME);
+
+            #define  DMF_FIELD_VAR(VAR_TYPE, VAR_NAME, MAX_VAL) \
+            if (ATP_FIELD_TYPE(source_string_ptr, i) != ATP_FIELD_TYPE_INT)\
+            {\
+                 result =  KAL_FALSE;\
+                 break;\
+            }\
+            else\
+            {\
+                pp->VAR_NAME = (VAR_TYPE)ATP_FIELD_VALUE(source_string_ptr, i);\
+                i++;\
+            }
+            
+            #define  DMF_FIELD_VAR_O(VAR_TYPE, VAR_NAME, MAX_VAL) \
+            if ((ATP_FIELD_TYPE(source_string_ptr, i) == ATP_FIELD_TYPE_EMPTY) || \
+                (ATP_FIELD_TYPE(source_string_ptr, i) == ATP_FIELD_TYPE_INVALIDE)) \
+            { \
+                pp->VAR_NAME = 0;\
+                pp->is_##VAR_NAME##_present = KAL_FALSE;\
+                i++;\
+            } \
+            else if (ATP_FIELD_TYPE(source_string_ptr, i) != ATP_FIELD_TYPE_INT)\
+            {\
+                 result =  KAL_FALSE;\
+                 break;\
+            }\
+            else\
+            {\
+                pp->VAR_NAME = (VAR_TYPE)ATP_FIELD_VALUE(source_string_ptr, i);\
+                pp->is_##VAR_NAME##_present = KAL_TRUE;\
+                i++;\
+            }
+            
+            #define  DMF_FIELD_STRING(STR_NAME, LENGTH) \
+            if (ATP_FIELD_TYPE(source_string_ptr, i) != ATP_FIELD_TYPE_STR)\
+            {\
+                 result =  KAL_FALSE;\
+                 break;\
+            }\
+            else if( ATP_FIELD_LEN(source_string_ptr, i) > LENGTH )\
+            {\
+                 result =  KAL_FALSE;\
+                 break;\
+            }\
+            else\
+            {\
+                pp->STR_NAME##_len = ATP_FIELD_LEN(source_string_ptr, i);\
+                memcpy(pp->STR_NAME, ATP_FIELD_PTR(source_string_ptr, i), sizeof(kal_char)*ATP_FIELD_LEN(source_string_ptr, i));\
+                i++;\
+            }
+                    
+            #define DMF_APP_END \
+                result = KAL_TRUE;\
+                break; \
+        }
+        #define DMF_CMD_REQ_SEC        
+        #include "custom_dmf_app_cmd_def.h"
+
+        default:
+        {
+            result = KAL_FALSE;
+            break;
+        }
+    }
+
+    return result;
+}
+
+kal_bool custom_atp_mt_urc_to_ap(atp_mt_dmf_urc_ind_struct *ind_ptr, kal_uint8 *urc)
+{
+    kal_bool result = KAL_TRUE;
+    kal_char tmp_buf[ATP_TEMP_BUF_SIZE+1];
+
+    /*
+    * the urc has contained AT heaader : +EDMFAPP: <APP_ID>
+    * The buffer size of urc is ATP_MAX_URC_DATA_SIZE
+    */
+    
+    switch(ind_ptr->ind_type)    
+    {        
+        #define DMF_URC_IND(IND_TYPE, STRUCT_NAME, PARA_NAME) \
+        case IND_TYPE: \
+        { \
+            STRUCT_NAME *pp = &(ind_ptr->p.PARA_NAME);        
+
+            #define DMF_FIELD_VAR(VAR_TYPE, VAR_NAME, MAX_VAL) \
+             memset(tmp_buf, 0, sizeof(tmp_buf));\
+             sprintf((kal_char *)tmp_buf, ",%d", pp->VAR_NAME);\
+             strcat((char*)urc, (const char*)tmp_buf);
+             
+             #define DMF_FIELD_STRING(STR_NAME, LENGTH) \
+             memset(tmp_buf, 0, sizeof(tmp_buf));\
+             if(pp->STR_NAME##_len > ATP_TEMP_BUF_SIZE) \
+                pp->STR_NAME##_len = ATP_TEMP_BUF_SIZE; \
+             memcpy(tmp_buf, pp->STR_NAME, sizeof(kal_char)*(pp->STR_NAME##_len)); \
+             strcat((char*)urc, ",\""); \
+             strcat((char*)urc, (const char*)tmp_buf); \
+             strcat((char*)urc, "\"");
+             
+            #define DMF_URC_IND_END(STRUCT_NAME) \
+            break; \
+        }        
+
+        #define DMF_URC_IND_SEC        
+        #include "custom_dmf_app_cmd_def.h"                
+
+        default:            
+        {
+            result = KAL_FALSE;
+        }    
+
+    }
+    return result;
+}
+
+kal_bool custom_atp_mt_dmf_cmd_cnf_hdlr(atp_mt_dmf_cmd_cnf_struct *msg_ptr, kal_uint8 *at_data)
+{
+    kal_bool result = KAL_TRUE;
+    kal_char tmp_buf[ATP_TEMP_BUF_SIZE+1];
+
+    /*
+    * the at_data has contained AT heaader : +EDMFAPP: <APP_ID>
+    * The buffer size of at_data is ATP_MAX_URC_DATA_SIZE
+    */
+
+    switch(msg_ptr->cnf_type)    
+    {        
+        #define DMF_CMD_CNF(CNF_TYPE, STRUCT_NAME, PARA_NAME)\
+        case CNF_TYPE: \
+        { \
+            STRUCT_NAME *pp = &(msg_ptr->p.PARA_NAME);
+            
+            #define DMF_FIELD_VAR(VAR_TYPE, VAR_NAME, MAX_VAL) \
+             memset(tmp_buf, 0, sizeof(tmp_buf));\
+             sprintf((kal_char *)tmp_buf, ",%d", pp->VAR_NAME);\
+             strcat((char*)at_data, (const char*)tmp_buf);                     
+
+            #define DMF_FIELD_STRING(STR_NAME, LENGTH) \
+            memset(tmp_buf, 0, sizeof(tmp_buf));\
+            if(pp->STR_NAME##_len > ATP_TEMP_BUF_SIZE) \
+               pp->STR_NAME##_len = ATP_TEMP_BUF_SIZE; \
+            memcpy(tmp_buf, pp->STR_NAME, sizeof(kal_char)*(pp->STR_NAME##_len)); \
+            strcat((char*)at_data, ",\""); \
+            strcat((char*)at_data, (const char*)tmp_buf); \
+            strcat((char*)at_data, "\"");
+     
+            #define DMF_CMD_CNF_END(STRUCT_NAME) \
+            break; \
+            }        
+    
+        #define DMF_CMD_CNF_SEC        
+        #include "custom_dmf_app_cmd_def.h"                
+
+        default:     
+        {
+            result = KAL_FALSE;
+            break;
+        }
+    }
+
+    return result;
+}
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_dmf_app_cmd_def.h b/mcu/custom/protocol/common/ps/custom_dmf_app_cmd_def.h
new file mode 100644
index 0000000..eb82612
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_dmf_app_cmd_def.h
@@ -0,0 +1,151 @@
+/*****************************************************************************
+*  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 DMF_APP
+#define DMF_APP(APP_ID)
+#endif
+
+#ifndef DMF_APP_END
+#define DMF_APP_END
+#endif
+
+#ifndef DMF_CMD_REQ
+#define DMF_CMD_REQ(STRUCT_NAME, PARA_NAME)
+#endif
+
+#ifndef DMF_CMD_REQ_END
+#define DMF_CMD_REQ_END(STRUCT_NAME)
+#endif
+
+#ifndef DMF_CMD_CNF
+#define DMF_CMD_CNF(CNF_TYPE, STRUCT_NAME, PARA_NAME)
+#endif
+
+#ifndef DMF_CMD_CNF_END
+#define DMF_CMD_CNF_END(STRUCT_NAME)
+#endif
+
+#ifndef DMF_URC_IND
+#define DMF_URC_IND(IND_TYPE, STRUCT_NAME, PARA_NAME)
+#endif
+
+#ifndef DMF_URC_IND_END
+#define DMF_URC_IND_END(STRUCT_NAME)
+#endif
+
+#ifndef DMF_FIELD_VAR
+#define DMF_FIELD_VAR(VAR_TYPE, VAR_NAME, MAX_VAL)
+#endif
+
+#ifndef DMF_FIELD_VAR_O
+#define DMF_FIELD_VAR_O(VAR_TYPE, VAR_NAME, MAX_VAL)
+#endif
+
+
+#ifndef DMF_FIELD_VAR_ARRAY
+#define DMF_FIELD_VAR_ARRAY(VAR_TYPE, VAR_NAME, LENGTH)
+#endif
+
+#ifndef DMF_FIELD_STRING
+#define DMF_FIELD_STRING(STR_NAME, LENGTH)
+#endif
+
+#if !defined(DMF_CMD_REQ_SEC) && !defined(DMF_CMD_CNF_SEC) && !defined(DMF_URC_IND_SEC)
+#define DMF_CMD_REQ_SEC
+#define DMF_CMD_CNF_SEC
+#define DMF_URC_IND_SEC
+#endif
+
+#define UNUSED_FIELD    0
+
+/*Define structures*/
+
+DMF_APP(DEFAULT_CUST_APP_ID)
+
+    // Define CMD_REQ structure 
+    #ifdef DMF_CMD_REQ_SEC
+        DMF_CMD_REQ(dmf_custom_app_cmd_req_struct, custom_app_cmd_req)
+            DMF_FIELD_VAR(kal_uint32, cause, 2000)
+            DMF_FIELD_STRING(event, 100)
+        DMF_CMD_REQ_END(dmf_custom_app_cmd_req_struct)
+    #endif
+
+    // Define CMD_CNF structure 
+    #ifdef DMF_CMD_CNF_SEC
+        DMF_CMD_CNF(DMF_CUSTOM_ATTACH_COUNT_CNF, dmf_custom_attach_count_cnf_struct, custom_attach_count_cnf)
+            DMF_FIELD_VAR(kal_uint32, cause, UNUSED_FIELD)
+            DMF_FIELD_STRING(event, 100)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_request_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_success_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_count, UNUSED_FIELD)
+        DMF_CMD_CNF_END(dmf_custom_attach_count_cnf_struct)
+    #endif 
+
+    // Define URC structure
+    #ifdef DMF_URC_IND_SEC
+        DMF_URC_IND(DMF_CUSTOM_ATTACH_COUNT_IND, dmf_custom_attach_count_ind_struct, custom_attach_count_ind)
+            DMF_FIELD_VAR(kal_uint32, cause, UNUSED_FIELD)
+            DMF_FIELD_STRING(event, 100)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_request_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_success_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_count, UNUSED_FIELD)
+        DMF_URC_IND_END(dmf_custom_attach_count_ind_struct)    
+    #endif
+
+DMF_APP_END
+
+
+#ifdef __DMF_OP01_NW_KPI__
+#include "custom_dmf_kpi_app_cmd.h"
+#endif
+
+
+#undef DMF_APP
+#undef DMF_APP_END
+#undef DMF_CMD_REQ
+#undef DMF_CMD_REQ_END
+#undef DMF_CMD_CNF
+#undef DMF_CMD_CNF_END
+#undef DMF_URC_IND
+#undef DMF_URC_IND_END
+#undef DMF_FIELD_VAR
+#undef DMF_FIELD_VAR_O
+#undef DMF_FIELD_VAR_ARRAY
+#undef DMF_FIELD_STRING
+#undef DMF_CMD_REQ_SEC
+#undef DMF_CMD_CNF_SEC
+#undef DMF_URC_IND_SEC
+#undef DMF_CUSTOM_SEC
+#undef UNUSED_FIELD
diff --git a/mcu/custom/protocol/common/ps/custom_dmf_app_hdlr.c b/mcu/custom/protocol/common/ps/custom_dmf_app_hdlr.c
new file mode 100644
index 0000000..ed3378e
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_dmf_app_hdlr.c
@@ -0,0 +1,211 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*****************************************************************************
+ * Filename:
+ * ---------
+ * custom_dmf_app_hdlr.c
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *   This file is for customized DMF APP handler/callback functions
+ *
+ * Author:
+ * -------
+ * -------
+ *****************************************************************************/
+#ifdef __DMF_SUPPORT__
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "kal_public_defs.h"
+
+#include "sim_exported_enum.h"
+#include "mte_if.h"
+
+#include "l3_inc_enums.h"
+
+#include "atp_dmf_struct.h"
+#include "custom_dmf_app.h"
+
+#include "dmf_public_event.h"
+#include "dmf_public_api.h"
+
+kal_uint32 event_attach_request = 0;
+kal_uint32 event_attach_success = 0;
+kal_uint32 event_attach_fail = 0;
+
+kal_bool dmf_custom_at_req_handler(protocol_id_enum ps_id, atp_mt_dmf_cmd_req_struct *req_struct)
+{
+/*
+    if (req_struct->app_id == DEFAULT_CUST_APP_ID)
+    {
+        if (req_struct->p.custom_app_cmd_req.cause == 2)
+        {
+            dmf_custom_attach_count_cnf_struct attach_count;
+
+            attach_count.cause = 2;
+            kal_mem_cpy(attach_count.event, req_struct->p.custom_app_cmd_req.event, 100);
+            attach_count.event_len = strlen(attach_count.event);
+            attach_count.lte_attach_request_count = event_attach_request;
+            attach_count.lte_attach_success_count = event_attach_success;
+            attach_count.lte_attach_fail_count = event_attach_fail;
+
+            // send +EDMFAPP: <APP_ID>, <cause>, <event>, <lte_attach_request_count>, <lte_attach_success_count>, <lte_attach_fail_count>
+            dmf_send_at_rsp(req_struct->ch_id, ps_id, DEFAULT_CUST_APP_ID,
+                PROXY_CMD_INTERMEDIATE_RSP, DMF_CUSTOM_ATTACH_COUNT_CNF, &attach_count, sizeof(dmf_custom_attach_count_cnf_struct));
+
+            // send AT Response : OK
+            dmf_send_at_final_rsp(req_struct->ch_id, ps_id, DEFAULT_CUST_APP_ID, PROXY_CMD_FAIL);
+
+            event_attach_request = 0;
+            event_attach_success = 0;
+            event_attach_fail = 0;
+        }
+        else
+        {
+            // send AT Response : ERROR
+            dmf_send_at_final_rsp(req_struct->ch_id, ps_id, DEFAULT_CUST_APP_ID, PROXY_CMD_FAIL);
+        }
+        return KAL_TRUE;
+    }
+*/
+    // if the reuest is not handled by this function, return KAL_FALSE        
+    return KAL_FALSE;
+}
+
+void dmf_event_cmcc_eps_attach_info_handler (dmf_event_struct *event)
+{
+/*
+    dmf_event_cmcc_eps_attach_struct *attach_info;
+    dmf_custom_attach_count_ind_struct attach_count;
+
+    attach_info = (dmf_event_cmcc_eps_attach_struct*) event->data;
+
+    if (attach_info->attach_event == DMF_CMCC_EPS_ATTACH_REQUEST)
+    {
+        event_attach_request++;
+    }
+    else if (attach_info->attach_event == DMF_CMCC_EPS_ATTACH_SUCCESS)
+    {
+        event_attach_success++;
+    }
+    else if (attach_info->attach_event == DMF_CMCC_EPS_ATTACH_FAIL)
+    {
+        if ( (attach_info->attach_reject_cause == EMM_CAUSE_IMSI_UNKNOWN_IN_HSS) ||
+                (attach_info->attach_reject_cause == EMM_CAUSE_ILLEGAL_UE) ||
+                (attach_info->attach_reject_cause == EMM_CAUSE_ILLEGAL_ME) ||
+                (attach_info->attach_reject_cause == EMM_CAUSE_EPS_NOT_ALLOWED) ||
+                (attach_info->attach_reject_cause == EMM_CAUSE_EPS_NON_EPS_NOT_ALLOWED) ||
+                (attach_info->attach_reject_cause == EMM_CAUSE_NO_SUITABLE_CELL_IN_TA) ||
+                (attach_info->attach_reject_cause == EMM_CAUSE_ESM_FAILURE) )
+        {
+            event_attach_success++;
+        }
+        else
+        {
+            event_attach_fail++;
+        }
+    }
+    attach_count.cause = 1;
+    kal_mem_cpy(attach_count.event, "This is sample code for event", sizeof("This is sample code for event"));
+    attach_count.event_len = strlen(attach_count.event);
+    attach_count.lte_attach_request_count = event_attach_request;
+    attach_count.lte_attach_success_count = event_attach_success;
+    attach_count.lte_attach_fail_count = event_attach_fail;
+// send +EDMFAPP: <APP_ID>, <cause>, <event>, <lte_attach_request_count>, <lte_attach_success_count>, <lte_attach_fail_count>
+    dmf_send_at_urc(DEFAULT_CUST_APP_ID, event->ps_id, DMF_CUSTOM_ATTACH_COUNT_IND, &attach_count, sizeof(dmf_custom_attach_count_ind_struct));
+*/
+}
+
+/*
+ * The following shall be removed after EMM check-in their structures into em_emm_public_struct.h
+ */
+#include "l3_inc_enums.h"
+
+void dmf_custom_emm_em_reg_event_info_handler(const mte_rule_t *mte_rule, void* msg, kal_uint32 msg_size)
+{
+/*
+    protocol_id_enum ps_id;
+    ilm_struct *ilm_ptr = (ilm_struct*) msg;
+    em_emm_reg_event_info_ind_struct *em_msg_ptr;
+    dmf_custom_attach_count_ind_struct attach_count;
+
+    em_msg_ptr = (em_emm_reg_event_info_ind_struct*) ilm_ptr->local_para_ptr;            
+    ps_id = ilm_ptr->src_mod_id - MOD_EMM;
+
+    if (em_msg_ptr->is_attach_request)
+    {
+        event_attach_request++;
+    }
+    else if (em_msg_ptr->is_attach_accept)
+    {
+        event_attach_success++;
+    }
+    else if (em_msg_ptr->is_attach_reject)
+    {
+        if ( (em_msg_ptr->emm_attach_rej_cause == EMM_CAUSE_IMSI_UNKNOWN_IN_HSS) ||
+                (em_msg_ptr->emm_attach_rej_cause == EMM_CAUSE_ILLEGAL_UE) ||
+                (em_msg_ptr->emm_attach_rej_cause == EMM_CAUSE_ILLEGAL_ME) ||
+                (em_msg_ptr->emm_attach_rej_cause == EMM_CAUSE_EPS_NOT_ALLOWED) ||
+                (em_msg_ptr->emm_attach_rej_cause == EMM_CAUSE_EPS_NON_EPS_NOT_ALLOWED) ||
+                (em_msg_ptr->emm_attach_rej_cause == EMM_CAUSE_NO_SUITABLE_CELL_IN_TA) ||
+                (em_msg_ptr->emm_attach_rej_cause == EMM_CAUSE_ESM_FAILURE) )
+        {
+            event_attach_success++;
+        }
+        else
+        {
+            event_attach_fail++;
+        }
+    }
+    else
+    {
+        return;
+    }       
+    attach_count.cause = 1;
+    kal_mem_cpy(attach_count.event, "This is sample code for event cause 2", sizeof("This is sample code for event cause 2"));
+    attach_count.event_len = strlen(attach_count.event);
+    attach_count.lte_attach_request_count = event_attach_request;
+    attach_count.lte_attach_success_count = event_attach_success;
+    attach_count.lte_attach_fail_count = event_attach_fail;
+// send +EDMFAPP: <APP_ID>, <cause>, <event>, <lte_attach_request_count>, <lte_attach_success_count>, <lte_attach_fail_count>
+    dmf_send_at_urc(DEFAULT_CUST_APP_ID, ps_id, DMF_CUSTOM_ATTACH_COUNT_IND, &attach_count, sizeof(dmf_custom_attach_count_ind_struct));
+
+*/
+}
+#endif
\ No newline at end of file
diff --git a/mcu/custom/protocol/common/ps/custom_dmf_app_reg.h b/mcu/custom/protocol/common/ps/custom_dmf_app_reg.h
new file mode 100644
index 0000000..401acec
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_dmf_app_reg.h
@@ -0,0 +1,96 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * custom_dmf_app_reg.h
+ *
+ * Project:
+ * --------
+ * UMOLYA
+ *
+ * Description:
+ * ------------
+ * DM Framework - Reigster needed EM/Peer/ICD and its handler function.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *
+ * ==========================================================================
+ * $Log$
+ *
+ * 01 14 2020 jack-mh.tsai
+ * [MOLY00474607] ModemºÝ¤j?Õu¦¬¶°:fix build error
+ *
+ *
+ *
+*****************************************************************************/
+
+#ifndef DMF_REG_EM
+#define DMF_REG_EM(EM_INFO, EM_MSG_ID, HDLR)
+#endif
+#ifndef DMF_REG_PEER
+#define DMF_REG_PEER(PEER_ID, HDLR)
+#endif
+#ifndef DMF_REG_ICD_EVENT
+#define DMF_REG_ICD_EVENT(ICD_EVENT_CODE, HDLR)
+#endif
+#ifndef DMF_REG_ICD_RECORD
+#define DMF_REG_ICD_RECORD(ICD_RECORD_CODE, HDLR)
+#endif
+
+//Register EM and corresponding handler function
+//DMF_REG_EM(EMM_EM_REG_EVENT_INFO, MSG_ID_EM_EMM_REG_EVENT_INFO_IND, dmf_custom_emm_em_reg_event_info_handler)
+
+//Register Peer Message and corresponding handler function
+//DMF_REG_PEER(PROTOCOL_SECTION__LTE_RRC_PCCH, dmf_info_collect_sample_handler)
+
+#ifdef __ICD_LOGGING_SUPPORT__
+//Register ICD Event and corresponding handler function
+//DMF_REG_ICD_EVENT(ICD_ENAS_ESM_OTA_EVENT, dmf_info_collect_sample_handler)
+
+//Register ICD Record and corresponding handler function
+//DMF_REG_ICD_RECORD(ICD_ENAS_OTA_MESSAGE, dmf_info_collect_sample_handler)
+
+#endif /* __ICD_LOGGING_SUPPORT__ */
+
+#undef DMF_REG_EM
+#undef DMF_REG_PEER
+#undef DMF_REG_ICD_EVENT
+#undef DMF_REG_ICD_RECORD
diff --git a/mcu/custom/protocol/common/ps/custom_dmf_kpi_app.c b/mcu/custom/protocol/common/ps/custom_dmf_kpi_app.c
new file mode 100644
index 0000000..25fa11c
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_dmf_kpi_app.c
@@ -0,0 +1,433 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ * Filename:
+ * ---------
+ * custom_dmf_kpi_app.c
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *   This file is for customized DMF APP
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by ClearCase. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Log$
+ *
+ * 08 10 2020 kunkun.shao
+ * [MOLY00536656] Modem??????:custom dmf add scg fail
+ * 	
+ * 	.
+ *
+ * 06 30 2020 kunkun.shao
+ * [MOLY00536656] Modem¶Ë´óÊý¾ÝÊÕ¼¯:scg custom part
+ * 	
+ * 	.
+ *
+ * 04 17 2020 kunkun.shao
+ * [MOLY00511342] Modem¶Ë´óÊý¾ÝÊÕ¼¯:custom part
+ *
+ * 03 16 2020 jack-mh.tsai
+ * [MOLY00505503] [Gen97] OPPO DMF KPI requirement
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by ClearCase. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifdef __DMF_SUPPORT__
+#ifdef __DMF_OP01_NW_KPI__
+
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "kal_public_defs.h"
+
+#include "em_mtf_public_struct.h"
+
+#include "dmf_public_event.h"
+#include "dmf_public_def.h"
+
+#include "protocol_section.h"
+#include "icd_logging.h"
+#include "mte_if.h"
+#include "em_msgid.h"
+#include "custom_dmf_kpi_app.h"
+#include "mtf_nvram_def.h"
+#include "nvram_interface.h"
+
+
+dmf_custom_kpi_context_struct dmf_custom_kpi_context[MAX_SIM_NUM];
+
+
+#define DMF_REG_EM(EM_INFO, EM_MSG_ID, HDLR) \
+extern void HDLR(const mte_rule_t *mte_rule, void* msg, kal_uint32 msg_size);
+
+#define DMF_REG_PEER(PEER_ID, HDLR) \
+extern void HDLR(const mte_rule_t *mte_rule, void* msg, kal_uint32 msg_size);
+
+#ifdef __ICD_LOGGING_SUPPORT__
+#define DMF_REG_ICD_EVENT(ICD_EVENT_CODE, HDLR) \
+extern void HDLR(const mte_rule_t *mte_rule, void* msg, kal_uint32 msg_size);
+
+#define DMF_REG_ICD_RECORD(ICD_RECORD_CODE, HDLR) \
+extern void HDLR(const mte_rule_t *mte_rule, void* msg, kal_uint32 msg_size);
+#endif
+
+#include "custom_dmf_kpi_app_reg.h"
+
+
+static kal_uint32 dmf_custom_kpi_needed_peer_msg_id[] = 
+{
+    0xffffffff,
+    #define DMF_REG_PEER(PEER_ID, HDLR) PEER_ID,
+        #include "custom_dmf_kpi_app_reg.h"
+};
+
+kal_bool dmf_custom_kpi_needed_peer_trace(kal_uint32 global_peer_msg_id)
+{
+    kal_uint16 i;
+    kal_uint32 size = sizeof(dmf_custom_kpi_needed_peer_msg_id) / sizeof(kal_uint32);
+
+    for (i=0; i< size; i++)
+    {
+        if (dmf_custom_kpi_needed_peer_msg_id[i] == global_peer_msg_id)
+            return KAL_TRUE;
+    }
+    return KAL_FALSE;
+}
+
+void dmf_custom_kpi_set_em_filters(mtfl4c_em_update_req_struct *em_ptr)
+{
+    #define DMF_REG_EM(EM_INFO, EM_MSG_ID, HDLR) \
+        em_ptr->info_request[EM_INFO] = EM_ON;
+        #include "custom_dmf_kpi_app_reg.h"
+}
+
+#ifdef __ICD_LOGGING_SUPPORT__
+void dmf_custom_kpi_set_icd_filters()
+{
+
+    #define DMF_REG_ICD_EVENT(ICD_EVENT_CODE, HDLR) \
+        icd_set_mtf_event_filter(KAL_TRUE, ICD_PROTOCOL_ID_1, ICD_EVENT_CODE); \
+        icd_set_mtf_event_filter(KAL_TRUE, ICD_PROTOCOL_ID_2, ICD_EVENT_CODE);
+    #define DMF_REG_ICD_RECORD(ICD_RECORD_CODE, HDLR) \
+        icd_set_mtf_record_filter(KAL_TRUE, ICD_PROTOCOL_ID_1, ICD_RECORD_CODE); \
+        icd_set_mtf_record_filter(KAL_TRUE, ICD_PROTOCOL_ID_2, ICD_RECORD_CODE);
+        #include "custom_dmf_kpi_app_reg.h"
+}
+#endif
+
+void dmf_custom_kpi_reset()
+{
+	kal_uint8 i;
+
+    for (i=0; i<MAX_SIM_NUM; i++)
+    {
+    	kal_mem_set(&dmf_custom_kpi_context[i], 0, sizeof(dmf_custom_kpi_context_struct));
+    }
+}
+
+void dmf_custom_kpi_create()
+{
+    // Register callback function thorugh MTF
+
+    /* define Info Collect static variables*/
+	kal_uint8 i;
+	
+#define DMF_REG_EM(EM_INFO, EM_MSG_ID, HDLR) \
+    static mte_rule_t EM_INFO##EM_MSG_ID##HDLR##_em_rule;
+#define DMF_REG_PEER(PEER_ID, HDLR) \
+    static mte_rule_t PEER_ID##HDLR##_peer_rule;
+#ifdef __ICD_LOGGING_SUPPORT__
+#define DMF_REG_ICD_EVENT(ICD_EVENT_CODE, HDLR) \
+    static mte_rule_t ICD_EVENT_CODE##HDLR##_icd_event_rule; \
+    static mte_rule_t ICD_EVENT_CODE##HDLR##_icd_event_rule_2;
+#define DMF_REG_ICD_RECORD(ICD_RECORD_CODE, HDLR) \
+    static mte_rule_t ICD_RECORD_CODE##HDLR##_icd_record_rule; \
+    static mte_rule_t ICD_RECORD_CODE##HDLR##_icd_record_rule_2;
+#endif
+    #include "custom_dmf_kpi_app_reg.h"
+
+/* Register InfoCollect source */
+#define DMF_REG_EM(EM_INFO, EM_MSG_ID, HDLR) \
+    EM_INFO##EM_MSG_ID##HDLR##_em_rule.fmt_id = MT_FMT_ILM; \
+    EM_INFO##EM_MSG_ID##HDLR##_em_rule.code = EM_MSG_ID; \
+    EM_INFO##EM_MSG_ID##HDLR##_em_rule.context = NULL; \
+    EM_INFO##EM_MSG_ID##HDLR##_em_rule.execute = HDLR; \
+    mt_register_mte_rule(&EM_INFO##EM_MSG_ID##HDLR##_em_rule);
+
+#define DMF_REG_PEER(PEER_ID, HDLR) \
+    PEER_ID##HDLR##_peer_rule.fmt_id = MT_FMT_PEER_TRACE; \
+    PEER_ID##HDLR##_peer_rule.code = PEER_ID; \
+    PEER_ID##HDLR##_peer_rule.context = NULL; \
+    PEER_ID##HDLR##_peer_rule.execute = HDLR; \
+    mt_register_mte_rule(&PEER_ID##HDLR##_peer_rule);
+
+#ifdef __ICD_LOGGING_SUPPORT__
+
+#define DMF_REG_ICD_EVENT(ICD_EVENT_CODE, HDLR) \
+    ICD_EVENT_CODE##HDLR##_icd_event_rule.fmt_id = MT_FMT_ICD; \
+    ICD_EVENT_CODE##HDLR##_icd_event_rule.code = GET_RULE_CODE(ICD_LOG_EVENT_T, ICD_EVENT_CODE, ICD_PROTOCOL_ID_1); \
+    ICD_EVENT_CODE##HDLR##_icd_event_rule.context = NULL; \
+    ICD_EVENT_CODE##HDLR##_icd_event_rule.execute = HDLR; \
+    mt_register_mte_rule(&ICD_EVENT_CODE##HDLR##_icd_event_rule); \
+    ICD_EVENT_CODE##HDLR##_icd_event_rule_2.fmt_id = MT_FMT_ICD; \
+    ICD_EVENT_CODE##HDLR##_icd_event_rule_2.code = GET_RULE_CODE(ICD_LOG_EVENT_T, ICD_EVENT_CODE, ICD_PROTOCOL_ID_2); \
+    ICD_EVENT_CODE##HDLR##_icd_event_rule_2.context = NULL; \
+    ICD_EVENT_CODE##HDLR##_icd_event_rule_2.execute = HDLR; \
+    mt_register_mte_rule(&ICD_EVENT_CODE##HDLR##_icd_event_rule_2); \
+
+
+#define ATT_ICD_RECORD_SRC(ICD_RECORD_CODE) \
+    ICD_RECORD_CODE##_lte_icd_record_rule.fmt_id = MT_FMT_ICD; \
+    ICD_RECORD_CODE##_lte_icd_record_rule.code = GET_RULE_CODE(ICD_LOG_RECORD_T, ICD_RECORD_CODE, ICD_PROTOCOL_ID_1); \
+    ICD_RECORD_CODE##_lte_icd_record_rule.context = NULL; \
+    ICD_RECORD_CODE##_lte_icd_record_rule.execute = HDLR; \
+    mt_register_mte_rule(&ICD_RECORD_CODE##_lte_icd_record_rule); \
+    ICD_RECORD_CODE##_lte_icd_record_rule_2.fmt_id = MT_FMT_ICD; \
+    ICD_RECORD_CODE##_lte_icd_record_rule_2.code = GET_RULE_CODE(ICD_LOG_RECORD_T, ICD_RECORD_CODE, ICD_PROTOCOL_ID_2); \
+    ICD_RECORD_CODE##_lte_icd_record_rule_2.context = NULL; \
+    ICD_RECORD_CODE##_lte_icd_record_rule_2.execute = HDLR; \
+    mt_register_mte_rule(&ICD_RECORD_CODE##_lte_icd_record_rule_2); \
+
+
+#endif /* __ICD_LOGGING_SUPPORT__ */
+    #include "custom_dmf_kpi_app_reg.h"
+
+    // reset contexts here
+    dmf_custom_kpi_reset();
+	
+	for (i=0; i<MAX_SIM_NUM; i++)
+    {
+        nvram_ef_mtf_dmf_custom_kpi_statistics_struct nvram_buf;
+	
+		nvram_external_read_data(NVRAM_EF_MTF_DMF_CUSTOM_KPI_STATISTICS_LID,
+			i+1,
+			(kal_uint8*) &nvram_buf,
+			NVRAM_EF_MTF_DMF_CUSTOM_KPI_STATISTICS_SIZE);
+		dmf_custom_kpi_context[i].eps_attach_req_snd_cnt = nvram_buf.lte_attach_req_cnt;
+		dmf_custom_kpi_context[i].eps_attach_succ_cnt = nvram_buf.lte_attach_succ_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause2_cnt = nvram_buf.lte_attach_fail_with_cause2_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause3_cnt = nvram_buf.lte_attach_fail_with_cause3_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause6_cnt = nvram_buf.lte_attach_fail_with_cause6_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause7_cnt = nvram_buf.lte_attach_fail_with_cause7_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause8_cnt = nvram_buf.lte_attach_fail_with_cause8_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause11_cnt = nvram_buf.lte_attach_fail_with_cause11_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause12_cnt = nvram_buf.lte_attach_fail_with_cause12_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause13_cnt = nvram_buf.lte_attach_fail_with_cause13_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause14_cnt = nvram_buf.lte_attach_fail_with_cause14_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause15_cnt = nvram_buf.lte_attach_fail_with_cause15_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause16_cnt = nvram_buf.lte_attach_fail_with_cause16_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause17_cnt = nvram_buf.lte_attach_fail_with_cause17_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause18_cnt = nvram_buf.lte_attach_fail_with_cause18_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause22_cnt = nvram_buf.lte_attach_fail_with_cause22_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause25_cnt = nvram_buf.lte_attach_fail_with_cause25_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause35_cnt = nvram_buf.lte_attach_fail_with_cause35_cnt;
+		dmf_custom_kpi_context[i].eps_attach_fail_with_cause42_cnt = nvram_buf.lte_attach_fail_with_cause42_cnt;
+		dmf_custom_kpi_context[i].act_default_bearer_req_rcv_cnt = nvram_buf.act_default_eps_bearer_req_cnt;
+		dmf_custom_kpi_context[i].act_default_bearer_accept_sent_cnt = nvram_buf.act_default_eps_bearer_accept_cnt;
+		dmf_custom_kpi_context[i].act_default_bearer_reject_sent_cnt = nvram_buf.act_default_eps_bearer_reject_cnt;
+		dmf_custom_kpi_context[i].srvcc_ho_req_rcv_cnt = nvram_buf.srvcc_ho_req_cnt;
+		dmf_custom_kpi_context[i].srvcc_ho_succ_sent_cnt = nvram_buf.srvcc_ho_succ_cnt;
+		dmf_custom_kpi_context[i].srvcc_ho_fail_cnt = nvram_buf.srvcc_ho_fail_cnt;
+		dmf_custom_kpi_context[i].initial_reg_req_cnt = nvram_buf.initial_ims_reg_req_cnt;
+		dmf_custom_kpi_context[i].initial_reg_req_with_401_rsp_cnt = nvram_buf.initial_ims_reg_req_with_401_rsp_cnt;
+        dmf_custom_kpi_context[i].initial_reg_req_with_auc_cnt = nvram_buf.initial_ims_reg_req_with_auc_cnt;
+	    dmf_custom_kpi_context[i].initial_reg_success_cnt = nvram_buf.initial_ims_reg_success_cnt;
+		dmf_custom_kpi_context[i].initial_rsp_cnt = nvram_buf.initial_volte_call_rsp_cnt;
+	    dmf_custom_kpi_context[i].final_rsp_cnt = nvram_buf.final_volte_call_rsp_cnt;
+	    dmf_custom_kpi_context[i].initial_call_drop_cnt = nvram_buf.initial_volte_call_drop_cnt;
+	    dmf_custom_kpi_context[i].final_call_drop_cnt = nvram_buf.final_volte_call_drop_cnt;
+		dmf_custom_kpi_context[i].mo_call_req_cnt = nvram_buf.initial_mo_volte_call_req_cnt;
+		dmf_custom_kpi_context[i].mo_call_connect_to_nw_cnt = nvram_buf.initial_mo_volte_call_connect_to_nw_cnt;
+		dmf_custom_kpi_context[i].mo_call_early_release_cnt = nvram_buf.mo_volte_call_early_release_cnt;
+		dmf_custom_kpi_context[i].mo_call_with_403_cnt = nvram_buf.mo_volte_call_with_403_cnt;
+		dmf_custom_kpi_context[i].mo_call_with_486_cnt = nvram_buf.mo_volte_call_with_486_cnt; 
+		dmf_custom_kpi_context[i].mo_call_with_480_cnt = nvram_buf.mo_volte_call_with_480_cnt;
+		dmf_custom_kpi_context[i].mo_call_with_484_cnt = nvram_buf.mo_volte_call_with_484_cnt;
+		dmf_custom_kpi_context[i].mo_call_with_600_cnt = nvram_buf.mo_volte_call_with_600_cnt;
+		dmf_custom_kpi_context[i].mo_call_with_604_cnt = nvram_buf.mo_volte_call_with_604_cnt;
+		dmf_custom_kpi_context[i].mo_call_with_487_cnt = nvram_buf.mo_volte_call_with_487_cnt;
+		dmf_custom_kpi_context[i].mt_call_req_cnt = nvram_buf.initial_mt_volte_call_req_cnt;
+		dmf_custom_kpi_context[i].mt_call_connect_success_cnt = nvram_buf.mt_volte_call_connect_success_cnt;
+		dmf_custom_kpi_context[i].mt_call_early_release_cnt = nvram_buf.mt_volte_call_early_release_cnt;
+		dmf_custom_kpi_context[i].mt_call_with_486_cnt = nvram_buf.mt_volte_call_with_486_cnt;
+		dmf_custom_kpi_context[i].mt_call_with_403_cnt = nvram_buf.mt_volte_call_with_403_cnt;
+		dmf_custom_kpi_context[i].mt_call_with_480_cnt = nvram_buf.mt_volte_call_with_480_cnt;
+		dmf_custom_kpi_context[i].mt_call_with_484_cnt = nvram_buf.mt_volte_call_with_484_cnt;
+		dmf_custom_kpi_context[i].mt_call_with_600_cnt = nvram_buf.mt_volte_call_with_600_cnt;
+		dmf_custom_kpi_context[i].mt_call_with_604_cnt = nvram_buf.mt_volte_call_with_604_cnt;
+		dmf_custom_kpi_context[i].mt_call_with_487_cnt = nvram_buf.mt_volte_call_with_487_cnt;
+		dmf_custom_kpi_context[i].tau_req_snd_cnt = nvram_buf.tau_req_snd_cnt;
+		dmf_custom_kpi_context[i].tau_succ_cnt = nvram_buf.tau_succ_cnt;
+		dmf_custom_kpi_context[i].tau_fail_with_cause3_cnt = nvram_buf.tau_fail_with_cause3_cnt;
+		dmf_custom_kpi_context[i].tau_fail_with_cause6_cnt = nvram_buf.tau_fail_with_cause6_cnt;
+		dmf_custom_kpi_context[i].tau_fail_with_cause7_cnt = nvram_buf.tau_fail_with_cause7_cnt;
+		dmf_custom_kpi_context[i].tau_fail_with_cause8_cnt = nvram_buf.tau_fail_with_cause8_cnt;
+		dmf_custom_kpi_context[i].tau_fail_with_cause9_cnt = nvram_buf.tau_fail_with_cause9_cnt;
+		dmf_custom_kpi_context[i].tau_fail_with_cause10_cnt = nvram_buf.tau_fail_with_cause10_cnt;
+		dmf_custom_kpi_context[i].tau_fail_with_cause11_cnt = nvram_buf.tau_fail_with_cause11_cnt;
+		dmf_custom_kpi_context[i].tau_fail_with_cause12_cnt = nvram_buf.tau_fail_with_cause12_cnt;
+		dmf_custom_kpi_context[i].tau_fail_with_cause13_cnt = nvram_buf.tau_fail_with_cause13_cnt;
+		dmf_custom_kpi_context[i].tau_fail_with_cause14_cnt = nvram_buf.tau_fail_with_cause14_cnt;
+		dmf_custom_kpi_context[i].tau_fail_with_cause15_cnt = nvram_buf.tau_fail_with_cause15_cnt;
+		dmf_custom_kpi_context[i].tau_fail_with_cause22_cnt = nvram_buf.tau_fail_with_cause22_cnt;
+		dmf_custom_kpi_context[i].tau_fail_with_cause25_cnt = nvram_buf.tau_fail_with_cause25_cnt;
+		dmf_custom_kpi_context[i].tau_fail_with_cause35_cnt = nvram_buf.tau_fail_with_cause35_cnt;
+		dmf_custom_kpi_context[i].tau_fail_with_cause40_cnt = nvram_buf.tau_fail_with_cause40_cnt;
+		dmf_custom_kpi_context[i].tau_fail_with_cause42_cnt = nvram_buf.tau_fail_with_cause42_cnt;
+		dmf_custom_kpi_context[i].mo_csfb_ext_sr_req_snd_cnt = nvram_buf.mo_csfb_ext_sr_req_snd_cnt;
+		dmf_custom_kpi_context[i].mo_csfb_succ_cnt = nvram_buf.mo_csfb_succ_cnt;
+		dmf_custom_kpi_context[i].mo_csfb_fail_cnt = nvram_buf.mo_csfb_fail_cnt;
+		dmf_custom_kpi_context[i].mt_csfb_cs_paging_rcv_cnt = nvram_buf.mt_csfb_cs_paging_rcv_cnt;
+		dmf_custom_kpi_context[i].mt_csfb_cs_service_notification_rcv_cnt = nvram_buf.mt_csfb_cs_service_notification_rcv_cnt;
+		dmf_custom_kpi_context[i].mt_csfb_succ_cnt = nvram_buf.mt_csfb_succ_cnt;
+		dmf_custom_kpi_context[i].mt_csfb_fail_cnt = nvram_buf.mt_csfb_fail_cnt;
+		dmf_custom_kpi_context[i].sms_over_sgs_mo_sms_start_cnt = nvram_buf.sms_over_sgs_mo_sms_start_cnt;
+		dmf_custom_kpi_context[i].sms_over_sgs_mo_sms_succ_cnt = nvram_buf.sms_over_sgs_mo_sms_succ_cnt;
+		dmf_custom_kpi_context[i].sms_over_sgs_mo_sms_fail_cnt = nvram_buf.sms_over_sgs_mo_sms_fail_cnt;
+		dmf_custom_kpi_context[i].sms_over_sgs_mt_sms_start_cnt = nvram_buf.sms_over_sgs_mt_sms_start_cnt;
+		dmf_custom_kpi_context[i].sms_over_sgs_mt_sms_succ_cnt = nvram_buf.sms_over_sgs_mt_sms_succ_cnt;
+		dmf_custom_kpi_context[i].sms_over_sgs_mt_sms_fail_cnt = nvram_buf.sms_over_sgs_mt_sms_fail_cnt;
+		dmf_custom_kpi_context[i].sms_over_ims_mo_sms_start_cnt = nvram_buf.sms_over_ims_mo_sms_start_cnt;
+		dmf_custom_kpi_context[i].sms_over_ims_mo_sms_succ_cnt = nvram_buf.sms_over_ims_mo_sms_succ_cnt;
+		dmf_custom_kpi_context[i].sms_over_ims_mo_sms_fail_cnt = nvram_buf.sms_over_ims_mo_sms_fail_cnt;
+		dmf_custom_kpi_context[i].sms_over_ims_mt_sms_start_cnt = nvram_buf.sms_over_ims_mt_sms_start_cnt;
+		dmf_custom_kpi_context[i].sms_over_ims_mt_sms_succ_cnt = nvram_buf.sms_over_ims_mt_sms_succ_cnt;
+		dmf_custom_kpi_context[i].sms_over_ims_mt_sms_fail_cnt = nvram_buf.sms_over_ims_mt_sms_fail_cnt;
+		dmf_custom_kpi_context[i].add_scg_req_cnt = nvram_buf.add_scg_req_cnt;
+		dmf_custom_kpi_context[i].add_scg_succ_cnt = nvram_buf.add_scg_succ_cnt;
+		dmf_custom_kpi_context[i].add_scg_fail_cnt = nvram_buf.add_scg_fail_cnt;
+    }
+}
+
+
+
+void dmf_custom_kpi_clean_context(void)
+{
+    memset(&dmf_custom_kpi_context, 0, MAX_SIM_NUM*sizeof(dmf_custom_kpi_context));
+}
+
+
+
+
+
+void dmf_custom_kpi_event_hdlr(dmf_event_struct *event)
+{
+
+    // handle event broadcasted by DMF InfoCollector in this function
+    if (event->event_id == DMF_EVENT_CMCC_EPS_ATTACH_INFO)
+    {
+        dmf_custom_kpi_event_cmcc_eps_attach_info_handler(event);
+    }
+	if(event->event_id == DMF_EVENT_CMCC_ESM_ACT_DEFAULT_BEARER_INFO)
+	{
+		dmf_custom_kpi_event_cmcc_eps_bearer_info_handler(event);
+	}
+	if(event->event_id == DMF_EVENT_CMCC_ERRC_SUCC_RATE_KPI_INFO)
+	{
+		dmf_custom_kpi_event_cmcc_succ_rate_kpi_info_handler(event);
+	}
+	if(event->event_id == DMF_EVENT_CMCC_ERRC_MFROM_INFO)
+	{
+		dmf_custom_kpi_event_cmcc_errc_mfrom_info_handler(event);
+	}
+	if(event->event_id == DMF_EVENT_CMCC_ERRC_SRVCC_FAIL_INFO)
+	{
+		dmf_custom_kpi_event_cmcc_errc_srvcc_fail_info_handler(event);
+	}
+	if(event->event_id == DMF_EVENT_CMCC_IMS_REG_INFO)
+	{
+		dmf_custom_kpi_event_cmcc_ims_reg_info_handler(event);
+	}
+	if(event->event_id == DMF_EVENT_CMCC_VOLTE_CALL_DROP_INFO)
+	{
+		dmf_custom_kpi_event_cmcc_volte_call_drop_info_handler(event);
+	}
+	if(event->event_id == DMF_EVENT_CMCC_MO_VOLTE_CALL_INFO)
+	{
+		dmf_custom_kpi_event_cmcc_mo_volte_call_info_handler(event);
+	}
+	if(event->event_id == DMF_EVENT_CMCC_MT_VOLTE_CALL_INFO)
+	{
+		dmf_custom_kpi_event_cmcc_mt_volte_call_info_handler(event);
+	}
+	if(event->event_id == DMF_EVENT_CMCC_TAU_INFO)
+	{
+		dmf_custom_kpi_event_cmcc_tau_info_handler(event);
+	}
+	if(event->event_id == DMF_EVENT_CMCC_MO_CSFB_INFO)
+	{
+		dmf_custom_kpi_event_cmcc_mo_csfb_info_handler(event);
+	}
+	if(event->event_id == DMF_EVENT_CMCC_MT_CSFB_INFO)
+	{
+		dmf_custom_kpi_event_cmcc_mt_csfb_info_handler(event);
+	}
+	if(event->event_id == DMF_EVENT_CMCC_MO_SMS_OVER_SGS_INFO)
+	{
+		dmf_custom_kpi_event_cmcc_mo_sms_over_sgs_info_handler(event);
+	}
+	if(event->event_id == DMF_EVENT_CMCC_MT_SMS_OVER_SGS_INFO)
+	{
+		dmf_custom_kpi_event_cmcc_mt_sms_over_sgs_info_handler(event);
+	}
+	if(event->event_id == DMF_EVENT_CMCC_MO_SMS_OVER_IMS_INFO)
+	{
+		dmf_custom_kpi_event_cmcc_mo_sms_over_ims_info_handler(event);
+	}
+	if(event->event_id == DMF_EVENT_CMCC_MT_SMS_OVER_IMS_INFO)
+	{
+		dmf_custom_kpi_event_cmcc_mt_sms_over_ims_info_handler(event);
+	}
+	if(event->event_id == DMF_EVENT_SCG_RECONFIGURATION_INFO)
+	{
+		dmf_custom_kpi_event_cmcc_add_scg_info_handler(event);
+	}
+}
+
+#endif
+#endif
+
diff --git a/mcu/custom/protocol/common/ps/custom_dmf_kpi_app.h b/mcu/custom/protocol/common/ps/custom_dmf_kpi_app.h
new file mode 100644
index 0000000..c9bf071
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_dmf_kpi_app.h
@@ -0,0 +1,307 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   custom_dmf_kpi_app.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This file provides the custom DMF APP related definition
+ *
+ * Author:
+ * -------
+ *   
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef CUSTOM_DMF_KPI_APP_H
+#define CUSTOM_DMF_KPI_APP_H
+
+#include "kal_general_types.h"
+#include "em_mtf_public_struct.h"
+#include "atp_dmf_struct.h"
+#include "atp_public_defs.h"
+#include "dmf_public_def.h"
+#include "dmf_public_event.h"
+
+
+
+typedef struct 
+ {
+
+    //for lte attach
+	kal_uint32 eps_attach_req_snd_cnt;
+	kal_uint32 eps_attach_succ_cnt;
+    kal_uint32 eps_attach_fail_with_cause2_cnt;
+	kal_uint32 eps_attach_fail_with_cause3_cnt;
+	kal_uint32 eps_attach_fail_with_cause6_cnt;
+	kal_uint32 eps_attach_fail_with_cause7_cnt;
+	kal_uint32 eps_attach_fail_with_cause8_cnt;
+	kal_uint32 eps_attach_fail_with_cause11_cnt;
+	kal_uint32 eps_attach_fail_with_cause12_cnt;
+	kal_uint32 eps_attach_fail_with_cause13_cnt;
+	kal_uint32 eps_attach_fail_with_cause14_cnt;
+	kal_uint32 eps_attach_fail_with_cause15_cnt;
+	kal_uint32 eps_attach_fail_with_cause16_cnt;
+	kal_uint32 eps_attach_fail_with_cause17_cnt;
+	kal_uint32 eps_attach_fail_with_cause18_cnt;
+	kal_uint32 eps_attach_fail_with_cause22_cnt;
+	kal_uint32 eps_attach_fail_with_cause25_cnt;
+	kal_uint32 eps_attach_fail_with_cause35_cnt;
+	kal_uint32 eps_attach_fail_with_cause42_cnt;
+	//for default_eps_bearer_activation
+	kal_uint32 act_default_bearer_req_rcv_cnt;
+	kal_uint32 act_default_bearer_accept_sent_cnt;
+	kal_uint32 act_default_bearer_reject_sent_cnt;
+	//for esrvcc
+	kal_uint32 srvcc_ho_req_rcv_cnt;
+	kal_uint32 srvcc_ho_succ_sent_cnt;
+    kal_uint32 srvcc_ho_fail_cnt;
+	//for ims reg
+	kal_uint32 initial_reg_req_cnt;
+	kal_uint32 initial_reg_req_with_401_rsp_cnt;
+	kal_uint32 initial_reg_req_with_auc_cnt;
+	kal_uint32 initial_reg_success_cnt;
+	//for volte call drop
+	kal_uint32 initial_rsp_cnt;
+	kal_uint32 final_rsp_cnt;
+	kal_uint32 initial_call_drop_cnt;
+	kal_uint32 final_call_drop_cnt;
+	//for mo volte call
+	kal_uint32 mo_call_req_cnt;
+	kal_uint32 mo_call_connect_to_nw_cnt;
+	kal_uint32 mo_call_early_release_cnt;
+	kal_uint32 mo_call_with_403_cnt;
+	kal_uint32 mo_call_with_486_cnt; 
+	kal_uint32 mo_call_with_480_cnt;
+	kal_uint32 mo_call_with_484_cnt;
+	kal_uint32 mo_call_with_600_cnt;
+	kal_uint32 mo_call_with_604_cnt;
+	kal_uint32 mo_call_with_487_cnt;
+	//for mt volte call
+	kal_uint32 mt_call_req_cnt;
+	kal_uint32 mt_call_connect_success_cnt;
+	kal_uint32 mt_call_early_release_cnt;
+	kal_uint32 mt_call_with_486_cnt;
+	kal_uint32 mt_call_with_403_cnt;
+	kal_uint32 mt_call_with_480_cnt;
+	kal_uint32 mt_call_with_484_cnt;
+	kal_uint32 mt_call_with_600_cnt;
+	kal_uint32 mt_call_with_604_cnt;
+	kal_uint32 mt_call_with_487_cnt;
+	//for tau
+	kal_uint32 tau_req_snd_cnt;
+	kal_uint32 tau_succ_cnt;
+	kal_uint32 tau_fail_with_cause3_cnt;
+    kal_uint32 tau_fail_with_cause6_cnt;
+	kal_uint32 tau_fail_with_cause7_cnt;
+    kal_uint32 tau_fail_with_cause8_cnt;
+	kal_uint32 tau_fail_with_cause9_cnt;
+    kal_uint32 tau_fail_with_cause10_cnt;
+	kal_uint32 tau_fail_with_cause11_cnt;
+    kal_uint32 tau_fail_with_cause12_cnt;
+	kal_uint32 tau_fail_with_cause13_cnt;
+	kal_uint32 tau_fail_with_cause14_cnt;
+    kal_uint32 tau_fail_with_cause15_cnt;
+	kal_uint32 tau_fail_with_cause22_cnt;
+	kal_uint32 tau_fail_with_cause25_cnt;
+	kal_uint32 tau_fail_with_cause35_cnt;
+    kal_uint32 tau_fail_with_cause40_cnt;
+	kal_uint32 tau_fail_with_cause42_cnt;
+	//for mo csfb 
+	kal_uint32 mo_csfb_ext_sr_req_snd_cnt;
+	kal_uint32 mo_csfb_succ_cnt;
+	kal_uint32 mo_csfb_fail_cnt;
+
+	kal_uint32 mt_csfb_cs_service_notification_rcv_cnt;
+	kal_uint32 mt_csfb_cs_paging_rcv_cnt;
+	kal_uint32 mt_csfb_succ_cnt;
+	kal_uint32 mt_csfb_fail_cnt;
+
+	kal_uint32 sms_over_sgs_mo_sms_start_cnt;
+	kal_uint32 sms_over_sgs_mo_sms_succ_cnt;
+	kal_uint32 sms_over_sgs_mo_sms_fail_cnt;
+	kal_uint32 sms_over_sgs_mt_sms_start_cnt;
+	kal_uint32 sms_over_sgs_mt_sms_succ_cnt;
+	kal_uint32 sms_over_sgs_mt_sms_fail_cnt;
+	kal_uint32 sms_over_ims_mo_sms_start_cnt;
+	kal_uint32 sms_over_ims_mo_sms_succ_cnt;
+	kal_uint32 sms_over_ims_mo_sms_fail_cnt;
+	kal_uint32 sms_over_ims_mt_sms_start_cnt;
+	kal_uint32 sms_over_ims_mt_sms_succ_cnt;
+	kal_uint32 sms_over_ims_mt_sms_fail_cnt;
+	kal_uint32 add_scg_req_cnt;
+	kal_uint32 add_scg_succ_cnt;
+	kal_uint32 add_scg_fail_cnt;
+	kal_bool   srvcc_ho_flag;
+	kal_uint8 num_of_custom_kpi_nvram_write;
+ } dmf_custom_kpi_context_struct;
+
+extern dmf_custom_kpi_context_struct dmf_custom_kpi_context[MAX_SIM_NUM]; 
+
+extern void dmf_custom_kpi_clean_context(void);
+extern void dmf_custom_kpi_event_hdlr(dmf_event_struct *event);
+extern void dmf_custom_kpi_at_query_lte_attach_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id);
+extern void dmf_custom_kpi_at_query_act_default_eps_bearer_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id);
+extern void dmf_custom_kpi_at_query_srvcc_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id);
+extern void dmf_custom_kpi_at_query_ims_reg_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id);
+extern void dmf_custom_kpi_at_query_volte_call_drop_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id);
+extern void dmf_custom_kpi_at_query_mo_volte_call_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id);
+extern void dmf_custom_kpi_at_query_mt_volte_call_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id);
+extern void dmf_custom_kpi_at_query_tau_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id);
+extern void dmf_custom_kpi_at_query_mo_csfb_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id);
+extern void dmf_custom_kpi_at_query_mt_csfb_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id);
+extern void dmf_custom_kpi_at_query_mo_sms_over_sgs_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id);
+extern void dmf_custom_kpi_at_query_mt_sms_over_sgs_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id);
+extern void dmf_custom_kpi_at_query_mo_sms_over_ims_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id);
+extern void dmf_custom_kpi_at_query_mt_sms_over_ims_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id);
+extern void dmf_custom_kpi_event_cmcc_eps_attach_info_handler(dmf_event_struct *event);
+extern void dmf_custom_kpi_event_cmcc_eps_bearer_info_handler(dmf_event_struct *event);
+extern void dmf_custom_kpi_event_cmcc_succ_rate_kpi_info_handler(dmf_event_struct *event);
+extern void dmf_custom_kpi_event_cmcc_errc_mfrom_info_handler(dmf_event_struct *event);
+extern void dmf_custom_kpi_event_cmcc_errc_srvcc_fail_info_handler(dmf_event_struct *event);
+extern void dmf_custom_kpi_event_cmcc_ims_reg_info_handler(dmf_event_struct *event);
+extern void dmf_custom_kpi_event_cmcc_volte_call_drop_info_handler(dmf_event_struct *event);
+extern void dmf_custom_kpi_event_cmcc_mo_volte_call_info_handler(dmf_event_struct *event);
+extern void dmf_custom_kpi_event_cmcc_mt_volte_call_info_handler(dmf_event_struct *event);
+extern void dmf_custom_kpi_event_cmcc_tau_info_handler(dmf_event_struct *event);
+extern void dmf_custom_kpi_event_cmcc_mo_csfb_info_handler(dmf_event_struct *event);
+extern void dmf_custom_kpi_event_cmcc_mt_csfb_info_handler(dmf_event_struct *event);
+extern void dmf_custom_kpi_event_cmcc_mo_sms_over_sgs_info_handler(dmf_event_struct *event);
+extern void dmf_custom_kpi_event_cmcc_mt_sms_over_sgs_info_handler(dmf_event_struct *event);
+extern void dmf_custom_kpi_event_cmcc_mo_sms_over_ims_info_handler(dmf_event_struct *event);
+extern void dmf_custom_kpi_event_cmcc_mt_sms_over_ims_info_handler(dmf_event_struct *event);
+extern void dmf_custom_kpi_event_cmcc_add_scg_info_handler(dmf_event_struct *event);
+
+extern void dmf_custom_kpi_eps_attach_statistics_update(protocol_id_enum ps_id,dmf_cmcc_eps_attach_event_enum attach_event,kal_uint32 attach_reject_cause);
+extern void dmf_custom_kpi_act_default_eps_bearer_statistics_update(protocol_id_enum ps_id,dmf_cmcc_esm_eps_bearer_event_enum esm_eps_bearer_event);
+extern void dmf_custom_kpi_srvcc_statistics_update(protocol_id_enum ps_id,dmf_cmcc_srvcc_event_enum event);
+extern void dmf_custom_kpi_ims_reg_statistics_update(protocol_id_enum ps_id,kal_uint32 event_id);
+extern void dmf_custom_kpi_volte_call_drop_statistics_update(protocol_id_enum ps_id,kal_uint32 event_id);
+extern void dmf_custom_kpi_mo_volte_call_statistics_update(protocol_id_enum ps_id,dmf_event_cmcc_imc_ims_struct *mo_volte_call_info);
+extern void dmf_custom_kpi_mt_volte_call_statistics_update(protocol_id_enum ps_id,dmf_event_cmcc_imc_ims_struct *mo_volte_call_info);
+extern void dmf_custom_kpi_tau_statistics_update(protocol_id_enum ps_id,dmf_cmcc_tau_event_enum tau_event,kal_uint32 tau_reject_cause);
+extern void dmf_custom_kpi_mo_csfb_statistics_update(protocol_id_enum ps_id,dmf_cmcc_csfb_call_event_enum call_event,kal_uint16 fail_cause);
+extern void dmf_custom_kpi_mt_csfb_statistics_update(protocol_id_enum ps_id,dmf_cmcc_csfb_call_event_enum call_event,kal_uint16 fail_cause);
+extern void dmf_custom_kpi_mo_sms_over_sgs_statistics_update(protocol_id_enum ps_id,dmf_cmcc_sms_event_enum sms_event,kal_uint32 fail_cause);
+extern void dmf_custom_kpi_mt_sms_over_sgs_statistics_update(protocol_id_enum ps_id,dmf_cmcc_sms_event_enum sms_event,kal_uint32 fail_cause);
+extern void dmf_custom_kpi_mo_sms_over_ims_statistics_update(protocol_id_enum ps_id,dmf_cmcc_sms_event_enum sms_event,kal_uint32 fail_cause);
+extern void dmf_custom_kpi_mt_sms_over_ims_statistics_update(protocol_id_enum ps_id,dmf_cmcc_sms_event_enum sms_event,kal_uint32 fail_cause);
+extern void dmf_custom_kpi_add_scg_statistics_update(protocol_id_enum ps_id,dmf_cmcc_add_scg_event_enum scg_event,kal_uint8 fail_cause);
+
+extern void dmf_custom_kpi_eps_attach_max_count_report(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_act_default_eps_bearer_max_count_report(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_srvcc_max_count_report(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_ims_reg_max_count_report(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_volte_call_drop_max_count_report(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_mo_volte_call_max_count_report(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_mt_volte_call_max_count_report(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_tau_max_count_report(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_mo_csfb_max_count_report(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_mt_csfb_max_count_report(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_mo_sms_over_sgs_max_count_report(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_mt_sms_over_sgs_max_count_report(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_mo_sms_over_ims_max_count_report(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_mt_sms_over_ims_max_count_report(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_add_scg_max_count_report(protocol_id_enum ps_id);
+
+extern void dmf_custom_kpi_reset_lte_attach_info_handler(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_reset_act_default_eps_bearer_info_handler(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_reset_srvcc_info_handler(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_reset_ims_reg_info_handler(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_reset_volte_call_drop_info_handler(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_reset_mo_volte_call_info_handler(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_reset_mt_volte_call_info_handler(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_reset_tau_info_handler(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_reset_mo_csfb_info_handler(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_reset_mt_csfb_info_handler(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_reset_mo_sms_over_sgs_info_handler(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_reset_mt_sms_over_sgs_info_handler(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_reset_mo_sms_over_ims_info_handler(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_reset_mt_sms_over_ims_info_handler(protocol_id_enum ps_id);
+extern void dmf_custom_kpi_reset_add_scg_info_handler(protocol_id_enum ps_id);
+
+extern void dmf_custom_kpi_update_statistics_to_nvram(protocol_id_enum ps_id);
+extern kal_bool dmf_custom_kpi_needed_peer_trace(kal_uint32 global_peer_msg_id);
+extern void dmf_custom_kpi_set_em_filters(mtfl4c_em_update_req_struct *em_ptr);
+extern void dmf_custom_kpi_set_icd_filters();
+extern void dmf_custom_kpi_reset();
+extern void dmf_custom_kpi_create();
+extern void dmf_custom_kpi_handler(protocol_id_enum ps_id,atp_mt_dmf_cmd_req_struct *req_struct);
+extern void dmf_custom_kpi_at_query_handler(kal_uint16 ch_id, protocol_id_enum ps_id, kal_uint32 kpi_id);
+extern void dmf_custom_nr_kpi_handler(protocol_id_enum ps_id,atp_mt_dmf_cmd_req_struct *req_struct);
+extern void dmf_custom_nr_kpi_at_query_handler(kal_uint16 ch_id, protocol_id_enum ps_id, kal_uint32 kpi_id);
+
+extern kal_bool dmf_custom_kpi_at_req_handler(atp_mt_dmf_cmd_req_struct *req_struct,protocol_id_enum ps_id);
+extern void dmf_custom_kpi_nvram_write_cnf_hdlr();
+
+
+
+#endif /* CUSTOM_EM_H */
diff --git a/mcu/custom/protocol/common/ps/custom_dmf_kpi_app_cmd.h b/mcu/custom/protocol/common/ps/custom_dmf_kpi_app_cmd.h
new file mode 100644
index 0000000..7f7c665
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_dmf_kpi_app_cmd.h
@@ -0,0 +1,439 @@
+#ifndef DMF_APP
+#define DMF_APP(APP_ID)
+#endif
+
+#ifndef DMF_APP_END
+#define DMF_APP_END
+#endif
+
+#ifndef DMF_CMD_REQ
+#define DMF_CMD_REQ(STRUCT_NAME, PARA_NAME)
+#endif
+
+#ifndef DMF_CMD_REQ_END
+#define DMF_CMD_REQ_END(STRUCT_NAME)
+#endif
+
+#ifndef DMF_CMD_CNF
+#define DMF_CMD_CNF(CNF_TYPE, STRUCT_NAME, PARA_NAME)
+#endif
+
+#ifndef DMF_CMD_CNF_END
+#define DMF_CMD_CNF_END(STRUCT_NAME)
+#endif
+
+#ifndef DMF_URC_IND
+#define DMF_URC_IND(IND_TYPE, STRUCT_NAME, PARA_NAME)
+#endif
+
+#ifndef DMF_URC_IND_END
+#define DMF_URC_IND_END(STRUCT_NAME)
+#endif
+
+#ifndef DMF_FIELD_VAR
+#define DMF_FIELD_VAR(VAR_TYPE, VAR_NAME, MAX_VAL)
+#endif
+
+#ifndef DMF_FIELD_VAR_O
+#define DMF_FIELD_VAR_O(VAR_TYPE, VAR_NAME, MAX_VAL)
+#endif
+
+
+#ifndef DMF_FIELD_VAR_ARRAY
+#define DMF_FIELD_VAR_ARRAY(VAR_TYPE, VAR_NAME, LENGTH)
+#endif
+
+#ifndef DMF_FIELD_STRING
+#define DMF_FIELD_STRING(STR_NAME, LENGTH)
+#endif
+
+
+#if !defined(DMF_CMD_REQ_SEC) && !defined(DMF_CMD_CNF_SEC) && !defined(DMF_URC_IND_SEC)
+#define DMF_CMD_REQ_SEC
+#define DMF_CMD_CNF_SEC
+#define DMF_URC_IND_SEC
+#endif
+
+#define UNUSED_FIELD    0
+
+
+/*Define structures*/
+#ifdef __DMF_OP01_NW_KPI__
+DMF_APP(DMF_CUST_KPI_APP_ID)
+
+
+	#ifdef DMF_CMD_REQ_SEC
+		DMF_CMD_REQ(dmf_custom_kpi_app_cmd_req_struct, custom_kpi_app_cmd_req)
+			DMF_FIELD_VAR(kal_uint32, urc_query, 2000)
+			DMF_FIELD_VAR(kal_uint32, group_id, 2000)
+			DMF_FIELD_VAR(kal_uint32, kpi_id, 2000)
+		DMF_CMD_REQ_END(dmf_custom_kpi_app_cmd_req_struct)
+    #endif 
+
+
+
+
+	#ifdef DMF_URC_IND_SEC
+	    DMF_URC_IND(DMF_CUSTOM_KPI_LTE_ATTACH_MAX_COUNT_URC_IND, dmf_custom_kpi_lte_attach_max_count_urc_ind_struct, custom_kpi_lte_attach_max_count_urc_ind)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_req_snd_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_succ_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause2_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause3_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause6_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause7_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause8_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause11_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause12_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause13_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause14_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause15_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause16_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause17_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause18_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause22_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause25_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause35_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, eps_attach_fail_with_cause42_cnt, UNUSED_FIELD)
+		DMF_URC_IND_END(dmf_custom_kpi_lte_attach_max_count_urc_ind_struct)
+
+		DMF_URC_IND(DMF_CUSTOM_KPI_EPS_BEARER_MAX_COUNT_URC_IND, dmf_custom_kpi_eps_bearer_max_count_urc_ind_struct, custom_kpi_eps_bearer_max_count_urc_ind)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, act_default_bearer_req_rcv_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, act_default_bearer_accept_sent_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, act_default_bearer_reject_sent_cnt, UNUSED_FIELD)
+        DMF_URC_IND_END(dmf_custom_kpi_eps_bearer_max_count_urc_ind_struct) 
+
+		DMF_URC_IND(DMF_CUSTOM_KPI_SRVCC_MAX_COUNT_URC_IND, dmf_custom_kpi_srvcc_max_count_urc_ind_struct, custom_kpi_srvcc_max_count_urc_ind)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, srvcc_ho_req_rcv_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, srvcc_ho_succ_sent_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, srvcc_ho_fail_cnt, UNUSED_FIELD)	
+        DMF_URC_IND_END(dmf_custom_kpi_srvcc_max_count_urc_ind_struct) 
+
+		DMF_URC_IND(DMF_CUSTOM_KPI_IMS_REG_MAX_COUNT_URC_IND, dmf_custom_kpi_ims_reg_max_count_urc_ind_struct, custom_kpi_ims_reg_max_count_urc_ind)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, initial_reg_req_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, initial_reg_req_with_401_rsp_cnt, UNUSED_FIELD)	
+            DMF_FIELD_VAR(kal_uint32, initial_reg_req_with_auc_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, initial_reg_success_cnt,UNUSED_FIELD)
+        DMF_URC_IND_END(dmf_custom_kpi_ims_reg_max_count_urc_ind_struct)
+
+		DMF_URC_IND(DMF_CUSTOM_KPI_VOLTE_CALL_DROP_MAX_COUNT_URC_IND, dmf_custom_kpi_volte_call_drop_max_count_urc_ind_struct, custom_kpi_volte_call_drop_max_count_urc_ind)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, initial_rsp_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, final_rsp_cnt, UNUSED_FIELD)	
+            DMF_FIELD_VAR(kal_uint32, initial_call_drop_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, final_call_drop_cnt, UNUSED_FIELD)
+        DMF_URC_IND_END(dmf_custom_kpi_volte_call_drop_max_count_urc_ind_struct) 
+
+		DMF_URC_IND(DMF_CUSTOM_KPI_MO_VOLTE_CALL_MAX_COUNT_URC_IND, dmf_custom_kpi_mo_volte_call_max_count_urc_ind_struct, custom_kpi_mo_volte_call_max_count_urc_ind)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, mo_call_req_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_call_connect_to_nw_cnt, UNUSED_FIELD)	
+            DMF_FIELD_VAR(kal_uint32, mo_call_early_release_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_call_with_403_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_call_with_486_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_call_with_480_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_call_with_484_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_call_with_600_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_call_with_604_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_call_with_487_cnt, UNUSED_FIELD)
+        DMF_URC_IND_END(dmf_custom_kpi_mo_volte_call_max_count_urc_ind_struct) 
+
+		DMF_URC_IND(DMF_CUSTOM_KPI_MT_VOLTE_CALL_MAX_COUNT_URC_IND, dmf_custom_kpi_mt_volte_call_max_count_urc_ind_struct, custom_kpi_mt_volte_call_max_count_urc_ind)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, mt_call_req_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_connect_success_cnt, UNUSED_FIELD)	
+            DMF_FIELD_VAR(kal_uint32, mt_call_early_release_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_with_403_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_with_486_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_with_480_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_with_484_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_with_600_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_with_604_cnt, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_with_487_cnt, UNUSED_FIELD)
+        DMF_URC_IND_END(dmf_custom_kpi_mt_volte_call_max_count_urc_ind_struct)
+                
+        DMF_URC_IND(DMF_CUSTOM_KPI_TAU_MAX_COUNT_URC_IND, dmf_custom_kpi_tau_max_count_urc_ind_struct, custom_kpi_tau_max_count_urc_ind)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_req_snd_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_succ_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause3_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause6_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause7_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause8_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause9_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause10_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause11_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause12_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause13_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause14_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause15_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause22_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause25_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause35_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause40_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause42_cnt, UNUSED_FIELD)
+		DMF_URC_IND_END(dmf_custom_kpi_tau_max_count_urc_ind_struct)
+		
+		DMF_URC_IND(DMF_CUSTOM_KPI_MO_CSFB_MAX_COUNT_URC_IND, dmf_custom_kpi_mo_csfb_max_count_urc_ind_struct, custom_kpi_mo_csfb_max_count_urc_ind)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, mo_csfb_ext_sr_req_snd_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, mo_csfb_succ_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, mo_csfb_fail_cnt, UNUSED_FIELD)
+		DMF_URC_IND_END(dmf_custom_kpi_mo_csfb_max_count_urc_ind_struct)
+		
+		DMF_URC_IND(DMF_CUSTOM_KPI_MT_CSFB_MAX_COUNT_URC_IND, dmf_custom_kpi_mt_csfb_max_count_urc_ind_struct, custom_kpi_mt_csfb_max_count_urc_ind)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, mt_csfb_cs_service_notification_rcv_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, mt_csfb_cs_paging_rcv_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, mt_csfb_succ_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, mt_csfb_fail_cnt, UNUSED_FIELD)
+		DMF_URC_IND_END(dmf_custom_kpi_mt_csfb_max_count_urc_ind_struct)
+		
+		DMF_URC_IND(DMF_CUSTOM_KPI_MO_SMS_OVER_SGS_MAX_COUNT_URC_IND, dmf_custom_kpi_mo_sms_over_sgs_max_count_urc_ind_struct, custom_kpi_mo_sms_over_sgs_max_count_urc_ind)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, sms_over_sgs_mo_sms_start_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, sms_over_sgs_mo_sms_succ_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, sms_over_sgs_mo_sms_fail_cnt, UNUSED_FIELD)
+		DMF_URC_IND_END(dmf_custom_kpi_mo_sms_over_sgs_max_count_urc_ind_struct)
+		
+		DMF_URC_IND(DMF_CUSTOM_KPI_MT_SMS_OVER_SGS_MAX_COUNT_URC_IND, dmf_custom_kpi_mt_sms_over_sgs_max_count_urc_ind_struct, custom_kpi_mt_sms_over_sgs_max_count_urc_ind)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, sms_over_sgs_mt_sms_start_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, sms_over_sgs_mt_sms_succ_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, sms_over_sgs_mt_sms_fail_cnt, UNUSED_FIELD)
+		DMF_URC_IND_END(dmf_custom_kpi_mt_sms_over_sgs_max_count_urc_ind_struct)
+		
+		DMF_URC_IND(DMF_CUSTOM_KPI_MO_SMS_OVER_IMS_MAX_COUNT_URC_IND, dmf_custom_kpi_mo_sms_over_ims_max_count_urc_ind_struct, custom_kpi_mo_sms_over_ims_max_count_urc_ind)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, sms_over_ims_mo_sms_start_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, sms_over_ims_mo_sms_succ_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, sms_over_ims_mo_sms_fail_cnt, UNUSED_FIELD)
+		DMF_URC_IND_END(dmf_custom_kpi_mo_sms_over_ims_max_count_urc_ind_struct)
+		
+		DMF_URC_IND(DMF_CUSTOM_KPI_MT_SMS_OVER_IMS_MAX_COUNT_URC_IND, dmf_custom_kpi_mt_sms_over_ims_max_count_urc_ind_struct, custom_kpi_mt_sms_over_ims_max_count_urc_ind)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, sms_over_ims_mt_sms_start_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, sms_over_ims_mt_sms_succ_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, sms_over_ims_mt_sms_fail_cnt, UNUSED_FIELD)
+		DMF_URC_IND_END(dmf_custom_kpi_mt_sms_over_ims_max_count_urc_ind_struct)
+		
+		DMF_URC_IND(DMF_CUSTOM_KPI_ADD_SCG_MAX_COUNT_URC_IND, dmf_custom_kpi_add_scg_max_count_urc_ind_struct, custom_kpi_add_scg_max_count_urc_ind)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, add_scg_req_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, add_scg_succ_cnt, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, add_scg_fail_cnt, UNUSED_FIELD)
+		DMF_URC_IND_END(dmf_custom_kpi_add_scg_max_count_urc_ind_struct)
+	
+
+	#endif	/* DMF_URC_IND_SEC */
+
+	#ifdef DMF_CMD_CNF_SEC
+		DMF_CMD_CNF(DMF_CUSTOM_KPI_LTE_ATTACH_COUNT_CNF, dmf_custom_kpi_lte_attach_count_cnf_struct, custom_kpi_lte_attach_count_cnf)
+            DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_request_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_success_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause2_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause3_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause6_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause7_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause8_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause11_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause12_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause13_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause14_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause15_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause16_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause17_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause18_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause22_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause25_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause35_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, lte_attach_fail_with_cause42_count, UNUSED_FIELD)
+        DMF_CMD_CNF_END(dmf_custom_kpi_lte_attach_count_cnf_struct)
+
+		DMF_CMD_CNF(DMF_CUSTOM_KPI_ACT_DEFAULT_EPS_BEARER_COUNT_CNF, dmf_custom_kpi_act_default_eps_bearer_count_cnf_struct, custom_kpi_act_default_eps_bearer_count_cnf)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, esm_act_default_eps_bearer_req_rcv_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, esm_act_default_eps_bearer_accept_sent_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, esm_act_default_eps_bearer_reject_sent_count, UNUSED_FIELD)   
+        DMF_CMD_CNF_END(dmf_custom_kpi_act_default_eps_bearer_count_cnf_struct)
+        
+		DMF_CMD_CNF(DMF_CUSTOM_KPI_SRVCC_COUNT_CNF, dmf_custom_kpi_srvcc_count_cnf_struct, custom_kpi_srvcc_count_cnf)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, srvcc_ho_req_rcv_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, srvcc_ho_succ_sent_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, srvcc_ho_fail_count, UNUSED_FIELD)
+        DMF_CMD_CNF_END(dmf_custom_kpi_srvcc_count_cnf_struct)
+
+	
+		DMF_CMD_CNF(DMF_CUSTOM_KPI_IMS_REG_COUNT_CNF, dmf_custom_kpi_ims_reg_count_cnf_struct, custom_kpi_ims_reg_count_cnf)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, initial_reg_req_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, initial_reg_req_with_401_rsp_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, initial_reg_req_with_auc_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, initial_reg_success_count, UNUSED_FIELD)
+        DMF_CMD_CNF_END(dmf_custom_kpi_ims_reg_count_cnf_struct)
+
+		DMF_CMD_CNF(DMF_CUSTOM_KPI_VOLTE_CALL_DROP_COUNT_CNF, dmf_custom_kpi_volte_call_drop_count_cnf_struct, custom_kpi_volte_call_drop_count_cnf)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, initial_rsp_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, final_rsp_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, initial_call_drop_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, final_call_drop_count, UNUSED_FIELD)
+        DMF_CMD_CNF_END(dmf_custom_kpi_volte_call_drop_count_cnf_struct)
+		
+		DMF_CMD_CNF(DMF_CUSTOM_KPI_MO_VOLTE_CALL_COUNT_CNF, dmf_custom_kpi_mo_volte_call_count_cnf_struct, custom_kpi_mo_volte_call_count_cnf)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, initial_mo_call_req_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, initial_mo_call_connect_to_nw_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_call_early_release_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_call_with_403_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_call_with_486_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_call_with_480_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_call_with_484_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_call_with_600_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_call_with_604_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_call_with_487_count, UNUSED_FIELD)
+        DMF_CMD_CNF_END(dmf_custom_kpi_mo_volte_call_count_cnf_struct)
+
+		
+		DMF_CMD_CNF(DMF_CUSTOM_KPI_MT_VOLTE_CALL_COUNT_CNF, dmf_custom_kpi_mt_volte_call_count_cnf_struct, custom_kpi_mt_volte_call_count_cnf)
+			DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+			DMF_FIELD_VAR(kal_uint32, initial_mt_call_req_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_connect_success_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_early_release_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_with_486_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_with_403_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_with_480_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_with_484_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_with_600_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_with_604_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_call_with_487_count, UNUSED_FIELD)
+        DMF_CMD_CNF_END(dmf_custom_kpi_mt_volte_call_count_cnf_struct)
+        
+        DMF_CMD_CNF(DMF_CUSTOM_KPI_TAU_COUNT_CNF, dmf_custom_kpi_tau_count_cnf_struct, custom_kpi_tau_count_cnf)
+            DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_req_snd_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_succ_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause3_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause6_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause7_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause8_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause9_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause10_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause11_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause12_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause13_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause14_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause15_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause22_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause25_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause35_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause40_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, tau_fail_with_cause42_count, UNUSED_FIELD)
+        DMF_CMD_CNF_END(dmf_custom_kpi_tau_count_cnf_struct)
+        
+        DMF_CMD_CNF(DMF_CUSTOM_KPI_MO_CSFB_COUNT_CNF, dmf_custom_kpi_mo_csfb_count_cnf_struct, custom_kpi_mo_csfb_count_cnf)
+            DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_csfb_ext_sr_req_snd_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_csfb_succ_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mo_csfb_fail_count, UNUSED_FIELD)
+        DMF_CMD_CNF_END(dmf_custom_kpi_mo_csfb_count_cnf_struct)
+        DMF_CMD_CNF(DMF_CUSTOM_KPI_MT_CSFB_COUNT_CNF, dmf_custom_kpi_mt_csfb_count_cnf_struct, custom_kpi_mt_csfb_count_cnf)
+            DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_csfb_cs_service_notification_rcv_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_csfb_cs_paging_rcv_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_csfb_succ_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, mt_csfb_fail_count, UNUSED_FIELD)
+        DMF_CMD_CNF_END(dmf_custom_kpi_mt_csfb_count_cnf_struct)
+        
+        DMF_CMD_CNF(DMF_CUSTOM_KPI_MO_SMS_OVER_SGS_COUNT_CNF, dmf_custom_kpi_mo_sms_over_sgs_count_cnf_struct, custom_kpi_mo_sms_over_sgs_count_cnf)
+            DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, sms_over_sgs_mo_sms_start_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, sms_over_sgs_mo_sms_succ_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, sms_over_sgs_mo_sms_fail_count, UNUSED_FIELD)
+        DMF_CMD_CNF_END(dmf_custom_kpi_mo_sms_over_sgs_count_cnf_struct)
+        
+        DMF_CMD_CNF(DMF_CUSTOM_KPI_MT_SMS_OVER_SGS_COUNT_CNF, dmf_custom_kpi_mt_sms_over_sgs_count_cnf_struct, custom_kpi_mt_sms_over_sgs_count_cnf)
+            DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, sms_over_sgs_mt_sms_start_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, sms_over_sgs_mt_sms_succ_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, sms_over_sgs_mt_sms_fail_count, UNUSED_FIELD)
+        DMF_CMD_CNF_END(dmf_custom_kpi_mt_sms_over_sgs_count_cnf_struct)
+        
+        DMF_CMD_CNF(DMF_CUSTOM_KPI_MO_SMS_OVER_IMS_COUNT_CNF, dmf_custom_kpi_mo_sms_over_ims_count_cnf_struct, custom_kpi_mo_sms_over_ims_count_cnf)
+            DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, sms_over_ims_mo_sms_start_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, sms_over_ims_mo_sms_succ_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, sms_over_ims_mo_sms_fail_count, UNUSED_FIELD)
+        DMF_CMD_CNF_END(dmf_custom_kpi_mo_sms_over_ims_count_cnf_struct)
+        
+        DMF_CMD_CNF(DMF_CUSTOM_KPI_MT_SMS_OVER_IMS_COUNT_CNF, dmf_custom_kpi_mt_sms_over_ims_count_cnf_struct, custom_kpi_mt_sms_over_ims_count_cnf)
+            DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, sms_over_ims_mt_sms_start_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, sms_over_ims_mt_sms_succ_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, sms_over_ims_mt_sms_fail_count, UNUSED_FIELD)
+        DMF_CMD_CNF_END(dmf_custom_kpi_mt_sms_over_ims_count_cnf_struct)
+        
+        DMF_CMD_CNF(DMF_CUSTOM_KPI_ADD_SCG_COUNT_CNF, dmf_custom_kpi_add_scg_count_cnf_struct, custom_kpi_add_scg_count_cnf)
+            DMF_FIELD_VAR(kal_uint32, group_id, UNUSED_FIELD)
+        	DMF_FIELD_VAR(kal_uint32, kpi_id, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, add_scg_req_count, UNUSED_FIELD)
+            DMF_FIELD_VAR(kal_uint32, add_scg_succ_count, UNUSED_FIELD)
+             DMF_FIELD_VAR(kal_uint32, add_scg_fail_count, UNUSED_FIELD)
+        DMF_CMD_CNF_END(dmf_custom_kpi_add_scg_count_cnf_struct)
+    #endif 
+
+DMF_APP_END
+#endif 
+
+
+#undef DMF_APP
+#undef DMF_APP_END
+#undef DMF_CMD_REQ
+#undef DMF_CMD_REQ_END
+#undef DMF_CMD_CNF
+#undef DMF_CMD_CNF_END
+#undef DMF_URC_IND
+#undef DMF_URC_IND_END
+#undef DMF_FIELD_VAR
+#undef DMF_FIELD_VAR_O
+#undef DMF_FIELD_VAR_ARRAY
+#undef DMF_FIELD_STRING
+#undef DMF_CMD_REQ_SEC
+#undef DMF_CMD_CNF_SEC
+#undef DMF_URC_IND_SEC
+#undef DMF_CUSTOM_SEC
+#undef UNUSED_FIELD
diff --git a/mcu/custom/protocol/common/ps/custom_dmf_kpi_app_hdlr.c b/mcu/custom/protocol/common/ps/custom_dmf_kpi_app_hdlr.c
new file mode 100644
index 0000000..58a0bbc
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_dmf_kpi_app_hdlr.c
@@ -0,0 +1,1824 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ * Filename:
+ * ---------
+ * custom_dmf_kpi_app_hdlr.c
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *   This file is for customized DMF APP handler/callback functions
+ *
+ * Author:
+ * -------
+ * 
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by ClearCase. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Log$
+ *
+ * 08 10 2020 kunkun.shao
+ * [MOLY00536656] Modem??????:custom dmf add scg fail
+ * 	
+ * 	.
+ *
+ * 07 21 2020 kunkun.shao
+ * [MOLY00545717] [MP5 Excluded][NW KPI UTIT]modify AT urc switch status query rsp
+ * 	
+ * 	.
+ *
+ * 07 13 2020 kunkun.shao
+ * [MOLY00538954] [MT6875][Margaux][MP6MP7][R3][Q0][SQC3][MDST][China][Shenzhen][SIM1:CT][SIM2:CMCC][Error times:1] [Fatal error(task)] err_code1:0x00000305 err_code2:0x88880006 err_code3:0xCCCCCCCC MD Offender:NVRAM
+ * 	
+ * 	.
+ *
+ * 07 13 2020 kunkun.shao
+ * [MOLY00538954] [MT6875][Margaux][MP6MP7][R3][Q0][SQC3][MDST][China][Shenzhen][SIM1:CT][SIM2:CMCC][Error times:1] [Fatal error(task)] err_code1:0x00000305 err_code2:0x88880006 err_code3:0xCCCCCCCC MD Offender:NVRAM
+ * 	
+ * 	.
+ *
+ * 06 30 2020 kunkun.shao
+ * [MOLY00536656] Modem¶Ë´óÊý¾ÝÊÕ¼¯:scg custom part
+ * 	
+ * 	.
+ *
+ * 05 18 2020 kunkun.shao
+ * [MOLY00522254] [MP5 Excluded][NW KPI UTIT][Margaux][MT6873]MT VoLTE callÔö¼ÓFail cause
+ * 	
+ * 	.
+ *
+ * 04 17 2020 kunkun.shao
+ * [MOLY00511342] Modem¶Ë´óÊý¾ÝÊÕ¼¯:custom part
+ *
+ * 03 16 2020 jack-mh.tsai
+ * [MOLY00505503] [Gen97] OPPO DMF KPI requirement
+ *
+ * 12 30 2019 kunkun.shao
+ * [MOLY00468711] Modem¶Ë´óÊý¾ÝÊÕ¼¯:custom MOD_MT.
+ *
+ * 12 27 2019 kunkun.shao
+ * [MOLY00468711] Modem¶Ë´óÊý¾Ý:fix
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by ClearCase. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+
+
+ 
+#ifdef __DMF_SUPPORT__
+#ifdef __DMF_OP01_NW_KPI__
+
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "kal_public_defs.h"
+#include "sim_exported_enum.h"
+#include "mte_if.h"
+#include "svc_sap.h"
+#include "l3_inc_enums.h"
+#include "atp_dmf_struct.h"
+#include "custom_dmf_app.h"
+#include "custom_dmf_kpi_app.h"
+#include "dmf_public_event.h"
+#include "dmf_public_api.h"
+#include "dmf_public_def.h"
+#include "em_emm_public_struct.h"
+#include "em_esm_public_struct.h"
+#include "em_errc_public_struct.h"
+#include "mtf_nvram_def.h"
+#include "nvram_struct.h"
+#include "nvram_msgid.h"
+
+
+
+
+
+void dmf_custom_kpi_update_statistics_to_nvram(protocol_id_enum ps_id)
+{
+	kal_uint16 pdu_length;
+	nvram_ef_mtf_dmf_custom_kpi_statistics_struct *nv_lid_ptr;
+	nvram_write_req_struct *nvram_write_req;
+	peer_buff_struct* peer_buf_ptr;
+
+	if((dmf_custom_kpi_context[ps_id].num_of_custom_kpi_nvram_write)!= 0xff)
+	{
+	    dmf_custom_kpi_context[ps_id].num_of_custom_kpi_nvram_write++;
+	}
+	else
+	{
+	    dmf_custom_kpi_context[ps_id].num_of_custom_kpi_nvram_write = 2;
+	}
+	if((dmf_custom_kpi_context[ps_id].num_of_custom_kpi_nvram_write)!= 1)
+	{
+	    return;
+	}
+		
+	peer_buf_ptr = construct_peer_buff(NVRAM_EF_MTF_DMF_CUSTOM_KPI_STATISTICS_SIZE, 0, 0, TD_CTRL);
+	nv_lid_ptr = (nvram_ef_mtf_dmf_custom_kpi_statistics_struct*)get_peer_buff_pdu(peer_buf_ptr, &pdu_length);
+	nv_lid_ptr->lte_attach_req_cnt = dmf_custom_kpi_context[ps_id].eps_attach_req_snd_cnt;
+	nv_lid_ptr->lte_attach_succ_cnt = dmf_custom_kpi_context[ps_id].eps_attach_succ_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause2_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause2_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause3_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause3_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause6_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause6_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause7_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause7_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause8_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause8_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause11_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause11_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause12_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause12_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause13_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause13_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause14_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause14_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause15_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause15_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause16_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause16_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause17_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause17_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause18_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause18_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause22_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause22_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause25_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause25_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause35_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause35_cnt;
+	nv_lid_ptr->lte_attach_fail_with_cause42_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause42_cnt;
+	nv_lid_ptr->act_default_eps_bearer_req_cnt = dmf_custom_kpi_context[ps_id].act_default_bearer_req_rcv_cnt;
+	nv_lid_ptr->act_default_eps_bearer_accept_cnt = dmf_custom_kpi_context[ps_id].act_default_bearer_accept_sent_cnt;
+	nv_lid_ptr->act_default_eps_bearer_reject_cnt = dmf_custom_kpi_context[ps_id].act_default_bearer_reject_sent_cnt;
+	nv_lid_ptr->srvcc_ho_req_cnt = dmf_custom_kpi_context[ps_id].srvcc_ho_req_rcv_cnt;
+	nv_lid_ptr->srvcc_ho_succ_cnt = dmf_custom_kpi_context[ps_id].srvcc_ho_succ_sent_cnt;
+	nv_lid_ptr->srvcc_ho_fail_cnt = dmf_custom_kpi_context[ps_id].srvcc_ho_fail_cnt;
+	nv_lid_ptr->initial_ims_reg_req_cnt = dmf_custom_kpi_context[ps_id].initial_reg_req_cnt;
+	nv_lid_ptr->initial_ims_reg_req_with_401_rsp_cnt = dmf_custom_kpi_context[ps_id].initial_reg_req_with_401_rsp_cnt;
+	nv_lid_ptr->initial_ims_reg_req_with_auc_cnt = dmf_custom_kpi_context[ps_id].initial_reg_req_with_auc_cnt;
+	nv_lid_ptr->initial_ims_reg_success_cnt = dmf_custom_kpi_context[ps_id].initial_reg_success_cnt;
+	nv_lid_ptr->initial_volte_call_rsp_cnt = dmf_custom_kpi_context[ps_id].initial_rsp_cnt;
+	nv_lid_ptr->final_volte_call_rsp_cnt = dmf_custom_kpi_context[ps_id].final_rsp_cnt;
+	nv_lid_ptr->initial_volte_call_drop_cnt = dmf_custom_kpi_context[ps_id].initial_call_drop_cnt;
+	nv_lid_ptr->final_volte_call_drop_cnt = dmf_custom_kpi_context[ps_id].final_call_drop_cnt;
+	nv_lid_ptr->initial_mo_volte_call_req_cnt = dmf_custom_kpi_context[ps_id].mo_call_req_cnt;
+	nv_lid_ptr->initial_mo_volte_call_connect_to_nw_cnt = dmf_custom_kpi_context[ps_id].mo_call_connect_to_nw_cnt;
+	nv_lid_ptr->mo_volte_call_early_release_cnt = dmf_custom_kpi_context[ps_id].mo_call_early_release_cnt;
+	nv_lid_ptr->mo_volte_call_with_403_cnt = dmf_custom_kpi_context[ps_id].mo_call_with_403_cnt;
+	nv_lid_ptr->mo_volte_call_with_486_cnt = dmf_custom_kpi_context[ps_id].mo_call_with_486_cnt; 
+	nv_lid_ptr->mo_volte_call_with_480_cnt = dmf_custom_kpi_context[ps_id].mo_call_with_480_cnt;
+	nv_lid_ptr->mo_volte_call_with_484_cnt = dmf_custom_kpi_context[ps_id].mo_call_with_484_cnt;
+	nv_lid_ptr->mo_volte_call_with_600_cnt = dmf_custom_kpi_context[ps_id].mo_call_with_600_cnt;
+	nv_lid_ptr->mo_volte_call_with_604_cnt = dmf_custom_kpi_context[ps_id].mo_call_with_604_cnt;
+	nv_lid_ptr->mo_volte_call_with_487_cnt = dmf_custom_kpi_context[ps_id].mo_call_with_487_cnt;
+	nv_lid_ptr->initial_mt_volte_call_req_cnt = dmf_custom_kpi_context[ps_id].mt_call_req_cnt;
+	nv_lid_ptr->mt_volte_call_connect_success_cnt = dmf_custom_kpi_context[ps_id].mt_call_connect_success_cnt;
+	nv_lid_ptr->mt_volte_call_early_release_cnt = dmf_custom_kpi_context[ps_id].mt_call_early_release_cnt;
+	nv_lid_ptr->mt_volte_call_with_486_cnt = dmf_custom_kpi_context[ps_id].mt_call_with_486_cnt;
+	nv_lid_ptr->mt_volte_call_with_403_cnt = dmf_custom_kpi_context[ps_id].mt_call_with_403_cnt;
+	nv_lid_ptr->mt_volte_call_with_480_cnt = dmf_custom_kpi_context[ps_id].mt_call_with_480_cnt;
+	nv_lid_ptr->mt_volte_call_with_484_cnt = dmf_custom_kpi_context[ps_id].mt_call_with_484_cnt;
+	nv_lid_ptr->mt_volte_call_with_600_cnt = dmf_custom_kpi_context[ps_id].mt_call_with_600_cnt;
+	nv_lid_ptr->mt_volte_call_with_604_cnt = dmf_custom_kpi_context[ps_id].mt_call_with_604_cnt;
+	nv_lid_ptr->mt_volte_call_with_487_cnt = dmf_custom_kpi_context[ps_id].mt_call_with_487_cnt;
+	
+	nv_lid_ptr->tau_req_snd_cnt = dmf_custom_kpi_context[ps_id].tau_req_snd_cnt;
+	nv_lid_ptr->tau_succ_cnt = dmf_custom_kpi_context[ps_id].tau_succ_cnt;
+	nv_lid_ptr->tau_fail_with_cause3_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause3_cnt;
+	nv_lid_ptr->tau_fail_with_cause6_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause6_cnt;
+	nv_lid_ptr->tau_fail_with_cause7_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause7_cnt;
+	nv_lid_ptr->tau_fail_with_cause8_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause8_cnt;
+	nv_lid_ptr->tau_fail_with_cause9_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause9_cnt;
+	nv_lid_ptr->tau_fail_with_cause10_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause10_cnt;
+	nv_lid_ptr->tau_fail_with_cause11_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause11_cnt;
+	nv_lid_ptr->tau_fail_with_cause12_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause12_cnt;
+	nv_lid_ptr->tau_fail_with_cause13_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause13_cnt;
+	nv_lid_ptr->tau_fail_with_cause14_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause14_cnt;
+	nv_lid_ptr->tau_fail_with_cause15_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause15_cnt;
+	nv_lid_ptr->tau_fail_with_cause22_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause22_cnt;
+	nv_lid_ptr->tau_fail_with_cause25_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause25_cnt;
+	nv_lid_ptr->tau_fail_with_cause35_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause35_cnt;
+	nv_lid_ptr->tau_fail_with_cause40_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause40_cnt;
+	nv_lid_ptr->tau_fail_with_cause42_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause42_cnt;
+	nv_lid_ptr->mo_csfb_ext_sr_req_snd_cnt = dmf_custom_kpi_context[ps_id].mo_csfb_ext_sr_req_snd_cnt;
+	nv_lid_ptr->mo_csfb_succ_cnt = dmf_custom_kpi_context[ps_id].mo_csfb_succ_cnt;
+	nv_lid_ptr->mo_csfb_fail_cnt = dmf_custom_kpi_context[ps_id].mo_csfb_fail_cnt;
+	nv_lid_ptr->mt_csfb_cs_service_notification_rcv_cnt = dmf_custom_kpi_context[ps_id].mt_csfb_cs_service_notification_rcv_cnt;
+	nv_lid_ptr->mt_csfb_cs_paging_rcv_cnt = dmf_custom_kpi_context[ps_id].mt_csfb_cs_paging_rcv_cnt;
+	nv_lid_ptr->mt_csfb_succ_cnt = dmf_custom_kpi_context[ps_id].mt_csfb_succ_cnt;
+	nv_lid_ptr->mt_csfb_fail_cnt = dmf_custom_kpi_context[ps_id].mt_csfb_fail_cnt;
+	nv_lid_ptr->sms_over_sgs_mo_sms_start_cnt = dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_start_cnt;
+	nv_lid_ptr->sms_over_sgs_mo_sms_succ_cnt = dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_succ_cnt;
+	nv_lid_ptr->sms_over_sgs_mo_sms_fail_cnt = dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_fail_cnt;
+	nv_lid_ptr->sms_over_sgs_mt_sms_start_cnt = dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_start_cnt;
+	nv_lid_ptr->sms_over_sgs_mt_sms_succ_cnt = dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_succ_cnt;
+	nv_lid_ptr->sms_over_sgs_mt_sms_fail_cnt = dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_fail_cnt;
+	nv_lid_ptr->sms_over_ims_mo_sms_start_cnt = dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_start_cnt;
+	nv_lid_ptr->sms_over_ims_mo_sms_succ_cnt = dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_succ_cnt;
+	nv_lid_ptr->sms_over_ims_mo_sms_fail_cnt = dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_fail_cnt;
+	nv_lid_ptr->sms_over_ims_mt_sms_start_cnt = dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_start_cnt;
+	nv_lid_ptr->sms_over_ims_mt_sms_succ_cnt = dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_succ_cnt;
+	nv_lid_ptr->sms_over_ims_mt_sms_fail_cnt = dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_fail_cnt;
+	nv_lid_ptr->add_scg_req_cnt = dmf_custom_kpi_context[ps_id].add_scg_req_cnt;
+	nv_lid_ptr->add_scg_succ_cnt = dmf_custom_kpi_context[ps_id].add_scg_succ_cnt;
+	nv_lid_ptr->add_scg_fail_cnt = dmf_custom_kpi_context[ps_id].add_scg_fail_cnt;
+
+	nvram_write_req = (nvram_write_req_struct*)construct_local_para(
+												 sizeof(nvram_write_req_struct),
+												 TD_CTRL);
+	nvram_write_req->file_idx = NVRAM_EF_MTF_DMF_CUSTOM_KPI_STATISTICS_LID;
+	nvram_write_req->para = 1+ps_id;
+	nvram_write_req->access_id = 0;
+
+#ifdef __MT_FRAMEWORK_SUPPORT__
+
+	msg_send6(MOD_MT, MOD_NVRAM, PS_NVRAM_SAP, MSG_ID_NVRAM_WRITE_REQ,
+				  (local_para_struct*) nvram_write_req, (peer_buff_struct*) peer_buf_ptr);
+#endif
+
+}
+
+void dmf_custom_kpi_nvram_write_cnf_hdlr()
+{
+     kal_uint8 i;
+	 for(i=0;i<MAX_SIM_NUM;i++)
+	 {
+	     if(dmf_custom_kpi_context[i].num_of_custom_kpi_nvram_write > 0)
+	     {
+	        dmf_custom_kpi_context[i].num_of_custom_kpi_nvram_write--;
+	     }
+		 if((dmf_custom_kpi_context[i].num_of_custom_kpi_nvram_write) != 0)
+	     {
+	        dmf_custom_kpi_context[i].num_of_custom_kpi_nvram_write = 0;
+			dmf_custom_kpi_update_statistics_to_nvram(i);
+	     }
+	 }
+	 return;
+}
+
+
+void dmf_custom_kpi_reset_lte_attach_info_handler(protocol_id_enum ps_id)
+{	
+    dmf_custom_kpi_context[ps_id].eps_attach_req_snd_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_succ_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause2_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause3_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause6_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause7_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause8_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause11_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause12_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause13_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause14_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause15_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause16_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause17_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause18_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause22_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause25_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause35_cnt = 0;
+	dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause42_cnt = 0;
+	dmf_custom_kpi_update_statistics_to_nvram(ps_id);
+	
+}
+
+void dmf_custom_kpi_reset_act_default_eps_bearer_info_handler(protocol_id_enum ps_id)
+{	
+	dmf_custom_kpi_context[ps_id].act_default_bearer_req_rcv_cnt = 0;
+	dmf_custom_kpi_context[ps_id].act_default_bearer_accept_sent_cnt = 0;
+	dmf_custom_kpi_context[ps_id].act_default_bearer_reject_sent_cnt = 0;
+	dmf_custom_kpi_update_statistics_to_nvram(ps_id);
+}
+
+
+
+void dmf_custom_kpi_reset_srvcc_info_handler(protocol_id_enum ps_id)
+{
+	dmf_custom_kpi_context[ps_id].srvcc_ho_req_rcv_cnt = 0;
+	dmf_custom_kpi_context[ps_id].srvcc_ho_succ_sent_cnt = 0;
+	dmf_custom_kpi_context[ps_id].srvcc_ho_fail_cnt =0;
+	dmf_custom_kpi_update_statistics_to_nvram(ps_id);
+}
+
+
+void dmf_custom_kpi_reset_ims_reg_info_handler(protocol_id_enum ps_id)
+{
+	dmf_custom_kpi_context[ps_id].initial_reg_req_cnt = 0;
+	dmf_custom_kpi_context[ps_id].initial_reg_req_with_401_rsp_cnt = 0;
+	dmf_custom_kpi_context[ps_id].initial_reg_req_with_auc_cnt = 0;
+	dmf_custom_kpi_context[ps_id].initial_reg_success_cnt = 0;
+	dmf_custom_kpi_update_statistics_to_nvram(ps_id);
+}
+
+void dmf_custom_kpi_reset_volte_call_drop_info_handler(protocol_id_enum ps_id)
+{
+	dmf_custom_kpi_context[ps_id].initial_rsp_cnt = 0;
+	dmf_custom_kpi_context[ps_id].final_rsp_cnt = 0;
+	dmf_custom_kpi_context[ps_id].initial_call_drop_cnt = 0;
+	dmf_custom_kpi_context[ps_id].final_call_drop_cnt = 0;
+	dmf_custom_kpi_update_statistics_to_nvram(ps_id);
+}
+
+
+void dmf_custom_kpi_reset_mo_volte_call_info_handler(protocol_id_enum ps_id)
+{
+	dmf_custom_kpi_context[ps_id].mo_call_req_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mo_call_connect_to_nw_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mo_call_early_release_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mo_call_with_403_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mo_call_with_486_cnt = 0; 
+	dmf_custom_kpi_context[ps_id].mo_call_with_480_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mo_call_with_484_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mo_call_with_600_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mo_call_with_604_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mo_call_with_487_cnt = 0;
+	dmf_custom_kpi_update_statistics_to_nvram(ps_id);
+}
+
+void dmf_custom_kpi_reset_mt_volte_call_info_handler(protocol_id_enum ps_id)
+{
+	dmf_custom_kpi_context[ps_id].mt_call_req_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mt_call_connect_success_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mt_call_early_release_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mt_call_with_486_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mt_call_with_403_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mt_call_with_480_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mt_call_with_484_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mt_call_with_600_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mt_call_with_604_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mt_call_with_487_cnt = 0;
+	dmf_custom_kpi_update_statistics_to_nvram(ps_id);
+}
+
+void dmf_custom_kpi_reset_tau_info_handler(protocol_id_enum ps_id)
+{	
+    dmf_custom_kpi_context[ps_id].tau_req_snd_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_succ_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_fail_with_cause3_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_fail_with_cause6_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_fail_with_cause7_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_fail_with_cause8_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_fail_with_cause9_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_fail_with_cause10_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_fail_with_cause11_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_fail_with_cause12_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_fail_with_cause13_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_fail_with_cause14_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_fail_with_cause15_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_fail_with_cause22_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_fail_with_cause25_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_fail_with_cause35_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_fail_with_cause40_cnt = 0;
+	dmf_custom_kpi_context[ps_id].tau_fail_with_cause42_cnt = 0;
+	dmf_custom_kpi_update_statistics_to_nvram(ps_id);
+	
+}
+void dmf_custom_kpi_reset_mo_csfb_info_handler(protocol_id_enum ps_id)
+{	
+    dmf_custom_kpi_context[ps_id].mo_csfb_ext_sr_req_snd_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mo_csfb_succ_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mo_csfb_fail_cnt = 0;
+	dmf_custom_kpi_update_statistics_to_nvram(ps_id);
+	
+}	
+
+void dmf_custom_kpi_reset_mt_csfb_info_handler(protocol_id_enum ps_id)
+{	
+    dmf_custom_kpi_context[ps_id].mt_csfb_cs_service_notification_rcv_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mt_csfb_cs_paging_rcv_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mt_csfb_succ_cnt = 0;
+	dmf_custom_kpi_context[ps_id].mt_csfb_fail_cnt = 0;
+	dmf_custom_kpi_update_statistics_to_nvram(ps_id);
+	
+}	
+
+void dmf_custom_kpi_reset_mo_sms_over_sgs_info_handler(protocol_id_enum ps_id)
+{	
+    dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_start_cnt = 0;
+	dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_succ_cnt = 0;
+	dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_fail_cnt = 0;
+	dmf_custom_kpi_update_statistics_to_nvram(ps_id);
+	
+}	
+
+void dmf_custom_kpi_reset_mt_sms_over_sgs_info_handler(protocol_id_enum ps_id)
+{	
+    dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_start_cnt = 0;
+	dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_succ_cnt = 0;
+	dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_fail_cnt = 0;
+	dmf_custom_kpi_update_statistics_to_nvram(ps_id);
+	
+}	
+
+void dmf_custom_kpi_reset_mo_sms_over_ims_info_handler(protocol_id_enum ps_id)
+{	
+    dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_start_cnt = 0;
+	dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_succ_cnt = 0;
+	dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_fail_cnt = 0;
+	dmf_custom_kpi_update_statistics_to_nvram(ps_id);
+	
+}	
+
+void dmf_custom_kpi_reset_mt_sms_over_ims_info_handler(protocol_id_enum ps_id)
+{	
+    dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_start_cnt = 0;
+	dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_succ_cnt = 0;
+	dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_fail_cnt = 0;
+	dmf_custom_kpi_update_statistics_to_nvram(ps_id);
+	
+}	
+
+
+
+
+void dmf_custom_kpi_eps_attach_max_count_report(protocol_id_enum ps_id)
+{
+	dmf_custom_kpi_lte_attach_max_count_urc_ind_struct attach_max_count_urc_ind;
+	kal_mem_set(&attach_max_count_urc_ind, 0, sizeof(dmf_custom_kpi_lte_attach_max_count_urc_ind_struct));
+	if(dmf_custom_kpi_context[ps_id].eps_attach_req_snd_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_succ_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause2_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause3_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause6_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause7_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause8_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause11_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause12_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause13_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause14_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause15_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause16_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause17_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause18_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause22_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause25_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause35_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause42_cnt == DMF_KPI_MAX_COUNT_NUM)
+	{
+		attach_max_count_urc_ind.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+		attach_max_count_urc_ind.kpi_id = DMF_KPI_LTE_ATTACH_SUCC_RATE;
+		attach_max_count_urc_ind.eps_attach_req_snd_cnt = dmf_custom_kpi_context[ps_id].eps_attach_req_snd_cnt;
+		attach_max_count_urc_ind.eps_attach_succ_cnt = dmf_custom_kpi_context[ps_id].eps_attach_succ_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause2_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause2_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause3_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause3_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause6_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause6_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause7_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause7_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause8_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause8_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause11_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause11_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause12_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause12_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause13_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause13_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause14_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause14_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause15_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause15_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause16_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause16_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause17_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause17_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause18_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause18_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause22_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause22_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause25_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause25_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause35_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause35_cnt;
+		attach_max_count_urc_ind.eps_attach_fail_with_cause42_cnt = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause42_cnt;
+		dmf_send_at_urc(DMF_CUST_KPI_APP_ID, ps_id, DMF_CUSTOM_KPI_LTE_ATTACH_MAX_COUNT_URC_IND, &attach_max_count_urc_ind, sizeof(dmf_custom_kpi_lte_attach_max_count_urc_ind_struct));
+		dmf_custom_kpi_reset_lte_attach_info_handler(ps_id);
+	}
+}
+
+
+void dmf_custom_kpi_act_default_eps_bearer_max_count_report(protocol_id_enum ps_id)
+{
+	dmf_custom_kpi_eps_bearer_max_count_urc_ind_struct eps_max_count_urc_ind;
+	kal_mem_set(&eps_max_count_urc_ind, 0, sizeof(dmf_custom_kpi_eps_bearer_max_count_urc_ind_struct));
+	if(dmf_custom_kpi_context[ps_id].act_default_bearer_req_rcv_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].act_default_bearer_accept_sent_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].act_default_bearer_reject_sent_cnt == DMF_KPI_MAX_COUNT_NUM)
+	{
+		eps_max_count_urc_ind.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+		eps_max_count_urc_ind.kpi_id = DMF_KPI_DEFAULT_EPS_BEARER_ESTABLISH_SUCC_RATE;
+		eps_max_count_urc_ind.act_default_bearer_req_rcv_cnt = dmf_custom_kpi_context[ps_id].act_default_bearer_req_rcv_cnt;
+		eps_max_count_urc_ind.act_default_bearer_accept_sent_cnt = dmf_custom_kpi_context[ps_id].act_default_bearer_accept_sent_cnt;
+		eps_max_count_urc_ind.act_default_bearer_reject_sent_cnt = dmf_custom_kpi_context[ps_id].act_default_bearer_reject_sent_cnt;
+		dmf_send_at_urc(DMF_CUST_KPI_APP_ID, ps_id, DMF_CUSTOM_KPI_EPS_BEARER_MAX_COUNT_URC_IND, &eps_max_count_urc_ind, sizeof(dmf_custom_kpi_eps_bearer_max_count_urc_ind_struct));
+		dmf_custom_kpi_reset_act_default_eps_bearer_info_handler(ps_id);
+	}
+
+}
+
+
+
+void dmf_custom_kpi_srvcc_max_count_report(protocol_id_enum ps_id)
+{
+	dmf_custom_kpi_srvcc_max_count_urc_ind_struct srvcc_max_count_urc_ind;
+	kal_mem_set(&srvcc_max_count_urc_ind, 0, sizeof(dmf_custom_kpi_srvcc_max_count_urc_ind_struct));
+	if(dmf_custom_kpi_context[ps_id].srvcc_ho_req_rcv_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].srvcc_ho_succ_sent_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].srvcc_ho_fail_cnt == DMF_KPI_MAX_COUNT_NUM)
+	{
+		srvcc_max_count_urc_ind.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+		srvcc_max_count_urc_ind.kpi_id = DMF_KPI_ESRVCC_SUCC_RATE;
+		srvcc_max_count_urc_ind.srvcc_ho_req_rcv_cnt = dmf_custom_kpi_context[ps_id].srvcc_ho_req_rcv_cnt;
+		srvcc_max_count_urc_ind.srvcc_ho_succ_sent_cnt = dmf_custom_kpi_context[ps_id].srvcc_ho_succ_sent_cnt;
+		srvcc_max_count_urc_ind.srvcc_ho_fail_cnt = dmf_custom_kpi_context[ps_id].srvcc_ho_fail_cnt;
+		dmf_send_at_urc(DMF_CUST_KPI_APP_ID, ps_id, DMF_CUSTOM_KPI_SRVCC_MAX_COUNT_URC_IND, &srvcc_max_count_urc_ind, sizeof(dmf_custom_kpi_srvcc_max_count_urc_ind_struct));
+		dmf_custom_kpi_reset_srvcc_info_handler(ps_id);
+	}
+}
+
+
+void dmf_custom_kpi_ims_reg_max_count_report(protocol_id_enum ps_id)
+{
+	dmf_custom_kpi_ims_reg_max_count_urc_ind_struct ims_reg_max_count_urc_ind;
+	kal_mem_set(&ims_reg_max_count_urc_ind, 0, sizeof(dmf_custom_kpi_ims_reg_max_count_urc_ind_struct));
+	if(dmf_custom_kpi_context[ps_id].initial_reg_req_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].initial_reg_req_with_401_rsp_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].initial_reg_req_with_auc_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].initial_reg_success_cnt == DMF_KPI_MAX_COUNT_NUM)
+	{
+		ims_reg_max_count_urc_ind.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+		ims_reg_max_count_urc_ind.kpi_id = DMF_KPI_IMS_REGISTRATION_SUCC_RATE;
+		ims_reg_max_count_urc_ind.initial_reg_req_cnt = dmf_custom_kpi_context[ps_id].initial_reg_req_cnt;
+		ims_reg_max_count_urc_ind.initial_reg_req_with_401_rsp_cnt = dmf_custom_kpi_context[ps_id].initial_reg_req_with_401_rsp_cnt;
+		ims_reg_max_count_urc_ind.initial_reg_req_with_auc_cnt = dmf_custom_kpi_context[ps_id].initial_reg_req_with_auc_cnt;
+		ims_reg_max_count_urc_ind.initial_reg_success_cnt = dmf_custom_kpi_context[ps_id].initial_reg_success_cnt;
+		dmf_send_at_urc(DMF_CUST_KPI_APP_ID, ps_id, DMF_CUSTOM_KPI_IMS_REG_MAX_COUNT_URC_IND, &ims_reg_max_count_urc_ind, sizeof(dmf_custom_kpi_ims_reg_max_count_urc_ind_struct));
+		dmf_custom_kpi_reset_ims_reg_info_handler(ps_id);
+	}
+}
+
+void dmf_custom_kpi_volte_call_drop_max_count_report(protocol_id_enum ps_id)
+{
+	dmf_custom_kpi_volte_call_drop_max_count_urc_ind_struct volte_call_drop_max_count_urc_ind;
+	kal_mem_set(&volte_call_drop_max_count_urc_ind, 0, sizeof(dmf_custom_kpi_volte_call_drop_max_count_urc_ind_struct));
+	if(dmf_custom_kpi_context[ps_id].initial_call_drop_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].final_call_drop_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].initial_rsp_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].final_rsp_cnt == DMF_KPI_MAX_COUNT_NUM)
+	{
+		volte_call_drop_max_count_urc_ind.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+		volte_call_drop_max_count_urc_ind.kpi_id = DMF_KPI_VOLTE_CALL_DROP;
+		volte_call_drop_max_count_urc_ind.initial_call_drop_cnt = dmf_custom_kpi_context[ps_id].initial_call_drop_cnt;
+		volte_call_drop_max_count_urc_ind.final_call_drop_cnt = dmf_custom_kpi_context[ps_id].final_call_drop_cnt;
+		volte_call_drop_max_count_urc_ind.initial_rsp_cnt = dmf_custom_kpi_context[ps_id].initial_rsp_cnt;
+		volte_call_drop_max_count_urc_ind.final_rsp_cnt = dmf_custom_kpi_context[ps_id].final_rsp_cnt;
+		dmf_send_at_urc(DMF_CUST_KPI_APP_ID, ps_id, DMF_CUSTOM_KPI_VOLTE_CALL_DROP_MAX_COUNT_URC_IND, &volte_call_drop_max_count_urc_ind, sizeof(dmf_custom_kpi_volte_call_drop_max_count_urc_ind_struct));
+		dmf_custom_kpi_reset_volte_call_drop_info_handler(ps_id);
+	}
+}
+
+
+void dmf_custom_kpi_mo_volte_call_max_count_report(protocol_id_enum ps_id)	
+{
+	dmf_custom_kpi_mo_volte_call_max_count_urc_ind_struct mo_volte_call_max_count_urc_ind;
+	kal_mem_set(&mo_volte_call_max_count_urc_ind, 0, sizeof(dmf_custom_kpi_mo_volte_call_max_count_urc_ind_struct));
+	if(dmf_custom_kpi_context[ps_id].mo_call_connect_to_nw_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mo_call_req_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mo_call_early_release_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mo_call_with_403_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mo_call_with_480_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mo_call_with_484_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mo_call_with_486_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mo_call_with_487_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mo_call_with_600_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mo_call_with_604_cnt == DMF_KPI_MAX_COUNT_NUM)
+	{
+		mo_volte_call_max_count_urc_ind.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+		mo_volte_call_max_count_urc_ind.kpi_id = DMF_KPI_MO_VOLTE_CALL_SUCC_RATE;
+		mo_volte_call_max_count_urc_ind.mo_call_connect_to_nw_cnt = dmf_custom_kpi_context[ps_id].mo_call_connect_to_nw_cnt;
+		mo_volte_call_max_count_urc_ind.mo_call_req_cnt = dmf_custom_kpi_context[ps_id].mo_call_req_cnt;
+		mo_volte_call_max_count_urc_ind.mo_call_early_release_cnt = dmf_custom_kpi_context[ps_id].mo_call_early_release_cnt;
+		mo_volte_call_max_count_urc_ind.mo_call_with_403_cnt = dmf_custom_kpi_context[ps_id].mo_call_with_403_cnt;
+		mo_volte_call_max_count_urc_ind.mo_call_with_480_cnt = dmf_custom_kpi_context[ps_id].mo_call_with_480_cnt;
+		mo_volte_call_max_count_urc_ind.mo_call_with_484_cnt = dmf_custom_kpi_context[ps_id].mo_call_with_484_cnt;
+		mo_volte_call_max_count_urc_ind.mo_call_with_486_cnt = dmf_custom_kpi_context[ps_id].mo_call_with_486_cnt;
+		mo_volte_call_max_count_urc_ind.mo_call_with_487_cnt = dmf_custom_kpi_context[ps_id].mo_call_with_487_cnt;
+		mo_volte_call_max_count_urc_ind.mo_call_with_600_cnt = dmf_custom_kpi_context[ps_id].mo_call_with_600_cnt;
+		mo_volte_call_max_count_urc_ind.mo_call_with_604_cnt = dmf_custom_kpi_context[ps_id].mo_call_with_604_cnt;
+		dmf_send_at_urc(DMF_CUST_KPI_APP_ID, ps_id, DMF_CUSTOM_KPI_MO_VOLTE_CALL_MAX_COUNT_URC_IND, &mo_volte_call_max_count_urc_ind, sizeof(dmf_custom_kpi_mo_volte_call_max_count_urc_ind_struct));
+		dmf_custom_kpi_reset_mo_volte_call_info_handler(ps_id);
+		
+	}
+
+}
+
+void dmf_custom_kpi_mt_volte_call_max_count_report(protocol_id_enum ps_id)
+{
+	dmf_custom_kpi_mt_volte_call_max_count_urc_ind_struct mt_volte_call_max_count_urc_ind;
+	kal_mem_set(&mt_volte_call_max_count_urc_ind, 0, sizeof(dmf_custom_kpi_mt_volte_call_max_count_urc_ind_struct));
+	if(dmf_custom_kpi_context[ps_id].mt_call_connect_success_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mt_call_req_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mt_call_early_release_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mt_call_with_403_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mt_call_with_480_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mt_call_with_484_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mt_call_with_486_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mt_call_with_487_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mt_call_with_600_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].mt_call_with_604_cnt == DMF_KPI_MAX_COUNT_NUM)
+	{
+		mt_volte_call_max_count_urc_ind.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+		mt_volte_call_max_count_urc_ind.kpi_id = DMF_KPI_MT_VOLTE_CALL_SUCC_RATE;
+		mt_volte_call_max_count_urc_ind.mt_call_connect_success_cnt = dmf_custom_kpi_context[ps_id].mt_call_connect_success_cnt;
+		mt_volte_call_max_count_urc_ind.mt_call_req_cnt = dmf_custom_kpi_context[ps_id].mt_call_req_cnt;
+		mt_volte_call_max_count_urc_ind.mt_call_early_release_cnt = dmf_custom_kpi_context[ps_id].mt_call_early_release_cnt;
+		mt_volte_call_max_count_urc_ind.mt_call_with_403_cnt = dmf_custom_kpi_context[ps_id].mt_call_with_403_cnt;
+		mt_volte_call_max_count_urc_ind.mt_call_with_480_cnt = dmf_custom_kpi_context[ps_id].mt_call_with_480_cnt;
+		mt_volte_call_max_count_urc_ind.mt_call_with_484_cnt = dmf_custom_kpi_context[ps_id].mt_call_with_484_cnt;
+		mt_volte_call_max_count_urc_ind.mt_call_with_486_cnt = dmf_custom_kpi_context[ps_id].mt_call_with_486_cnt;
+		mt_volte_call_max_count_urc_ind.mt_call_with_487_cnt = dmf_custom_kpi_context[ps_id].mt_call_with_487_cnt;
+		mt_volte_call_max_count_urc_ind.mt_call_with_600_cnt = dmf_custom_kpi_context[ps_id].mt_call_with_600_cnt;
+		mt_volte_call_max_count_urc_ind.mt_call_with_604_cnt = dmf_custom_kpi_context[ps_id].mt_call_with_604_cnt;
+		dmf_send_at_urc(DMF_CUST_KPI_APP_ID, ps_id, DMF_CUSTOM_KPI_MT_VOLTE_CALL_MAX_COUNT_URC_IND, &mt_volte_call_max_count_urc_ind, sizeof(dmf_custom_kpi_mt_volte_call_max_count_urc_ind_struct));
+		dmf_custom_kpi_reset_mt_volte_call_info_handler(ps_id);
+	}
+
+}
+
+void dmf_custom_kpi_tau_max_count_report(protocol_id_enum ps_id)
+{	
+      dmf_custom_kpi_tau_max_count_urc_ind_struct tau_max_count_urc_ind;
+	  kal_mem_set(&tau_max_count_urc_ind, 0, sizeof(dmf_custom_kpi_tau_max_count_urc_ind_struct));
+	  if(dmf_custom_kpi_context[ps_id].tau_req_snd_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	  	 dmf_custom_kpi_context[ps_id].tau_succ_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	  	 dmf_custom_kpi_context[ps_id].tau_fail_with_cause3_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	     dmf_custom_kpi_context[ps_id].tau_fail_with_cause6_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	     dmf_custom_kpi_context[ps_id].tau_fail_with_cause7_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	     dmf_custom_kpi_context[ps_id].tau_fail_with_cause8_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	     dmf_custom_kpi_context[ps_id].tau_fail_with_cause9_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	     dmf_custom_kpi_context[ps_id].tau_fail_with_cause10_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	     dmf_custom_kpi_context[ps_id].tau_fail_with_cause11_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	     dmf_custom_kpi_context[ps_id].tau_fail_with_cause12_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	     dmf_custom_kpi_context[ps_id].tau_fail_with_cause13_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	     dmf_custom_kpi_context[ps_id].tau_fail_with_cause14_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	     dmf_custom_kpi_context[ps_id].tau_fail_with_cause15_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	     dmf_custom_kpi_context[ps_id].tau_fail_with_cause22_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	     dmf_custom_kpi_context[ps_id].tau_fail_with_cause25_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	     dmf_custom_kpi_context[ps_id].tau_fail_with_cause35_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	     dmf_custom_kpi_context[ps_id].tau_fail_with_cause40_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	     dmf_custom_kpi_context[ps_id].tau_fail_with_cause42_cnt == DMF_KPI_MAX_COUNT_NUM)
+	  {
+	  	  tau_max_count_urc_ind.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+		  tau_max_count_urc_ind.kpi_id = DMF_KPI_TAU_SUCC_RATE;
+		  tau_max_count_urc_ind.tau_req_snd_cnt = dmf_custom_kpi_context[ps_id].tau_req_snd_cnt;
+		  tau_max_count_urc_ind.tau_succ_cnt = dmf_custom_kpi_context[ps_id].tau_succ_cnt;
+		  tau_max_count_urc_ind.tau_fail_with_cause3_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause3_cnt;
+		  tau_max_count_urc_ind.tau_fail_with_cause6_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause6_cnt;
+		  tau_max_count_urc_ind.tau_fail_with_cause7_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause7_cnt;
+		  tau_max_count_urc_ind.tau_fail_with_cause8_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause8_cnt;
+		  tau_max_count_urc_ind.tau_fail_with_cause9_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause9_cnt;
+		  tau_max_count_urc_ind.tau_fail_with_cause10_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause10_cnt;
+		  tau_max_count_urc_ind.tau_fail_with_cause11_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause11_cnt;
+		  tau_max_count_urc_ind.tau_fail_with_cause12_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause12_cnt;
+		  tau_max_count_urc_ind.tau_fail_with_cause13_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause13_cnt;
+		  tau_max_count_urc_ind.tau_fail_with_cause14_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause14_cnt;
+		  tau_max_count_urc_ind.tau_fail_with_cause15_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause15_cnt;
+		  tau_max_count_urc_ind.tau_fail_with_cause22_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause22_cnt;
+		  tau_max_count_urc_ind.tau_fail_with_cause25_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause25_cnt;
+		  tau_max_count_urc_ind.tau_fail_with_cause35_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause35_cnt;
+		  tau_max_count_urc_ind.tau_fail_with_cause40_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause40_cnt;
+		  tau_max_count_urc_ind.tau_fail_with_cause42_cnt = dmf_custom_kpi_context[ps_id].tau_fail_with_cause42_cnt;
+		  dmf_send_at_urc(DMF_CUST_KPI_APP_ID, ps_id, DMF_CUSTOM_KPI_TAU_MAX_COUNT_URC_IND, &tau_max_count_urc_ind, sizeof(dmf_custom_kpi_tau_max_count_urc_ind_struct));
+		  dmf_custom_kpi_reset_tau_info_handler(ps_id);
+	  }
+}
+void dmf_custom_kpi_mo_csfb_max_count_report(protocol_id_enum ps_id)
+{
+     dmf_custom_kpi_mo_csfb_max_count_urc_ind_struct mo_csfb_max_count_urc_ind;
+	 kal_mem_set(&mo_csfb_max_count_urc_ind, 0, sizeof(dmf_custom_kpi_mo_csfb_max_count_urc_ind_struct));
+	 if(dmf_custom_kpi_context[ps_id].mo_csfb_ext_sr_req_snd_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	 	dmf_custom_kpi_context[ps_id].mo_csfb_succ_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	 	dmf_custom_kpi_context[ps_id].mo_csfb_fail_cnt == DMF_KPI_MAX_COUNT_NUM)
+	 {
+	     mo_csfb_max_count_urc_ind.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+		 mo_csfb_max_count_urc_ind.kpi_id = DMF_KPI_MO_CSFB_SUCC_RATE;
+		 mo_csfb_max_count_urc_ind.mo_csfb_ext_sr_req_snd_cnt = dmf_custom_kpi_context[ps_id].mo_csfb_ext_sr_req_snd_cnt;
+		 mo_csfb_max_count_urc_ind.mo_csfb_succ_cnt = dmf_custom_kpi_context[ps_id].mo_csfb_succ_cnt;
+		 mo_csfb_max_count_urc_ind.mo_csfb_fail_cnt = dmf_custom_kpi_context[ps_id].mo_csfb_fail_cnt;
+		 dmf_send_at_urc(DMF_CUST_KPI_APP_ID, ps_id, DMF_CUSTOM_KPI_MO_CSFB_MAX_COUNT_URC_IND, &mo_csfb_max_count_urc_ind, sizeof(dmf_custom_kpi_mo_csfb_max_count_urc_ind_struct));
+		 dmf_custom_kpi_reset_mo_csfb_info_handler(ps_id);
+	 }
+}
+
+void dmf_custom_kpi_mt_csfb_max_count_report(protocol_id_enum ps_id)
+{
+     dmf_custom_kpi_mt_csfb_max_count_urc_ind_struct mt_csfb_max_count_urc_ind;
+	 kal_mem_set(&mt_csfb_max_count_urc_ind, 0, sizeof(dmf_custom_kpi_mt_csfb_max_count_urc_ind_struct));
+	 if(dmf_custom_kpi_context[ps_id].mt_csfb_cs_service_notification_rcv_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	 	dmf_custom_kpi_context[ps_id].mt_csfb_cs_paging_rcv_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	 	dmf_custom_kpi_context[ps_id].mt_csfb_succ_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	 	dmf_custom_kpi_context[ps_id].mt_csfb_fail_cnt == DMF_KPI_MAX_COUNT_NUM)
+	 {
+	     mt_csfb_max_count_urc_ind.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+		 mt_csfb_max_count_urc_ind.kpi_id = DMF_KPI_MT_CSFB_SUCC_RATE;
+		 mt_csfb_max_count_urc_ind.mt_csfb_cs_service_notification_rcv_cnt = dmf_custom_kpi_context[ps_id].mt_csfb_cs_service_notification_rcv_cnt;
+		 mt_csfb_max_count_urc_ind.mt_csfb_cs_paging_rcv_cnt = dmf_custom_kpi_context[ps_id].mt_csfb_cs_paging_rcv_cnt;
+		 mt_csfb_max_count_urc_ind.mt_csfb_succ_cnt = dmf_custom_kpi_context[ps_id].mt_csfb_succ_cnt;
+		 mt_csfb_max_count_urc_ind.mt_csfb_fail_cnt = dmf_custom_kpi_context[ps_id].mt_csfb_fail_cnt;
+		 dmf_send_at_urc(DMF_CUST_KPI_APP_ID, ps_id, DMF_CUSTOM_KPI_MT_CSFB_MAX_COUNT_URC_IND, &mt_csfb_max_count_urc_ind, sizeof(dmf_custom_kpi_mt_csfb_max_count_urc_ind_struct));
+		 dmf_custom_kpi_reset_mt_csfb_info_handler(ps_id);
+	 }
+}
+void dmf_custom_kpi_mo_sms_over_sgs_max_count_report(protocol_id_enum ps_id)
+{
+    dmf_custom_kpi_mo_sms_over_sgs_max_count_urc_ind_struct mo_sms_over_sgs_max_count_urc_ind;
+	kal_mem_set(&mo_sms_over_sgs_max_count_urc_ind, 0, sizeof(dmf_custom_kpi_mo_sms_over_sgs_max_count_urc_ind_struct));
+	if(dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_start_cnt== DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_succ_cnt== DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_fail_cnt== DMF_KPI_MAX_COUNT_NUM)
+	{
+	   mo_sms_over_sgs_max_count_urc_ind.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	   mo_sms_over_sgs_max_count_urc_ind.kpi_id = DMF_KPI_MO_SMS_OVER_SGS_SUCC_RATE;
+	   mo_sms_over_sgs_max_count_urc_ind.sms_over_sgs_mo_sms_start_cnt = dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_start_cnt;
+	   mo_sms_over_sgs_max_count_urc_ind.sms_over_sgs_mo_sms_succ_cnt = dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_succ_cnt;
+	   mo_sms_over_sgs_max_count_urc_ind.sms_over_sgs_mo_sms_fail_cnt = dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_fail_cnt;
+	   dmf_send_at_urc(DMF_CUST_KPI_APP_ID, ps_id, DMF_CUSTOM_KPI_MO_SMS_OVER_SGS_MAX_COUNT_URC_IND, &mo_sms_over_sgs_max_count_urc_ind, sizeof(dmf_custom_kpi_mo_sms_over_sgs_max_count_urc_ind_struct));
+	   dmf_custom_kpi_reset_mo_sms_over_sgs_info_handler(ps_id);
+	}
+}
+void dmf_custom_kpi_mt_sms_over_sgs_max_count_report(protocol_id_enum ps_id)
+{
+    dmf_custom_kpi_mt_sms_over_sgs_max_count_urc_ind_struct mt_sms_over_sgs_max_count_urc_ind;
+	kal_mem_set(&mt_sms_over_sgs_max_count_urc_ind, 0, sizeof(dmf_custom_kpi_mt_sms_over_sgs_max_count_urc_ind_struct));
+	if(dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_start_cnt== DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_succ_cnt== DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_fail_cnt== DMF_KPI_MAX_COUNT_NUM)
+	{
+	   mt_sms_over_sgs_max_count_urc_ind.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	   mt_sms_over_sgs_max_count_urc_ind.kpi_id = DMF_KPI_MT_SMS_OVER_SGS_SUCC_RATE;
+	   mt_sms_over_sgs_max_count_urc_ind.sms_over_sgs_mt_sms_start_cnt = dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_start_cnt;
+	   mt_sms_over_sgs_max_count_urc_ind.sms_over_sgs_mt_sms_succ_cnt = dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_succ_cnt;
+	   mt_sms_over_sgs_max_count_urc_ind.sms_over_sgs_mt_sms_fail_cnt = dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_fail_cnt;
+	   dmf_send_at_urc(DMF_CUST_KPI_APP_ID, ps_id, DMF_CUSTOM_KPI_MT_SMS_OVER_SGS_MAX_COUNT_URC_IND, &mt_sms_over_sgs_max_count_urc_ind, sizeof(dmf_custom_kpi_mt_sms_over_sgs_max_count_urc_ind_struct));
+	   dmf_custom_kpi_reset_mt_sms_over_sgs_info_handler(ps_id);
+	}
+}
+void dmf_custom_kpi_mo_sms_over_ims_max_count_report(protocol_id_enum ps_id)
+{
+    dmf_custom_kpi_mo_sms_over_ims_max_count_urc_ind_struct mo_sms_over_ims_max_count_urc_ind;
+	kal_mem_set(&mo_sms_over_ims_max_count_urc_ind, 0, sizeof(dmf_custom_kpi_mo_sms_over_ims_max_count_urc_ind_struct));
+	if(dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_start_cnt== DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_succ_cnt== DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_fail_cnt== DMF_KPI_MAX_COUNT_NUM)
+	{
+	   mo_sms_over_ims_max_count_urc_ind.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	   mo_sms_over_ims_max_count_urc_ind.kpi_id = DMF_KPI_MO_SMS_OVER_IMS_SUCC_RATE;
+	   mo_sms_over_ims_max_count_urc_ind.sms_over_ims_mo_sms_start_cnt = dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_start_cnt;
+	   mo_sms_over_ims_max_count_urc_ind.sms_over_ims_mo_sms_succ_cnt = dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_succ_cnt;
+	   mo_sms_over_ims_max_count_urc_ind.sms_over_ims_mo_sms_fail_cnt = dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_fail_cnt;
+	   dmf_send_at_urc(DMF_CUST_KPI_APP_ID, ps_id, DMF_CUSTOM_KPI_MO_SMS_OVER_IMS_MAX_COUNT_URC_IND, &mo_sms_over_ims_max_count_urc_ind, sizeof(dmf_custom_kpi_mo_sms_over_ims_max_count_urc_ind_struct));
+	   dmf_custom_kpi_reset_mo_sms_over_ims_info_handler(ps_id);
+	}
+}
+void dmf_custom_kpi_mt_sms_over_ims_max_count_report(protocol_id_enum ps_id)
+{
+    dmf_custom_kpi_mt_sms_over_ims_max_count_urc_ind_struct mt_sms_over_ims_max_count_urc_ind;
+	kal_mem_set(&mt_sms_over_ims_max_count_urc_ind, 0, sizeof(dmf_custom_kpi_mt_sms_over_ims_max_count_urc_ind_struct));
+	if(dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_start_cnt== DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_succ_cnt== DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_fail_cnt== DMF_KPI_MAX_COUNT_NUM)
+	{
+	   mt_sms_over_ims_max_count_urc_ind.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	   mt_sms_over_ims_max_count_urc_ind.kpi_id = DMF_KPI_MT_SMS_OVER_IMS_SUCC_RATE;
+	   mt_sms_over_ims_max_count_urc_ind.sms_over_ims_mt_sms_start_cnt = dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_start_cnt;
+	   mt_sms_over_ims_max_count_urc_ind.sms_over_ims_mt_sms_succ_cnt = dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_succ_cnt;
+	   mt_sms_over_ims_max_count_urc_ind.sms_over_ims_mt_sms_fail_cnt = dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_fail_cnt;
+	   dmf_send_at_urc(DMF_CUST_KPI_APP_ID, ps_id, DMF_CUSTOM_KPI_MT_SMS_OVER_IMS_MAX_COUNT_URC_IND, &mt_sms_over_ims_max_count_urc_ind, sizeof(dmf_custom_kpi_mt_sms_over_ims_max_count_urc_ind_struct));
+	   dmf_custom_kpi_reset_mt_sms_over_ims_info_handler(ps_id);
+	}
+}
+
+
+
+
+void dmf_custom_kpi_eps_attach_statistics_update(protocol_id_enum ps_id,dmf_cmcc_eps_attach_event_enum attach_event,kal_uint32 attach_reject_cause)
+{
+
+	dmf_custom_kpi_eps_attach_max_count_report(ps_id);
+	
+	if (attach_event == DMF_CMCC_EPS_ATTACH_REQUEST)
+	{
+		dmf_custom_kpi_context[ps_id].eps_attach_req_snd_cnt++;
+	}
+	else if (attach_event == DMF_CMCC_EPS_ATTACH_SUCCESS)
+	{
+		dmf_custom_kpi_context[ps_id].eps_attach_succ_cnt++;
+	}
+	else if (attach_event == DMF_CMCC_EPS_ATTACH_FAIL)
+	{
+		switch(attach_reject_cause)
+		{
+			case EMM_CAUSE_IMSI_UNKNOWN_IN_HSS:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause2_cnt++;
+				break;
+			case EMM_CAUSE_ILLEGAL_UE:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause3_cnt++;
+				break;
+			case EMM_CAUSE_ILLEGAL_ME:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause6_cnt++;
+				break;
+			case EMM_CAUSE_EPS_NOT_ALLOWED:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause7_cnt++;
+				break;
+			case EMM_CAUSE_EPS_NON_EPS_NOT_ALLOWED:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause8_cnt++;
+				break;
+			case EMM_CAUSE_PLMN_NOT_ALLOWED:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause11_cnt++;
+				break;
+			case EMM_CAUSE_TA_NOT_ALLOWED:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause12_cnt++;
+				break;
+			case EMM_CAUSE_ROAMING_NOT_ALLOWED_IN_TA:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause13_cnt++;
+				break;
+			case EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause14_cnt++;
+				break;
+			case EMM_CAUSE_NO_SUITABLE_CELL_IN_TA:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause15_cnt++;
+				break;
+			case EMM_CAUSE_MSC_NOT_REACHABLE:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause16_cnt++;
+				break;
+			case EMM_CAUSE_NW_FAILURE:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause17_cnt++;
+				break;
+			case EMM_CAUSE_CS_NOT_AVAILABLE:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause18_cnt++;
+				break;
+			case EMM_CAUSE_CONGESTION:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause22_cnt++;
+				break;
+			case EMM_CAUSE_NOT_AUTH_FOR_CSG:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause25_cnt++;
+				break;
+			case EMM_CAUSE_REQUEST_SERVICE_OPTION_NOT_AUTHORIZED_IN_PLMN:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause35_cnt++;
+				break;
+			case EMM_CAUSE_SEVERE_NW_FAILURE:
+				dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause42_cnt++;
+				break;
+			}
+	}
+
+}
+
+
+void dmf_custom_kpi_act_default_eps_bearer_statistics_update(protocol_id_enum ps_id,dmf_cmcc_esm_eps_bearer_event_enum esm_eps_bearer_event)
+{
+
+	dmf_custom_kpi_act_default_eps_bearer_max_count_report(ps_id);
+	if(esm_eps_bearer_event == DMF_CMCC_ACT_DEFAULT_EPS_BEARER_REQUEST_RECEIVED)
+	{
+		dmf_custom_kpi_context[ps_id].act_default_bearer_req_rcv_cnt++;
+	}
+	else if(esm_eps_bearer_event == DMF_CMCC_ACT_DEFAULT_EPS_BEARER_ACCEPT_SENT)
+	{
+		dmf_custom_kpi_context[ps_id].act_default_bearer_accept_sent_cnt++;
+	}
+	else if(esm_eps_bearer_event == DMF_CMCC_ACT_DEFAULT_EPS_BEARER_REJECT_SENT)
+	{
+		dmf_custom_kpi_context[ps_id].act_default_bearer_reject_sent_cnt++;
+	}
+
+}
+
+
+
+void dmf_custom_kpi_srvcc_statistics_update(protocol_id_enum ps_id,dmf_cmcc_srvcc_event_enum event)
+{
+	dmf_custom_kpi_srvcc_max_count_report(ps_id);
+	if(event == DMF_CMCC_SRVCC_HO_REQ_RECEIVED)
+	{
+		dmf_custom_kpi_context[ps_id].srvcc_ho_req_rcv_cnt++;
+	}
+	else if(event == DMF_CMCC_SRVCC_HO_COMPLETE_SENT)
+	{
+		dmf_custom_kpi_context[ps_id].srvcc_ho_succ_sent_cnt++;
+	}
+	else if(event == DMF_CMCC_SRVCC_HO_FAIL_SENT)
+	{
+		dmf_custom_kpi_context[ps_id].srvcc_ho_fail_cnt++;
+	}	
+
+}
+
+
+void dmf_custom_kpi_ims_reg_statistics_update(protocol_id_enum ps_id,kal_uint32 event_id)
+{
+	dmf_custom_kpi_ims_reg_max_count_report(ps_id);
+	if(event_id == DMF_SIP_INITIAL_REG_REQ)
+	{
+		dmf_custom_kpi_context[ps_id].initial_reg_req_cnt++;
+	}
+	else if(event_id == DMF_SIP_INITIAL_REG_401_RCV)
+	{
+		dmf_custom_kpi_context[ps_id].initial_reg_req_with_401_rsp_cnt++;
+	}
+	else if(event_id == DMF_SIP_INITIAL_REG_WITH_IPSEC)
+	{
+		dmf_custom_kpi_context[ps_id].initial_reg_req_with_auc_cnt++;
+	}
+	else if(event_id == DMF_SIP_INITIAL_REG_SUCC)
+	{
+		dmf_custom_kpi_context[ps_id].initial_reg_success_cnt++;
+	}
+}
+
+
+void dmf_custom_kpi_volte_call_drop_statistics_update(protocol_id_enum ps_id,kal_uint32 event_id)
+{	
+	dmf_custom_kpi_volte_call_drop_max_count_report(ps_id);
+	if(event_id == DMF_SIP_MO_CALL_DROPED)
+	{
+		dmf_custom_kpi_context[ps_id].initial_call_drop_cnt++;
+	}
+	else if(event_id == DMF_SIP_MT_CALL_DROPED)
+	{
+		dmf_custom_kpi_context[ps_id].final_call_drop_cnt++;
+	}
+	else if(event_id == DMF_SIP_MO_CALL_ESTABLISHED)
+	{
+		dmf_custom_kpi_context[ps_id].initial_rsp_cnt++;
+	}
+	else if(event_id == DMF_SIP_MT_CALL_ESTABLISHED)
+	{
+		dmf_custom_kpi_context[ps_id].final_rsp_cnt++;
+	}
+}
+
+
+
+void dmf_custom_kpi_mo_volte_call_statistics_update(protocol_id_enum ps_id,dmf_event_cmcc_imc_ims_struct *mo_volte_call_info)
+{
+
+	dmf_custom_kpi_mo_volte_call_max_count_report(ps_id);	
+
+	if(mo_volte_call_info->event_id == DMF_SIP_MO_CALL_SET_UP)
+	{
+		dmf_custom_kpi_context[ps_id].mo_call_connect_to_nw_cnt++;
+	}
+	else if(mo_volte_call_info->event_id == DMF_SIP_MO_CALL_EARLY_REL)
+	{
+		dmf_custom_kpi_context[ps_id].mo_call_early_release_cnt++;
+	}
+	else if(mo_volte_call_info->event_id == DMF_SIP_MO_CALL_ATTEMPT)
+	{
+		dmf_custom_kpi_context[ps_id].mo_call_req_cnt++;
+	}
+	else if(mo_volte_call_info->event_id == DMF_SIP_MO_CALL_FAILED)
+	{
+		if(mo_volte_call_info->sip_msg_type == DMF_IMS_SIP_MSG_TYPE_RESPONSE &&
+			mo_volte_call_info->sip_method == DMF_METHOD_SIP_INVITE)
+		{
+            if(mo_volte_call_info->fail_cause == DMF_SIP_FAIL_CAUSE_NOT_ALERTED)
+			{  switch(mo_volte_call_info->sip_resp_code)
+			   {
+				  case 403:
+					dmf_custom_kpi_context[ps_id].mo_call_with_403_cnt++;
+				    break;
+				  case 486:
+					dmf_custom_kpi_context[ps_id].mo_call_with_486_cnt++;
+					break;
+				  case 480:
+					dmf_custom_kpi_context[ps_id].mo_call_with_480_cnt++;
+					break;
+				  case 484:
+					dmf_custom_kpi_context[ps_id].mo_call_with_484_cnt++;
+					break;
+				  case 600:
+					dmf_custom_kpi_context[ps_id].mo_call_with_600_cnt++;
+					break;
+				  case 604:
+					dmf_custom_kpi_context[ps_id].mo_call_with_604_cnt++;
+					break;
+				  case 487:
+					dmf_custom_kpi_context[ps_id].mo_call_with_487_cnt++;
+					break;
+				  default:
+					break;
+			    }
+			}
+		}
+	}
+}
+
+
+
+void dmf_custom_kpi_mt_volte_call_statistics_update(protocol_id_enum ps_id,dmf_event_cmcc_imc_ims_struct *mt_volte_call_info)
+{
+	dmf_custom_kpi_mt_volte_call_max_count_report(ps_id);
+	if(mt_volte_call_info->event_id == DMF_SIP_MT_CALL_SET_UP)
+	{
+		dmf_custom_kpi_context[ps_id].mt_call_connect_success_cnt++;
+	}
+	else if(mt_volte_call_info->event_id == DMF_SIP_MT_CALL_EARLY_REL)
+	{
+		dmf_custom_kpi_context[ps_id].mt_call_early_release_cnt++;
+	}
+	else if(mt_volte_call_info->event_id == DMF_SIP_MT_CALL_ATTEMPT)
+	{
+		dmf_custom_kpi_context[ps_id].mt_call_req_cnt++;
+	}
+	else if(mt_volte_call_info->event_id == DMF_SIP_MT_CALL_FAILED)
+	{
+		if(mt_volte_call_info->sip_msg_type == DMF_IMS_SIP_MSG_TYPE_RESPONSE &&
+			mt_volte_call_info->sip_method == DMF_METHOD_SIP_INVITE)
+		{
+		    if(mt_volte_call_info->fail_cause == DMF_SIP_FAIL_CAUSE_NOT_ALERTED)
+		    {
+			   switch(mt_volte_call_info->sip_resp_code)
+			   {
+				  case 403:
+					dmf_custom_kpi_context[ps_id].mt_call_with_403_cnt++;
+				    break;
+				  case 486:
+					dmf_custom_kpi_context[ps_id].mt_call_with_486_cnt++;
+					break;
+				  case 480:
+					dmf_custom_kpi_context[ps_id].mt_call_with_480_cnt++;
+					break;
+				  case 484:
+					dmf_custom_kpi_context[ps_id].mt_call_with_484_cnt++;
+					break;
+				  case 600:
+					dmf_custom_kpi_context[ps_id].mt_call_with_600_cnt++;
+					break;
+				  case 604:
+					dmf_custom_kpi_context[ps_id].mt_call_with_604_cnt++;
+					break;
+				  case 487:
+					dmf_custom_kpi_context[ps_id].mt_call_with_487_cnt++;
+					break;
+				  default:
+					break;
+			     }
+		   }
+		}
+	}
+
+}
+
+void dmf_custom_kpi_tau_statistics_update(protocol_id_enum ps_id,dmf_cmcc_tau_event_enum tau_event,kal_uint32 tau_reject_cause)
+{
+
+	dmf_custom_kpi_tau_max_count_report(ps_id);
+	
+	if (tau_event == DMF_CMCC_TAU_REQUEST_SENT)
+	{
+		dmf_custom_kpi_context[ps_id].tau_req_snd_cnt++;
+	}
+	else if (tau_event == DMF_CMCC_TAU_ACCEPT_RECEIVED)
+	{
+		dmf_custom_kpi_context[ps_id].tau_succ_cnt++;
+	}
+	else if (tau_event == DMF_CMCC_TAU_REJECT_RECEIVED)
+	{
+		switch(tau_reject_cause)
+		{
+			
+			case EMM_CAUSE_ILLEGAL_UE:
+				dmf_custom_kpi_context[ps_id].tau_fail_with_cause3_cnt++;
+				break;
+			case EMM_CAUSE_ILLEGAL_ME:
+				dmf_custom_kpi_context[ps_id].tau_fail_with_cause6_cnt++;
+				break;
+			case EMM_CAUSE_EPS_NOT_ALLOWED:
+				dmf_custom_kpi_context[ps_id].tau_fail_with_cause7_cnt++;
+				break;
+			case EMM_CAUSE_EPS_NON_EPS_NOT_ALLOWED:
+				dmf_custom_kpi_context[ps_id].tau_fail_with_cause8_cnt++;
+				break;
+			case EMM_CAUSE_UE_ID_NOT_DERIVED_BY_NW:
+				dmf_custom_kpi_context[ps_id].tau_fail_with_cause9_cnt++;
+				break;
+			case EMM_CAUSE_IMPLICIT_DETACH:
+				dmf_custom_kpi_context[ps_id].tau_fail_with_cause10_cnt++;
+				break;
+			case EMM_CAUSE_PLMN_NOT_ALLOWED:
+				dmf_custom_kpi_context[ps_id].tau_fail_with_cause11_cnt++;
+				break;
+			case EMM_CAUSE_TA_NOT_ALLOWED:
+				dmf_custom_kpi_context[ps_id].tau_fail_with_cause12_cnt++;
+				break;
+			case EMM_CAUSE_ROAMING_NOT_ALLOWED_IN_TA:
+				dmf_custom_kpi_context[ps_id].tau_fail_with_cause13_cnt++;
+				break;
+			case EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN:
+				dmf_custom_kpi_context[ps_id].tau_fail_with_cause14_cnt++;
+				break;
+			case EMM_CAUSE_NO_SUITABLE_CELL_IN_TA:
+				dmf_custom_kpi_context[ps_id].tau_fail_with_cause15_cnt++;
+				break;
+			case EMM_CAUSE_CONGESTION:
+				dmf_custom_kpi_context[ps_id].tau_fail_with_cause22_cnt++;
+				break;
+			case EMM_CAUSE_NOT_AUTH_FOR_CSG:
+				dmf_custom_kpi_context[ps_id].tau_fail_with_cause25_cnt++;
+				break;
+			case EMM_CAUSE_REQUEST_SERVICE_OPTION_NOT_AUTHORIZED_IN_PLMN:
+				dmf_custom_kpi_context[ps_id].tau_fail_with_cause35_cnt++;
+				break;
+			case EMM_CAUSE_NO_EPS_CTXT_ACT:
+				dmf_custom_kpi_context[ps_id].tau_fail_with_cause40_cnt++;
+				break;
+			case EMM_CAUSE_SEVERE_NW_FAILURE:
+				dmf_custom_kpi_context[ps_id].tau_fail_with_cause42_cnt++;
+				break;
+		}
+	}
+
+}
+
+void dmf_custom_kpi_mo_csfb_statistics_update(protocol_id_enum ps_id,dmf_cmcc_csfb_call_event_enum call_event,kal_uint16 fail_cause)
+{
+     dmf_custom_kpi_mo_csfb_max_count_report(ps_id);
+	
+	if (call_event == DMF_CMCC_MO_CSFB_EXT_SR_REQ_SENT)
+	{
+		dmf_custom_kpi_context[ps_id].mo_csfb_ext_sr_req_snd_cnt++;
+	}
+	else if (call_event == DMF_CMCC_MO_CSFB_SUCCESS)
+	{
+		dmf_custom_kpi_context[ps_id].mo_csfb_succ_cnt++;
+	}
+	else if (call_event == DMF_CMCC_MO_CSFB_FAIL)
+	{
+		dmf_custom_kpi_context[ps_id].mo_csfb_fail_cnt++;
+	}
+}
+
+void dmf_custom_kpi_mt_csfb_statistics_update(protocol_id_enum ps_id,dmf_cmcc_csfb_call_event_enum call_event,kal_uint16 fail_cause)
+{
+     dmf_custom_kpi_mt_csfb_max_count_report(ps_id);
+	
+	if (call_event == DMF_CMCC_MT_CSFB_CS_SERVICE_NOTIFICATION)
+	{
+		dmf_custom_kpi_context[ps_id].mt_csfb_cs_service_notification_rcv_cnt++;
+	}
+	else if(call_event == DMF_CMCC_MT_CSFB_CS_PAGING)
+	{
+	    dmf_custom_kpi_context[ps_id].mt_csfb_cs_paging_rcv_cnt++;
+	}
+	else if (call_event == DMF_CMCC_MT_CSFB_SUCCESS)
+	{
+		dmf_custom_kpi_context[ps_id].mt_csfb_succ_cnt++;
+	}
+	else if (call_event == DMF_CMCC_MT_CSFB_FAIL)
+	{
+		dmf_custom_kpi_context[ps_id].mt_csfb_fail_cnt++;
+	}
+}
+
+void dmf_custom_kpi_mo_sms_over_sgs_statistics_update(protocol_id_enum ps_id,dmf_cmcc_sms_event_enum sms_event,kal_uint32 fail_cause)
+{
+    dmf_custom_kpi_mo_sms_over_sgs_max_count_report(ps_id);
+	
+	if (sms_event == DMF_CMCC_SMS_OVER_SGS_MO_SMS_START)
+	{
+		dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_start_cnt++;
+	}
+	else if(sms_event == DMF_CMCC_SMS_OVER_SGS_MO_SMS_SUCCESS)
+	{
+	    dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_succ_cnt++;
+	}
+	else if (sms_event == DMF_CMCC_SMS_OVER_SGS_MO_SMS_FAIL)
+	{
+		dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_fail_cnt++;
+	}
+	
+}
+void dmf_custom_kpi_mt_sms_over_sgs_statistics_update(protocol_id_enum ps_id,dmf_cmcc_sms_event_enum sms_event,kal_uint32 fail_cause)
+{
+    dmf_custom_kpi_mt_sms_over_sgs_max_count_report(ps_id);
+	
+	if (sms_event == DMF_CMCC_SMS_OVER_SGS_MT_SMS_START)
+	{
+		dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_start_cnt++;
+	}
+	else if(sms_event == DMF_CMCC_SMS_OVER_SGS_MT_SMS_SUCCESS)
+	{
+	    dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_succ_cnt++;
+	}
+	else if (sms_event == DMF_CMCC_SMS_OVER_SGS_MT_SMS_FAIL)
+	{
+		dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_fail_cnt++;
+	}
+	
+}
+void dmf_custom_kpi_mo_sms_over_ims_statistics_update(protocol_id_enum ps_id,dmf_cmcc_sms_event_enum sms_event,kal_uint32 fail_cause)
+{
+    dmf_custom_kpi_mo_sms_over_ims_max_count_report(ps_id);
+	
+	if (sms_event == DMF_CMCC_SMS_OVER_IMS_MO_SMS_START)
+	{
+		dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_start_cnt++;
+	}
+	else if(sms_event == DMF_CMCC_SMS_OVER_IMS_MO_SMS_SUCCESS)
+	{
+	    dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_succ_cnt++;
+	}
+	else if (sms_event == DMF_CMCC_SMS_OVER_IMS_MO_SMS_FAIL)
+	{
+		dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_fail_cnt++;
+	}
+	
+}
+void dmf_custom_kpi_mt_sms_over_ims_statistics_update(protocol_id_enum ps_id,dmf_cmcc_sms_event_enum sms_event,kal_uint32 fail_cause)
+{
+    dmf_custom_kpi_mt_sms_over_ims_max_count_report(ps_id);
+	
+	if (sms_event == DMF_CMCC_SMS_OVER_IMS_MT_SMS_START)
+	{
+		dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_start_cnt++;
+	}
+	else if(sms_event == DMF_CMCC_SMS_OVER_IMS_MT_SMS_SUCCESS)
+	{
+	    dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_succ_cnt++;
+	}
+	else if (sms_event == DMF_CMCC_SMS_OVER_IMS_MT_SMS_FAIL)
+	{
+		dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_fail_cnt++;
+	}
+	
+}
+
+
+void dmf_custom_kpi_event_cmcc_eps_attach_info_handler(dmf_event_struct *event)
+{
+	
+	dmf_event_cmcc_eps_attach_struct *attach_info;
+	attach_info = (dmf_event_cmcc_eps_attach_struct*) event->data;
+	dmf_custom_kpi_eps_attach_statistics_update(event->ps_id,attach_info->attach_event,attach_info->attach_reject_cause);
+	dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);
+}
+void dmf_custom_kpi_event_cmcc_eps_bearer_info_handler(dmf_event_struct *event)
+{
+	
+	dmf_event_cmcc_eps_bearer_struct *eps_bearer_info;
+	eps_bearer_info = (dmf_event_cmcc_eps_bearer_struct*) event->data;
+	dmf_custom_kpi_act_default_eps_bearer_statistics_update(event->ps_id,eps_bearer_info->esm_eps_bearer_event);
+	dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);
+}
+
+void dmf_custom_kpi_event_cmcc_succ_rate_kpi_info_handler(dmf_event_struct *event)
+{
+	
+	dmf_event_cmcc_esrvcc_struct *errc_succ_rate_info;
+	dmf_cmcc_srvcc_event_enum srvcc_event = DMF_CMCC_SRVCC_NONE;
+	errc_succ_rate_info = (dmf_event_cmcc_esrvcc_struct*) event->data;
+	if((errc_succ_rate_info->proc_id == EM_ERRC_SUCCESS_RATE_KPI_IRAT_4G3_HO ||
+		errc_succ_rate_info->proc_id == EM_ERRC_SUCCESS_RATE_KPI_IRAT_4G2_HO) && 
+		errc_succ_rate_info->status == EM_KPI_STATUS_SUCCESS &&
+		dmf_custom_kpi_context[event->ps_id].srvcc_ho_flag == KAL_TRUE)
+	{
+		srvcc_event = DMF_CMCC_SRVCC_HO_COMPLETE_SENT;
+	}
+	dmf_custom_kpi_context[event->ps_id].srvcc_ho_flag = errc_succ_rate_info->srvcc_ho_flag;
+	if(srvcc_event != DMF_CMCC_SRVCC_NONE)
+	{
+		dmf_custom_kpi_srvcc_statistics_update(event->ps_id,srvcc_event);
+		dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);	
+	}
+	
+	
+}
+
+void dmf_custom_kpi_event_cmcc_errc_mfrom_info_handler(dmf_event_struct *event)
+{
+	
+	dmf_event_cmcc_errc_mfrom_struct *mfrom_info;
+	dmf_cmcc_srvcc_event_enum srvcc_event = DMF_CMCC_SRVCC_NONE;
+	mfrom_info = (dmf_event_cmcc_errc_mfrom_struct*) event->data;
+	dmf_custom_kpi_context[event->ps_id].srvcc_ho_flag = mfrom_info->srvcc_ho_flag;
+	if(mfrom_info->ir_ho_type == EM_HO_FROM_LTE_TYPE_SRVCC_HO || 
+		mfrom_info->ir_ho_type == EM_HO_FROM_LTE_TYPE_PS_SRVCC_HO)
+	{
+		srvcc_event = DMF_CMCC_SRVCC_HO_REQ_RECEIVED;
+	}
+	if(srvcc_event != DMF_CMCC_SRVCC_NONE)
+	{
+		dmf_custom_kpi_srvcc_statistics_update(event->ps_id,srvcc_event);
+		dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);	
+	}
+}
+
+
+void dmf_custom_kpi_event_cmcc_errc_srvcc_fail_info_handler(dmf_event_struct *event)
+{
+	dmf_event_cmcc_errc_srvcc_fail_struct *srvcc_fail_info;
+	dmf_cmcc_srvcc_event_enum srvcc_event = DMF_CMCC_SRVCC_NONE;
+	srvcc_fail_info = (dmf_event_cmcc_errc_srvcc_fail_struct*) event->data;
+	if(srvcc_fail_info->srvcc_fail_cause != EM_ERRC_SRVCC_FAIL_CAUSE_NONE)
+	{
+		srvcc_event = DMF_CMCC_SRVCC_HO_FAIL_SENT;
+	}
+	if(srvcc_event != DMF_CMCC_SRVCC_NONE)
+	{
+		dmf_custom_kpi_srvcc_statistics_update(event->ps_id,srvcc_event);
+		dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);	
+	}
+}
+
+
+void dmf_custom_kpi_event_cmcc_ims_reg_info_handler(dmf_event_struct *event)
+{
+	
+	dmf_event_cmcc_imc_ims_struct *ims_info;
+	ims_info = (dmf_event_cmcc_imc_ims_struct*) event->data;
+	dmf_custom_kpi_ims_reg_statistics_update(event->ps_id,ims_info->event_id);
+	dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);
+}
+
+
+
+void dmf_custom_kpi_event_cmcc_volte_call_drop_info_handler(dmf_event_struct *event)
+{
+	
+	dmf_event_cmcc_imc_ims_struct *volte_call_drop_info;
+	volte_call_drop_info = (dmf_event_cmcc_imc_ims_struct*) event->data;
+	dmf_custom_kpi_volte_call_drop_statistics_update(event->ps_id,volte_call_drop_info->event_id);
+	dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);
+}
+
+
+
+
+void dmf_custom_kpi_event_cmcc_mo_volte_call_info_handler(dmf_event_struct *event)
+{
+	
+	dmf_event_cmcc_imc_ims_struct *mo_volte_call_info;
+	mo_volte_call_info = (dmf_event_cmcc_imc_ims_struct*) event->data;
+	dmf_custom_kpi_mo_volte_call_statistics_update(event->ps_id,mo_volte_call_info);
+	dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);
+}
+
+
+void dmf_custom_kpi_event_cmcc_mt_volte_call_info_handler(dmf_event_struct *event)
+{
+	
+	dmf_event_cmcc_imc_ims_struct *mt_volte_call_info;
+	mt_volte_call_info = (dmf_event_cmcc_imc_ims_struct*) event->data;
+	dmf_custom_kpi_mt_volte_call_statistics_update(event->ps_id,mt_volte_call_info);
+	dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);
+}
+
+void dmf_custom_kpi_event_cmcc_tau_info_handler(dmf_event_struct *event)
+{
+	
+	dmf_event_cmcc_tau_struct *tau_info;
+	tau_info = (dmf_event_cmcc_tau_struct*) event->data;
+	dmf_custom_kpi_tau_statistics_update(event->ps_id,tau_info->tau_event,tau_info->tau_reject_cause);
+	dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);
+}
+void dmf_custom_kpi_event_cmcc_mo_csfb_info_handler(dmf_event_struct *event)
+{
+	
+	dmf_event_cmcc_csfb_call_info_struct *csfb_info;
+	csfb_info = (dmf_event_cmcc_csfb_call_info_struct*) event->data;
+	dmf_custom_kpi_mo_csfb_statistics_update(event->ps_id,csfb_info->call_event,csfb_info->fail_cause);
+	dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);
+}
+
+void dmf_custom_kpi_event_cmcc_mt_csfb_info_handler(dmf_event_struct *event)
+{
+	
+	dmf_event_cmcc_csfb_call_info_struct *csfb_info;
+	csfb_info = (dmf_event_cmcc_csfb_call_info_struct*) event->data;
+	dmf_custom_kpi_mt_csfb_statistics_update(event->ps_id,csfb_info->call_event,csfb_info->fail_cause);
+	dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);
+}
+void dmf_custom_kpi_event_cmcc_mo_sms_over_sgs_info_handler(dmf_event_struct *event)
+{
+	
+	dmf_event_cmcc_sms_info_struct *sms_info;
+	sms_info = (dmf_event_cmcc_sms_info_struct*) event->data;
+	dmf_custom_kpi_mo_sms_over_sgs_statistics_update(event->ps_id,sms_info->sms_event,sms_info->fail_cause);
+	dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);
+}
+
+void dmf_custom_kpi_event_cmcc_mt_sms_over_sgs_info_handler(dmf_event_struct *event)
+{
+	
+	dmf_event_cmcc_sms_info_struct *sms_info;
+	sms_info = (dmf_event_cmcc_sms_info_struct*) event->data;
+	dmf_custom_kpi_mt_sms_over_sgs_statistics_update(event->ps_id,sms_info->sms_event,sms_info->fail_cause);
+	dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);
+}
+
+void dmf_custom_kpi_event_cmcc_mo_sms_over_ims_info_handler(dmf_event_struct *event)
+{
+	
+	dmf_event_cmcc_sms_info_struct *sms_info;
+	sms_info = (dmf_event_cmcc_sms_info_struct*) event->data;
+	dmf_custom_kpi_mo_sms_over_ims_statistics_update(event->ps_id,sms_info->sms_event,sms_info->fail_cause);
+	dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);
+}
+
+void dmf_custom_kpi_event_cmcc_mt_sms_over_ims_info_handler(dmf_event_struct *event)
+{
+	
+	dmf_event_cmcc_sms_info_struct *sms_info;
+	sms_info = (dmf_event_cmcc_sms_info_struct*) event->data;
+	dmf_custom_kpi_mt_sms_over_ims_statistics_update(event->ps_id,sms_info->sms_event,sms_info->fail_cause);
+	dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);
+}
+
+void dmf_custom_kpi_at_query_lte_attach_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id)
+{	
+	
+	dmf_custom_kpi_lte_attach_count_cnf_struct attach_count_cnf;
+	attach_count_cnf.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	attach_count_cnf.kpi_id = DMF_KPI_LTE_ATTACH_SUCC_RATE;
+	attach_count_cnf.lte_attach_request_count = dmf_custom_kpi_context[ps_id].eps_attach_req_snd_cnt;
+	attach_count_cnf.lte_attach_success_count = dmf_custom_kpi_context[ps_id].eps_attach_succ_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause2_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause2_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause3_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause3_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause6_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause6_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause7_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause7_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause8_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause8_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause11_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause11_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause12_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause12_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause13_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause13_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause14_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause14_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause15_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause15_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause16_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause16_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause17_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause17_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause18_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause18_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause22_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause22_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause25_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause25_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause35_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause35_cnt;
+	attach_count_cnf.lte_attach_fail_with_cause42_count = dmf_custom_kpi_context[ps_id].eps_attach_fail_with_cause42_cnt;
+	dmf_send_at_rsp(ch_id,ps_id,DMF_CUST_KPI_APP_ID,PROXY_CMD_INTERMEDIATE_RSP,DMF_CUSTOM_KPI_LTE_ATTACH_COUNT_CNF,&attach_count_cnf, sizeof(dmf_custom_kpi_lte_attach_count_cnf_struct));
+	dmf_custom_kpi_reset_lte_attach_info_handler(ps_id);
+}
+
+
+
+void dmf_custom_kpi_at_query_act_default_eps_bearer_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id)
+{
+	
+	dmf_custom_kpi_act_default_eps_bearer_count_cnf_struct esm_count_cnf;
+	esm_count_cnf.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	esm_count_cnf.kpi_id = DMF_KPI_DEFAULT_EPS_BEARER_ESTABLISH_SUCC_RATE;
+	esm_count_cnf.esm_act_default_eps_bearer_req_rcv_count = dmf_custom_kpi_context[ps_id].act_default_bearer_req_rcv_cnt;
+	esm_count_cnf.esm_act_default_eps_bearer_accept_sent_count = dmf_custom_kpi_context[ps_id].act_default_bearer_accept_sent_cnt;
+	esm_count_cnf.esm_act_default_eps_bearer_reject_sent_count = dmf_custom_kpi_context[ps_id].act_default_bearer_reject_sent_cnt;
+	dmf_send_at_rsp(ch_id,ps_id,DMF_CUST_KPI_APP_ID,PROXY_CMD_INTERMEDIATE_RSP,DMF_CUSTOM_KPI_ACT_DEFAULT_EPS_BEARER_COUNT_CNF,&esm_count_cnf, sizeof(dmf_custom_kpi_act_default_eps_bearer_count_cnf_struct));
+	dmf_custom_kpi_reset_act_default_eps_bearer_info_handler(ps_id);
+}
+
+
+
+void dmf_custom_kpi_at_query_srvcc_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id)
+{
+	
+	dmf_custom_kpi_srvcc_count_cnf_struct srvcc_count_cnf;
+	srvcc_count_cnf.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	srvcc_count_cnf.kpi_id = DMF_KPI_ESRVCC_SUCC_RATE;
+	srvcc_count_cnf.srvcc_ho_req_rcv_count = dmf_custom_kpi_context[ps_id].srvcc_ho_req_rcv_cnt;
+	srvcc_count_cnf.srvcc_ho_succ_sent_count = dmf_custom_kpi_context[ps_id].srvcc_ho_succ_sent_cnt;
+	srvcc_count_cnf.srvcc_ho_fail_count = dmf_custom_kpi_context[ps_id].srvcc_ho_fail_cnt;
+	dmf_send_at_rsp(ch_id,ps_id,DMF_CUST_KPI_APP_ID,PROXY_CMD_INTERMEDIATE_RSP,DMF_CUSTOM_KPI_SRVCC_COUNT_CNF,&srvcc_count_cnf, sizeof(dmf_custom_kpi_srvcc_count_cnf_struct));
+	dmf_custom_kpi_reset_srvcc_info_handler(ps_id);
+}
+
+
+
+void dmf_custom_kpi_at_query_ims_reg_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id)
+{
+	
+	dmf_custom_kpi_ims_reg_count_cnf_struct ims_count_cnf;
+	ims_count_cnf.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	ims_count_cnf.kpi_id = DMF_KPI_IMS_REGISTRATION_SUCC_RATE;
+	ims_count_cnf.initial_reg_req_count = dmf_custom_kpi_context[ps_id].initial_reg_req_cnt;
+	ims_count_cnf.initial_reg_req_with_401_rsp_count = dmf_custom_kpi_context[ps_id].initial_reg_req_with_401_rsp_cnt;
+	ims_count_cnf.initial_reg_req_with_auc_count = dmf_custom_kpi_context[ps_id].initial_reg_req_with_auc_cnt;
+	ims_count_cnf.initial_reg_success_count = dmf_custom_kpi_context[ps_id].initial_reg_success_cnt;
+	dmf_send_at_rsp(ch_id,ps_id,DMF_CUST_KPI_APP_ID,PROXY_CMD_INTERMEDIATE_RSP,DMF_CUSTOM_KPI_IMS_REG_COUNT_CNF,&ims_count_cnf, sizeof(dmf_custom_kpi_ims_reg_count_cnf_struct));
+	dmf_custom_kpi_reset_ims_reg_info_handler(ps_id);
+}
+
+	
+void dmf_custom_kpi_at_query_volte_call_drop_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id)
+{
+	
+	dmf_custom_kpi_volte_call_drop_count_cnf_struct volte_call_drop_count_cnf;
+	volte_call_drop_count_cnf.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	volte_call_drop_count_cnf.kpi_id = DMF_KPI_VOLTE_CALL_DROP;
+	volte_call_drop_count_cnf.initial_rsp_count = dmf_custom_kpi_context[ps_id].initial_rsp_cnt;
+	volte_call_drop_count_cnf.final_rsp_count = dmf_custom_kpi_context[ps_id].final_rsp_cnt;
+	volte_call_drop_count_cnf.initial_call_drop_count = dmf_custom_kpi_context[ps_id].initial_call_drop_cnt;
+	volte_call_drop_count_cnf.final_call_drop_count = dmf_custom_kpi_context[ps_id].final_call_drop_cnt;
+	dmf_send_at_rsp(ch_id,ps_id,DMF_CUST_KPI_APP_ID,PROXY_CMD_INTERMEDIATE_RSP,DMF_CUSTOM_KPI_VOLTE_CALL_DROP_COUNT_CNF,&volte_call_drop_count_cnf, sizeof(dmf_custom_kpi_volte_call_drop_count_cnf_struct));
+	dmf_custom_kpi_reset_volte_call_drop_info_handler(ps_id);
+}
+
+
+
+void dmf_custom_kpi_at_query_mo_volte_call_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id)
+{
+	dmf_custom_kpi_mo_volte_call_count_cnf_struct mo_volte_call_count_cnf;
+	mo_volte_call_count_cnf.group_id=DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	mo_volte_call_count_cnf.kpi_id=DMF_KPI_MO_VOLTE_CALL_SUCC_RATE;
+	mo_volte_call_count_cnf.initial_mo_call_req_count = dmf_custom_kpi_context[ps_id].mo_call_req_cnt;
+	mo_volte_call_count_cnf.initial_mo_call_connect_to_nw_count = dmf_custom_kpi_context[ps_id].mo_call_connect_to_nw_cnt;
+	mo_volte_call_count_cnf.mo_call_early_release_count = dmf_custom_kpi_context[ps_id].mo_call_early_release_cnt;
+	mo_volte_call_count_cnf.mo_call_with_403_count = dmf_custom_kpi_context[ps_id].mo_call_with_403_cnt;
+	mo_volte_call_count_cnf.mo_call_with_486_count = dmf_custom_kpi_context[ps_id].mo_call_with_486_cnt; 
+	mo_volte_call_count_cnf.mo_call_with_480_count = dmf_custom_kpi_context[ps_id].mo_call_with_480_cnt;
+	mo_volte_call_count_cnf.mo_call_with_484_count = dmf_custom_kpi_context[ps_id].mo_call_with_484_cnt;
+	mo_volte_call_count_cnf.mo_call_with_600_count = dmf_custom_kpi_context[ps_id].mo_call_with_600_cnt;
+	mo_volte_call_count_cnf.mo_call_with_604_count = dmf_custom_kpi_context[ps_id].mo_call_with_604_cnt;
+	mo_volte_call_count_cnf.mo_call_with_487_count = dmf_custom_kpi_context[ps_id].mo_call_with_487_cnt;
+	dmf_send_at_rsp(ch_id,ps_id,DMF_CUST_KPI_APP_ID,PROXY_CMD_INTERMEDIATE_RSP,DMF_CUSTOM_KPI_MO_VOLTE_CALL_COUNT_CNF,&mo_volte_call_count_cnf, sizeof(dmf_custom_kpi_mo_volte_call_count_cnf_struct));
+	dmf_custom_kpi_reset_mo_volte_call_info_handler(ps_id);
+}
+
+
+
+
+void dmf_custom_kpi_at_query_mt_volte_call_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id)
+{
+	dmf_custom_kpi_mt_volte_call_count_cnf_struct mt_volte_call_count_cnf;
+	mt_volte_call_count_cnf.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	mt_volte_call_count_cnf.kpi_id = DMF_KPI_MT_VOLTE_CALL_SUCC_RATE;
+	mt_volte_call_count_cnf.initial_mt_call_req_count = dmf_custom_kpi_context[ps_id].mt_call_req_cnt;
+	mt_volte_call_count_cnf.mt_call_connect_success_count = dmf_custom_kpi_context[ps_id].mt_call_connect_success_cnt;
+	mt_volte_call_count_cnf.mt_call_early_release_count = dmf_custom_kpi_context[ps_id].mt_call_early_release_cnt;
+	mt_volte_call_count_cnf.mt_call_with_486_count = dmf_custom_kpi_context[ps_id].mt_call_with_486_cnt;
+	mt_volte_call_count_cnf.mt_call_with_403_count = dmf_custom_kpi_context[ps_id].mt_call_with_403_cnt;
+	mt_volte_call_count_cnf.mt_call_with_480_count = dmf_custom_kpi_context[ps_id].mt_call_with_480_cnt;
+	mt_volte_call_count_cnf.mt_call_with_484_count = dmf_custom_kpi_context[ps_id].mt_call_with_484_cnt;
+	mt_volte_call_count_cnf.mt_call_with_600_count = dmf_custom_kpi_context[ps_id].mt_call_with_600_cnt;
+	mt_volte_call_count_cnf.mt_call_with_604_count = dmf_custom_kpi_context[ps_id].mt_call_with_604_cnt;
+	mt_volte_call_count_cnf.mt_call_with_487_count = dmf_custom_kpi_context[ps_id].mt_call_with_487_cnt;
+	dmf_send_at_rsp(ch_id,ps_id,DMF_CUST_KPI_APP_ID,PROXY_CMD_INTERMEDIATE_RSP,DMF_CUSTOM_KPI_MT_VOLTE_CALL_COUNT_CNF,&mt_volte_call_count_cnf, sizeof(dmf_custom_kpi_mt_volte_call_count_cnf_struct));
+	dmf_custom_kpi_reset_mt_volte_call_info_handler(ps_id);
+}
+
+void dmf_custom_kpi_at_query_tau_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id)
+{	
+	
+	dmf_custom_kpi_tau_count_cnf_struct tau_count_cnf;
+	tau_count_cnf.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	tau_count_cnf.kpi_id = DMF_KPI_TAU_SUCC_RATE;
+	tau_count_cnf.tau_req_snd_count = dmf_custom_kpi_context[ps_id].tau_req_snd_cnt;
+	tau_count_cnf.tau_succ_count = dmf_custom_kpi_context[ps_id].tau_succ_cnt;
+	tau_count_cnf.tau_fail_with_cause3_count = dmf_custom_kpi_context[ps_id].tau_fail_with_cause3_cnt;
+	tau_count_cnf.tau_fail_with_cause6_count = dmf_custom_kpi_context[ps_id].tau_fail_with_cause6_cnt;
+	tau_count_cnf.tau_fail_with_cause7_count = dmf_custom_kpi_context[ps_id].tau_fail_with_cause7_cnt;
+	tau_count_cnf.tau_fail_with_cause8_count = dmf_custom_kpi_context[ps_id].tau_fail_with_cause8_cnt;
+	tau_count_cnf.tau_fail_with_cause9_count = dmf_custom_kpi_context[ps_id].tau_fail_with_cause9_cnt;
+	tau_count_cnf.tau_fail_with_cause10_count = dmf_custom_kpi_context[ps_id].tau_fail_with_cause10_cnt;
+	tau_count_cnf.tau_fail_with_cause11_count = dmf_custom_kpi_context[ps_id].tau_fail_with_cause11_cnt;
+	tau_count_cnf.tau_fail_with_cause12_count = dmf_custom_kpi_context[ps_id].tau_fail_with_cause12_cnt;
+	tau_count_cnf.tau_fail_with_cause13_count = dmf_custom_kpi_context[ps_id].tau_fail_with_cause13_cnt;
+	tau_count_cnf.tau_fail_with_cause14_count = dmf_custom_kpi_context[ps_id].tau_fail_with_cause14_cnt;
+	tau_count_cnf.tau_fail_with_cause15_count = dmf_custom_kpi_context[ps_id].tau_fail_with_cause15_cnt;
+	tau_count_cnf.tau_fail_with_cause22_count = dmf_custom_kpi_context[ps_id].tau_fail_with_cause22_cnt;
+	tau_count_cnf.tau_fail_with_cause25_count = dmf_custom_kpi_context[ps_id].tau_fail_with_cause25_cnt;
+	tau_count_cnf.tau_fail_with_cause35_count = dmf_custom_kpi_context[ps_id].tau_fail_with_cause35_cnt;
+	tau_count_cnf.tau_fail_with_cause40_count = dmf_custom_kpi_context[ps_id].tau_fail_with_cause40_cnt;
+	tau_count_cnf.tau_fail_with_cause42_count = dmf_custom_kpi_context[ps_id].tau_fail_with_cause42_cnt;
+	
+	dmf_send_at_rsp(ch_id,ps_id,DMF_CUST_KPI_APP_ID,PROXY_CMD_INTERMEDIATE_RSP,DMF_CUSTOM_KPI_TAU_COUNT_CNF,&tau_count_cnf, sizeof(dmf_custom_kpi_tau_count_cnf_struct));
+	dmf_custom_kpi_reset_tau_info_handler(ps_id);
+}
+
+void dmf_custom_kpi_at_query_mo_csfb_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id)
+{	
+	
+	dmf_custom_kpi_mo_csfb_count_cnf_struct mo_csfb_count_cnf;
+	mo_csfb_count_cnf.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	mo_csfb_count_cnf.kpi_id = DMF_KPI_MO_CSFB_SUCC_RATE;
+	mo_csfb_count_cnf.mo_csfb_ext_sr_req_snd_count = dmf_custom_kpi_context[ps_id].mo_csfb_ext_sr_req_snd_cnt;
+	mo_csfb_count_cnf.mo_csfb_succ_count = dmf_custom_kpi_context[ps_id].mo_csfb_succ_cnt;
+	mo_csfb_count_cnf.mo_csfb_fail_count = dmf_custom_kpi_context[ps_id].mo_csfb_fail_cnt;
+	dmf_send_at_rsp(ch_id,ps_id,DMF_CUST_KPI_APP_ID,PROXY_CMD_INTERMEDIATE_RSP,DMF_CUSTOM_KPI_MO_CSFB_COUNT_CNF,&mo_csfb_count_cnf, sizeof(dmf_custom_kpi_mo_csfb_count_cnf_struct));
+	dmf_custom_kpi_reset_mo_csfb_info_handler(ps_id);
+}
+
+void dmf_custom_kpi_at_query_mt_csfb_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id)
+{	
+	
+	dmf_custom_kpi_mt_csfb_count_cnf_struct mt_csfb_count_cnf;
+	mt_csfb_count_cnf.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	mt_csfb_count_cnf.kpi_id = DMF_KPI_MT_CSFB_SUCC_RATE;
+	mt_csfb_count_cnf.mt_csfb_cs_service_notification_rcv_count = dmf_custom_kpi_context[ps_id].mt_csfb_cs_service_notification_rcv_cnt;
+	mt_csfb_count_cnf.mt_csfb_cs_paging_rcv_count =dmf_custom_kpi_context[ps_id].mt_csfb_cs_paging_rcv_cnt;
+	mt_csfb_count_cnf.mt_csfb_succ_count = dmf_custom_kpi_context[ps_id].mt_csfb_succ_cnt;
+	mt_csfb_count_cnf.mt_csfb_fail_count = dmf_custom_kpi_context[ps_id].mt_csfb_fail_cnt;
+	dmf_send_at_rsp(ch_id,ps_id,DMF_CUST_KPI_APP_ID,PROXY_CMD_INTERMEDIATE_RSP,DMF_CUSTOM_KPI_MT_CSFB_COUNT_CNF,&mt_csfb_count_cnf, sizeof(dmf_custom_kpi_mt_csfb_count_cnf_struct));
+	dmf_custom_kpi_reset_mt_csfb_info_handler(ps_id);
+}
+void dmf_custom_kpi_at_query_mo_sms_over_sgs_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id)
+{	
+	
+	dmf_custom_kpi_mo_sms_over_sgs_count_cnf_struct mo_sms_over_sgs_count_cnf;
+	mo_sms_over_sgs_count_cnf.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	mo_sms_over_sgs_count_cnf.kpi_id = DMF_KPI_MO_SMS_OVER_SGS_SUCC_RATE;
+	mo_sms_over_sgs_count_cnf.sms_over_sgs_mo_sms_start_count = dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_start_cnt;
+	mo_sms_over_sgs_count_cnf.sms_over_sgs_mo_sms_succ_count = dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_succ_cnt;
+	mo_sms_over_sgs_count_cnf.sms_over_sgs_mo_sms_fail_count = dmf_custom_kpi_context[ps_id].sms_over_sgs_mo_sms_fail_cnt;
+	dmf_send_at_rsp(ch_id,ps_id,DMF_CUST_KPI_APP_ID,PROXY_CMD_INTERMEDIATE_RSP,DMF_CUSTOM_KPI_MO_SMS_OVER_SGS_COUNT_CNF,&mo_sms_over_sgs_count_cnf, sizeof(dmf_custom_kpi_mo_sms_over_sgs_count_cnf_struct));
+	dmf_custom_kpi_reset_mo_sms_over_sgs_info_handler(ps_id);
+}	
+
+void dmf_custom_kpi_at_query_mt_sms_over_sgs_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id)
+{	
+	
+	dmf_custom_kpi_mt_sms_over_sgs_count_cnf_struct mt_sms_over_sgs_count_cnf;
+	mt_sms_over_sgs_count_cnf.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	mt_sms_over_sgs_count_cnf.kpi_id = DMF_KPI_MT_SMS_OVER_SGS_SUCC_RATE;
+	mt_sms_over_sgs_count_cnf.sms_over_sgs_mt_sms_start_count = dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_start_cnt;
+	mt_sms_over_sgs_count_cnf.sms_over_sgs_mt_sms_succ_count = dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_succ_cnt;
+	mt_sms_over_sgs_count_cnf.sms_over_sgs_mt_sms_fail_count = dmf_custom_kpi_context[ps_id].sms_over_sgs_mt_sms_fail_cnt;
+	dmf_send_at_rsp(ch_id,ps_id,DMF_CUST_KPI_APP_ID,PROXY_CMD_INTERMEDIATE_RSP,DMF_CUSTOM_KPI_MT_SMS_OVER_SGS_COUNT_CNF,&mt_sms_over_sgs_count_cnf, sizeof(dmf_custom_kpi_mt_sms_over_sgs_count_cnf_struct));
+	dmf_custom_kpi_reset_mt_sms_over_sgs_info_handler(ps_id);
+}	
+
+void dmf_custom_kpi_at_query_mo_sms_over_ims_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id)
+{	
+	
+	dmf_custom_kpi_mo_sms_over_ims_count_cnf_struct mo_sms_over_ims_count_cnf;
+	mo_sms_over_ims_count_cnf.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	mo_sms_over_ims_count_cnf.kpi_id = DMF_KPI_MO_SMS_OVER_IMS_SUCC_RATE;
+	mo_sms_over_ims_count_cnf.sms_over_ims_mo_sms_start_count = dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_start_cnt;
+	mo_sms_over_ims_count_cnf.sms_over_ims_mo_sms_succ_count = dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_succ_cnt;
+	mo_sms_over_ims_count_cnf.sms_over_ims_mo_sms_fail_count = dmf_custom_kpi_context[ps_id].sms_over_ims_mo_sms_fail_cnt;
+	dmf_send_at_rsp(ch_id,ps_id,DMF_CUST_KPI_APP_ID,PROXY_CMD_INTERMEDIATE_RSP,DMF_CUSTOM_KPI_MO_SMS_OVER_IMS_COUNT_CNF,&mo_sms_over_ims_count_cnf, sizeof(dmf_custom_kpi_mo_sms_over_ims_count_cnf_struct));
+	dmf_custom_kpi_reset_mo_sms_over_ims_info_handler(ps_id);
+}	
+
+void dmf_custom_kpi_at_query_mt_sms_over_ims_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id)
+{	
+	
+	dmf_custom_kpi_mt_sms_over_ims_count_cnf_struct mt_sms_over_ims_count_cnf;
+	mt_sms_over_ims_count_cnf.group_id = DMF_GROUP_ID_CMCC_NETWORK_KPI;
+	mt_sms_over_ims_count_cnf.kpi_id = DMF_KPI_MT_SMS_OVER_SGS_SUCC_RATE;
+	mt_sms_over_ims_count_cnf.sms_over_ims_mt_sms_start_count = dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_start_cnt;
+	mt_sms_over_ims_count_cnf.sms_over_ims_mt_sms_succ_count = dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_succ_cnt;
+	mt_sms_over_ims_count_cnf.sms_over_ims_mt_sms_fail_count = dmf_custom_kpi_context[ps_id].sms_over_ims_mt_sms_fail_cnt;
+	dmf_send_at_rsp(ch_id,ps_id,DMF_CUST_KPI_APP_ID,PROXY_CMD_INTERMEDIATE_RSP,DMF_CUSTOM_KPI_MT_SMS_OVER_IMS_COUNT_CNF,&mt_sms_over_ims_count_cnf, sizeof(dmf_custom_kpi_mt_sms_over_ims_count_cnf_struct));
+	dmf_custom_kpi_reset_mt_sms_over_ims_info_handler(ps_id);
+}	
+
+
+
+void dmf_custom_kpi_at_query_handler(kal_uint16 ch_id, protocol_id_enum ps_id, kal_uint32 kpi_id)
+{	
+	kal_bool is_kpi_correct = KAL_FALSE;
+	if((kpi_id & DMF_KPI_LTE_ATTACH_SUCC_RATE) == DMF_KPI_LTE_ATTACH_SUCC_RATE)
+	{	
+		is_kpi_correct = KAL_TRUE;
+		dmf_custom_kpi_at_query_lte_attach_info_handler(ch_id,ps_id);
+	}
+	if((kpi_id & DMF_KPI_DEFAULT_EPS_BEARER_ESTABLISH_SUCC_RATE) == DMF_KPI_DEFAULT_EPS_BEARER_ESTABLISH_SUCC_RATE)
+	{	
+		is_kpi_correct = KAL_TRUE;
+		dmf_custom_kpi_at_query_act_default_eps_bearer_info_handler(ch_id,ps_id);
+	}
+	if((kpi_id & DMF_KPI_ESRVCC_SUCC_RATE) == DMF_KPI_ESRVCC_SUCC_RATE)
+    {
+		is_kpi_correct = KAL_TRUE;
+		dmf_custom_kpi_at_query_srvcc_info_handler(ch_id,ps_id);
+	}
+	if((kpi_id & DMF_KPI_IMS_REGISTRATION_SUCC_RATE) == DMF_KPI_IMS_REGISTRATION_SUCC_RATE)
+    {
+		is_kpi_correct = KAL_TRUE;
+		dmf_custom_kpi_at_query_ims_reg_info_handler(ch_id,ps_id);		
+	}
+	if((kpi_id & DMF_KPI_VOLTE_CALL_DROP) == DMF_KPI_VOLTE_CALL_DROP)
+    {
+		is_kpi_correct = KAL_TRUE;
+		dmf_custom_kpi_at_query_volte_call_drop_info_handler(ch_id,ps_id);
+			
+	}
+	if((kpi_id & DMF_KPI_MO_VOLTE_CALL_SUCC_RATE) == DMF_KPI_MO_VOLTE_CALL_SUCC_RATE)
+    {
+		is_kpi_correct = KAL_TRUE;
+		dmf_custom_kpi_at_query_mo_volte_call_info_handler(ch_id,ps_id);
+	}
+	if((kpi_id & DMF_KPI_MT_VOLTE_CALL_SUCC_RATE) == DMF_KPI_MT_VOLTE_CALL_SUCC_RATE)
+    {
+		is_kpi_correct = KAL_TRUE;
+		dmf_custom_kpi_at_query_mt_volte_call_info_handler(ch_id,ps_id);	
+	}
+	if((kpi_id & DMF_KPI_TAU_SUCC_RATE) == DMF_KPI_TAU_SUCC_RATE)
+    {
+		is_kpi_correct = KAL_TRUE;
+		dmf_custom_kpi_at_query_tau_info_handler(ch_id,ps_id);	
+	}
+	if((kpi_id & DMF_KPI_MO_CSFB_SUCC_RATE) == DMF_KPI_MO_CSFB_SUCC_RATE)
+    {
+		is_kpi_correct = KAL_TRUE;
+		dmf_custom_kpi_at_query_mo_csfb_info_handler(ch_id,ps_id);	
+	}
+	if((kpi_id & DMF_KPI_MT_CSFB_SUCC_RATE) == DMF_KPI_MT_CSFB_SUCC_RATE)
+    {
+		is_kpi_correct = KAL_TRUE;
+		dmf_custom_kpi_at_query_mt_csfb_info_handler(ch_id,ps_id);	
+	}
+	if((kpi_id & DMF_KPI_MO_SMS_OVER_SGS_SUCC_RATE) == DMF_KPI_MO_SMS_OVER_SGS_SUCC_RATE)
+    {
+		is_kpi_correct = KAL_TRUE;
+		dmf_custom_kpi_at_query_mo_sms_over_sgs_info_handler(ch_id,ps_id);	
+	}
+	if((kpi_id & DMF_KPI_MT_SMS_OVER_SGS_SUCC_RATE) == DMF_KPI_MT_SMS_OVER_SGS_SUCC_RATE)
+    {
+		is_kpi_correct = KAL_TRUE;
+		dmf_custom_kpi_at_query_mt_sms_over_sgs_info_handler(ch_id,ps_id);	
+	}
+	if((kpi_id & DMF_KPI_MO_SMS_OVER_IMS_SUCC_RATE) == DMF_KPI_MO_SMS_OVER_IMS_SUCC_RATE)
+    {
+		is_kpi_correct = KAL_TRUE;
+		dmf_custom_kpi_at_query_mo_sms_over_ims_info_handler(ch_id,ps_id);	
+	}
+	if((kpi_id & DMF_KPI_MT_SMS_OVER_IMS_SUCC_RATE) == DMF_KPI_MT_SMS_OVER_IMS_SUCC_RATE)
+    {
+		is_kpi_correct = KAL_TRUE;
+		dmf_custom_kpi_at_query_mt_sms_over_ims_info_handler(ch_id,ps_id);	
+	}
+	
+	if(is_kpi_correct == KAL_TRUE)
+	{
+		dmf_send_at_final_rsp(ch_id, ps_id, DMF_CUST_KPI_APP_ID, PROXY_CMD_SUCCESS);
+		is_kpi_correct = KAL_FALSE;
+	}
+	else
+	{
+		dmf_send_at_final_rsp(ch_id, ps_id, DMF_CUST_KPI_APP_ID, PROXY_CMD_FAIL);
+	}
+}
+
+
+
+
+void dmf_custom_kpi_handler(protocol_id_enum ps_id,atp_mt_dmf_cmd_req_struct *req_struct)
+{
+	switch(req_struct->p.custom_kpi_app_cmd_req.urc_query)
+	{
+			
+		case DMF_KPI_NETWORK_KPI_QUERY:
+			dmf_custom_kpi_at_query_handler(req_struct->ch_id,ps_id,req_struct->p.custom_kpi_app_cmd_req.kpi_id);
+			break;
+		default:
+			dmf_send_at_final_rsp(req_struct->ch_id, ps_id, DMF_CUST_KPI_APP_ID, PROXY_CMD_FAIL);
+			break;
+				
+	}		
+}
+
+
+kal_bool dmf_custom_kpi_at_req_handler(atp_mt_dmf_cmd_req_struct *req_struct,protocol_id_enum ps_id)
+{
+	if (req_struct->app_id == DMF_CUST_KPI_APP_ID)
+	{
+		switch(req_struct->p.custom_kpi_app_cmd_req.group_id)
+		{
+			case DMF_GROUP_ID_CMCC_NETWORK_KPI:
+				dmf_custom_kpi_handler(ps_id,req_struct);
+				break;
+			case DMF_GROUP_ID_CMCC_NR_NETWORK_KPI:
+				dmf_custom_nr_kpi_handler(ps_id,req_struct);
+				break;
+			default:
+				dmf_send_at_final_rsp(req_struct->ch_id, ps_id, req_struct->app_id, PROXY_CMD_FAIL);
+				break;
+		}
+		return KAL_TRUE;
+	}
+
+	return KAL_FALSE;
+	
+}
+
+#endif
+#endif
+
+
diff --git a/mcu/custom/protocol/common/ps/custom_dmf_kpi_app_reg.h b/mcu/custom/protocol/common/ps/custom_dmf_kpi_app_reg.h
new file mode 100644
index 0000000..17cc43f
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_dmf_kpi_app_reg.h
@@ -0,0 +1,93 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ * custom_dmf_kpi_app_reg.h
+ *
+ * Project:
+ * --------
+ * UMOLYA
+ *
+ * Description:
+ * ------------
+ * DM Framework - Reigster needed EM/Peer/ICD and its handler function.
+ * 
+ * Author:
+ * -------
+ *
+ *
+ *
+ * ==========================================================================
+ * $Log$
+ *
+ *
+ *
+ ****************************************************************************/
+#ifndef DMF_REG_EM
+#define DMF_REG_EM(EM_INFO, EM_MSG_ID, HDLR)
+#endif
+#ifndef DMF_REG_PEER
+#define DMF_REG_PEER(PEER_ID, HDLR)
+#endif
+#ifndef DMF_REG_ICD_EVENT
+#define DMF_REG_ICD_EVENT(ICD_EVENT_CODE, HDLR)
+#endif
+#ifndef DMF_REG_ICD_RECORD
+#define DMF_REG_ICD_RECORD(ICD_RECORD_CODE, HDLR)
+#endif
+
+//Register EM and corresponding handler function
+
+// DMF_REG_EM(EMM_EM_REG_EVENT_INFO, MSG_ID_EM_EMM_REG_EVENT_INFO_IND, dmf_custom_kpi_emm_em_reg_event_info_handler)
+
+//Register Peer Message and corresponding handler function
+//DMF_REG_PEER(PROTOCOL_SECTION__LTE_RRC_PCCH, dmf_info_collect_sample_handler)
+
+#ifdef __ICD_LOGGING_SUPPORT__
+//Register ICD Event and corresponding handler function
+//DMF_REG_ICD_EVENT(ICD_ENAS_ESM_OTA_EVENT, dmf_info_collect_sample_handler)
+
+//Register ICD Record and corresponding handler function
+//DMF_REG_ICD_RECORD(ICD_ENAS_OTA_MESSAGE, dmf_info_collect_sample_handler)
+
+#endif /* __ICD_LOGGING_SUPPORT__ */
+
+#undef DMF_REG_EM
+#undef DMF_REG_PEER
+#undef DMF_REG_ICD_EVENT
+#undef DMF_REG_ICD_RECORD
diff --git a/mcu/custom/protocol/common/ps/custom_dmf_nr_kpi_app_hdlr.c b/mcu/custom/protocol/common/ps/custom_dmf_nr_kpi_app_hdlr.c
new file mode 100644
index 0000000..44e7c2b
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_dmf_nr_kpi_app_hdlr.c
@@ -0,0 +1,152 @@
+
+#ifdef __DMF_SUPPORT__
+#ifdef __DMF_OP01_NW_KPI__
+
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "kal_public_defs.h"
+#include "sim_exported_enum.h"
+#include "mte_if.h"
+#include "svc_sap.h"
+#include "l3_inc_enums.h"
+#include "atp_dmf_struct.h"
+#include "custom_dmf_app.h"
+#include "custom_dmf_kpi_app.h"
+#include "dmf_public_event.h"
+#include "dmf_public_api.h"
+#include "dmf_public_def.h"
+#include "em_emm_public_struct.h"
+#include "em_esm_public_struct.h"
+#include "em_errc_public_struct.h"
+#include "mtf_nvram_def.h"
+#include "nvram_struct.h"
+#include "nvram_msgid.h"
+#include "NRRC_SCG_RECONFIGURATION_EVENT.h"
+
+
+void dmf_custom_nr_kpi_handler(protocol_id_enum ps_id,atp_mt_dmf_cmd_req_struct *req_struct)
+{
+	switch(req_struct->p.custom_kpi_app_cmd_req.urc_query)
+	{
+			
+		case DMF_KPI_NETWORK_KPI_QUERY:
+			dmf_custom_nr_kpi_at_query_handler(req_struct->ch_id,ps_id,req_struct->p.custom_kpi_app_cmd_req.kpi_id);
+			break;
+		default:
+			dmf_send_at_final_rsp(req_struct->ch_id, ps_id, DMF_CUST_KPI_APP_ID, PROXY_CMD_FAIL);
+			break;
+				
+	}		
+}
+void  dmf_custom_kpi_reset_add_scg_info_handler(protocol_id_enum ps_id)
+{	
+    dmf_custom_kpi_context[ps_id].add_scg_req_cnt = 0;
+	dmf_custom_kpi_context[ps_id].add_scg_succ_cnt = 0;
+	dmf_custom_kpi_context[ps_id].add_scg_fail_cnt = 0;
+	dmf_custom_kpi_update_statistics_to_nvram(ps_id);
+	
+}
+
+void dmf_custom_kpi_add_scg_max_count_report(protocol_id_enum ps_id)
+{
+    dmf_custom_kpi_add_scg_max_count_urc_ind_struct add_scg_max_count_urc_ind;
+	kal_mem_set(&add_scg_max_count_urc_ind, 0, sizeof(dmf_custom_kpi_add_scg_max_count_urc_ind_struct));
+	if(dmf_custom_kpi_context[ps_id].add_scg_req_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].add_scg_succ_cnt == DMF_KPI_MAX_COUNT_NUM ||
+	   dmf_custom_kpi_context[ps_id].add_scg_fail_cnt == DMF_KPI_MAX_COUNT_NUM)
+	{
+	   add_scg_max_count_urc_ind.group_id = DMF_GROUP_ID_CMCC_NR_NETWORK_KPI;
+	   add_scg_max_count_urc_ind.kpi_id = DMF_KPI_ADD_SCG_SUCC_RATE;
+	   add_scg_max_count_urc_ind.add_scg_req_cnt = dmf_custom_kpi_context[ps_id].add_scg_req_cnt;
+	   add_scg_max_count_urc_ind.add_scg_succ_cnt = dmf_custom_kpi_context[ps_id].add_scg_succ_cnt;
+	   add_scg_max_count_urc_ind.add_scg_fail_cnt = dmf_custom_kpi_context[ps_id].add_scg_fail_cnt;
+	   dmf_send_at_urc(DMF_CUST_KPI_APP_ID, ps_id, DMF_CUSTOM_KPI_ADD_SCG_MAX_COUNT_URC_IND, &add_scg_max_count_urc_ind, sizeof(dmf_custom_kpi_add_scg_max_count_urc_ind_struct));
+	   dmf_custom_kpi_reset_add_scg_info_handler(ps_id);
+	}
+}
+
+void dmf_custom_kpi_add_scg_statistics_update(protocol_id_enum ps_id,dmf_cmcc_add_scg_event_enum scg_event,kal_uint8 fail_cause)
+{
+    dmf_custom_kpi_add_scg_max_count_report(ps_id);
+	
+	if (scg_event == DMF_CMCC_ADD_SCG_BEGIN)
+	{
+		dmf_custom_kpi_context[ps_id].add_scg_req_cnt++;
+	}
+	else if(scg_event == DMF_CMCC_ADD_SCG_SUCCESS)
+	{
+	    dmf_custom_kpi_context[ps_id].add_scg_succ_cnt++;
+	}
+	else if(scg_event == DMF_CMCC_ADD_SCG_FAIL)
+	{
+	    dmf_custom_kpi_context[ps_id].add_scg_fail_cnt++;
+	}
+	
+}
+
+void dmf_custom_kpi_event_cmcc_add_scg_info_handler(dmf_event_struct *event)
+{
+     protocol_id_enum ps_id;
+	 icd_nrrc_scg_reconfiguration_info_struct_v2 *scg_info;
+	 dmf_cmcc_add_scg_event_enum scg_event = DMF_CMCC_ADD_SCG_NONE;
+	 ps_id = event->ps_id;
+	 scg_info = (icd_nrrc_scg_reconfiguration_info_struct_v2*) event->data;
+	 if((scg_info->reconfiguration_type&0x01) == 0x01)
+	 {
+	     if(scg_info->procedure_status == 0)
+	     {   
+	        scg_event = DMF_CMCC_ADD_SCG_BEGIN;
+		 }
+		 else if(scg_info->procedure_status == 1)
+	     {   
+	        scg_event = DMF_CMCC_ADD_SCG_SUCCESS;
+		 }
+		 else if(scg_info->procedure_status == 2)
+	     {   
+	        scg_event = DMF_CMCC_ADD_SCG_FAIL;
+		 }
+	 }
+	 if(scg_event != DMF_CMCC_ADD_SCG_NONE)
+	 {
+	    dmf_custom_kpi_add_scg_statistics_update(ps_id,scg_event,0);
+	    dmf_custom_kpi_update_statistics_to_nvram(event->ps_id);
+	 }
+}
+
+
+void dmf_custom_kpi_at_query_add_scg_info_handler(kal_uint16 ch_id,protocol_id_enum ps_id)
+{	
+	
+	dmf_custom_kpi_add_scg_count_cnf_struct add_scg_count_cnf;
+	add_scg_count_cnf.group_id = DMF_GROUP_ID_CMCC_NR_NETWORK_KPI;
+	add_scg_count_cnf.kpi_id = DMF_KPI_ADD_SCG_SUCC_RATE;
+	add_scg_count_cnf.add_scg_req_count = dmf_custom_kpi_context[ps_id].add_scg_req_cnt;
+	add_scg_count_cnf.add_scg_succ_count = dmf_custom_kpi_context[ps_id].add_scg_succ_cnt;
+	add_scg_count_cnf.add_scg_fail_count = dmf_custom_kpi_context[ps_id].add_scg_fail_cnt;
+	dmf_send_at_rsp(ch_id,ps_id,DMF_CUST_KPI_APP_ID,PROXY_CMD_INTERMEDIATE_RSP,DMF_CUSTOM_KPI_ADD_SCG_COUNT_CNF,&add_scg_count_cnf, sizeof(dmf_custom_kpi_add_scg_count_cnf_struct));
+	dmf_custom_kpi_reset_add_scg_info_handler(ps_id);
+}
+
+
+
+void dmf_custom_nr_kpi_at_query_handler(kal_uint16 ch_id, protocol_id_enum ps_id, kal_uint32 kpi_id)
+{	
+	kal_bool is_kpi_correct = KAL_FALSE;
+	if((kpi_id & DMF_KPI_ADD_SCG_SUCC_RATE) == DMF_KPI_ADD_SCG_SUCC_RATE)
+	{	
+		is_kpi_correct = KAL_TRUE;
+		dmf_custom_kpi_at_query_add_scg_info_handler(ch_id,ps_id);
+	}
+	if(is_kpi_correct == KAL_TRUE)
+	{
+		dmf_send_at_final_rsp(ch_id, ps_id, DMF_CUST_KPI_APP_ID, PROXY_CMD_SUCCESS);
+		is_kpi_correct = KAL_FALSE;
+	}
+	else
+	{
+		dmf_send_at_final_rsp(ch_id, ps_id, DMF_CUST_KPI_APP_ID, PROXY_CMD_FAIL);
+	}
+}
+
+#endif
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_eas_config.c b/mcu/custom/protocol/common/ps/custom_eas_config.c
new file mode 100644
index 0000000..b788a57
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_eas_config.c
@@ -0,0 +1,1673 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_eas_config.c
+ *
+ * Project:
+ * --------
+ *   MONZA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the EAS configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#include "custom_eas_config.h"
+
+/*4G Background Search interval parameter setting:
+  Any modification for these value should according to the defined range.
+  Otherwise,MD will use the default value instead of setting value.
+  Please noted that the maximum value should greater or equal to the initial value.
+  NOTE: You may set the delta value to ZERO for fix interval.
+*/  
+kal_uint8 lte_bgsrch_intv_para[]={  2,/*Initial value(minutes),range:(2..120),default value:2*/
+                                  120,/*Maximum value(minutes),range:(2..120),default value:120*/
+                                   10 /*Delta value(minutes),  range:(0..5)  ,default value:1*/
+                                  };
+
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_bgsrch_intv_para
+* DESCRIPTION
+*   The function gives 4G background search interval parameters.
+*
+* PARAMETERS
+*  The output value pointers
+* RETURNS
+*  void
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+void eas_custom_get_bgsrch_intv_para(kal_uint8 *a_intv_init_ptr,
+                                     kal_uint8 *a_intv_max_ptr,
+                                     kal_uint8 *a_intv_delta_ptr )
+{
+    if (a_intv_init_ptr)
+    {
+        *a_intv_init_ptr  = lte_bgsrch_intv_para[0];
+    }
+    if (a_intv_max_ptr)
+    {
+        *a_intv_max_ptr   = lte_bgsrch_intv_para[1];
+    }
+    if (a_intv_delta_ptr)
+    {
+        *a_intv_delta_ptr = lte_bgsrch_intv_para[2];
+    }
+
+}                                                                       
+
+/* CT special mininum RSRP for S-crit*/
+#define CUSTOM_CT_CELL_MIN_RSRP    -500
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_ct_min_rsrp
+* DESCRIPTION
+*   The function can be set for CT cell min-RSRP camping criteria
+* RETURNS
+*  kal_int16
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_int16 eas_custom_get_ct_min_rsrp()
+{
+	return (kal_int16)CUSTOM_CT_CELL_MIN_RSRP;
+}   
+
+/* Elevator mode ping-pong enhancement mininum RSRP for S-crit*/
+kal_bool eas_custom_elevator_mode_ping_pong_enh_enable = KAL_FALSE;
+#define CUSTOM_ELEVATOR_MODE_PING_PONG_ENH_MIN_RSRP    -440  /* the unit is QdB */
+
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_elevator_mode_ping_pong_enh_enable
+* DESCRIPTION
+*   The function is check whether will use customize RSRP value in elevator mode 
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool eas_custom_get_elevator_mode_ping_pong_enh_enable()
+{
+	return eas_custom_elevator_mode_ping_pong_enh_enable;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_elevator_mode_ping_pong_enh_min_rsrp
+* DESCRIPTION
+*   The function can be set for elevator mode cell min-RSRP camping criteria
+* RETURNS
+*  kal_int16
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_int16 eas_custom_get_elevator_mode_ping_pong_enh_min_rsrp()
+{
+	return (kal_int16)CUSTOM_ELEVATOR_MODE_PING_PONG_ENH_MIN_RSRP;
+}
+
+/* SA LTE PREFER custom threshold mininum RSRP */
+kal_bool eas_custom_sa_lte_prefer_custom_threshold_enable = KAL_TRUE;
+#define CUSTOM_SA_LTE_PREFER_CUSTOM_THRESHOLD_MIN_RSRP    -440  /* the unit is QdB */
+
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_sa_lte_prefer_custom_threshold_enable
+* DESCRIPTION
+*   The function is check whether will use customize RSRP value 
+*   for sa lte prefer in idle reselection judge 
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool eas_custom_get_sa_lte_prefer_custom_threshold_enable()
+{
+	return eas_custom_sa_lte_prefer_custom_threshold_enable;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_sa_lte_prefer_custom_threshold_min_rsrp
+* DESCRIPTION
+*   The function can be set for sa lte prefer in idle reselection judge
+* RETURNS
+*  kal_int16
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_int16 eas_custom_get_sa_lte_prefer_custom_threshold_min_rsrp()
+{
+	return (kal_int16)CUSTOM_SA_LTE_PREFER_CUSTOM_THRESHOLD_MIN_RSRP;
+} 
+
+/* IR to LTE custom threshold mininum RSRP for S-crit*/
+kal_bool eas_custom_irtolte_custom_threshold_enable = KAL_TRUE;
+#define CUSTOM_IRTOLTE_CUSTOM_THRESHOLD_MIN_RSRP    -440  /* the unit is QdB */
+
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_irtolte_custom_threshold_enable
+* DESCRIPTION
+*   The function is check whether will use customize RSRP value for IR to LTE 
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool eas_custom_get_irtolte_custom_threshold_enable()
+{
+	return eas_custom_irtolte_custom_threshold_enable;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_irtolte_custom_threshold_min_rsrp
+* DESCRIPTION
+*   The function can be set for IR to LTE cell min-RSRP camping criteria
+* RETURNS
+*  kal_int16
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_int16 eas_custom_get_irtolte_custom_threshold_min_rsrp()
+{
+	return (kal_int16)CUSTOM_IRTOLTE_CUSTOM_THRESHOLD_MIN_RSRP;
+} 
+
+/* tau avoid reject time*/
+#define CUSTOM_TAU_REJ_TIME_IN_S    300
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_tau_rej_time
+* DESCRIPTION
+*   The function can be set for tau avoid reject time
+* RETURNS
+*  kal_uint16
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint16 eas_custom_get_tau_rej_time()
+{
+	return (kal_uint16)CUSTOM_TAU_REJ_TIME_IN_S;
+}
+
+#if defined (__AS_SPECIFIC_CHANNEL_SRCH__)|| defined(UNIT_TEST)
+kal_bool eas_custom_specific_channel_srch = KAL_FALSE;
+
+/**
+ * The specific channels
+ * How to use:
+ * Max number is define in NUM_OF_LTE_SPECIFIC_CHANNELS.
+ * If user only want to config EARFCNs less than NUM_OF_LTE_SPECIFIC_CHANNELS in some band, just fill invalid EARFCN.
+ * For example, if band 1 only need 3 EARFCNs, just fill {300,301,302,0xFFFFFFFF}
+ */
+
+#define NUM_OF_LTE_SPECIFIC_CHANNELS    4
+#define NUM_OF_LTE_SPECIFIC_BANDS      25
+
+EARFCN specific_earfcn[NUM_OF_LTE_SPECIFIC_BANDS][NUM_OF_LTE_SPECIFIC_CHANNELS]     = 
+{
+    {  300,  301,  302,  500}, /* band  1 */
+    {  900,  901,  902,  903}, /* band  2 */
+    { 1575, 1576, 1577, 1578}, /* band  3 */
+    { 2175, 2176, 2177, 2178}, /* band  4 */
+    { 2525, 2526, 2527, 2528}, /* band  5 */
+    { 2700, 2701, 2702, 2703}, /* band  6 */
+    { 3100, 3101, 3102, 3103}, /* band  7 */
+    { 3625, 3626, 3627, 3628}, /* band  8 */
+    { 3975, 3976, 3977, 3978}, /* band  9 */
+    { 4450, 4451, 4452, 4453}, /* band 10 */
+    { 4850, 4851, 4852, 4853}, /* band 11 */
+    { 5095, 5096, 5097, 5098}, /* band 12 */
+    { 5230, 5231, 5232, 5233}, /* band 13 */
+    { 5330, 5331, 5332, 5333}, /* band 14 */
+    {LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN}, /* band 15 */
+    {LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN}, /* band 16 */
+    { 5790, 5791, 5792, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN}, /* band 17 */
+    {LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN}, /* band 18 */
+    { 6075, 6076, 6077, 6078}, /* band 19 */
+    { 6300, 6301, 6302, 6303}, /* band 20 */
+    { 6525, 6526, 6527, 6528}, /* band 21 */
+    {LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN}, /* band 22 */
+    {LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN}, /* band 23 */
+    {LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN, LTE_SPECIFIC_CHANNELS_INVALID_EARFCN}, /* band 24 */
+    { 8365, 8366, 8367, 8368}  /* band 25 */
+};
+
+
+/* get invalid earfcn define*/
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_specific_channels_invalid_earfcn
+* DESCRIPTION
+*   get invalid earfcn define
+* RETURNS
+*  earfcn
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+EARFCN eas_custom_get_specific_channels_invalid_earfcn()
+{
+    return (EARFCN)LTE_SPECIFIC_CHANNELS_INVALID_EARFCN;
+}
+#endif
+
+#ifdef __LTE_R11__
+/* FGI black list. If you want to disable some specific FGI, please set associated bit to 1. */
+const eas_custom_fgi_blacklist_plmn_config CUSTOM_FGI_BLACKLIST_PLMN_CFG[] = 
+{
+    /*PLMN id, fgi-fdd1~32 MSB=fgi1, fgi-tdd1~32 MSB=fgi1, fgifdd33~41 MSB=fgi33, fgitdd33~41 MSB=fgi33, fgifdd101~116 MSB=101, fgitdd101~116 MSB=101 */
+    {"46000F", 0x00000000,           0x00000000,           0x00000000,            0x00000000,            0x00000000,            0x00000000 },  // CMCC, China
+    {"46002F", 0x00000000,           0x00000000,           0x00000000,            0x00000000,            0x00000000,            0x00000000 },  // CMCC, China
+    {"46004F", 0x00000000,           0x00000000,           0x00000000,            0x00000000,            0x00000000,            0x00000000 },  // CMCC, China
+    {"46007F", 0x00000000,           0x00000000,           0x00000000,            0x00000000,            0x00000000,            0x00000000 },  // CMCC, China
+    {"46008F", 0x00000000,           0x00000000,           0x00000000,            0x00000000,            0x00000000,            0x00000000 },  // CMCC, China
+
+    /* below is an example to disable FGI 8, 22, 27, 33, 114 */
+    //{"46601F", 0x01000420,           0x01000420,           0x80000000,            0x80000000,            0x00040000,            0x00040000 },  // FET
+
+    {"FFFFFF", 0x00000000,           0x00000000,           0x00000000,            0x00000000,            0x00000000,            0x00000000 }   // END (don't touch and put your new entry above this line)
+};
+
+const kal_uint32 CUSTOM_FGI_BLACKLIST_PLMN_CFG_NUM = sizeof(CUSTOM_FGI_BLACKLIST_PLMN_CFG)/sizeof(eas_custom_fgi_blacklist_plmn_config);
+
+
+/* FGI black list for HPLMN. If you want to disable some specific FGI, please set associated bit to 1. */
+const eas_custom_fgi_blacklist_plmn_config CUSTOM_FGI_BLACKLIST_HPLMN_CFG[] = 
+{
+    /*PLMN id, fgi-fdd1~32 MSB=fgi1, fgi-tdd1~32 MSB=fgi1, fgifdd33~41 MSB=fgi33, fgitdd33~41 MSB=fgi33, fgifdd101~116 MSB=101, fgitdd101~116 MSB=101 */
+    {"46000F", 0x00000000,           0x00000000,           0x00000000,            0x00000000,            0x00000000,            0x00000000 },  // CMCC, China
+    {"46002F", 0x00000000,           0x00000000,           0x00000000,            0x00000000,            0x00000000,            0x00000000 },  // CMCC, China
+    {"46004F", 0x00000000,           0x00000000,           0x00000000,            0x00000000,            0x00000000,            0x00000000 },  // CMCC, China
+    {"46007F", 0x00000000,           0x00000000,           0x00000000,            0x00000000,            0x00000000,            0x00000000 },  // CMCC, China
+    {"46008F", 0x00000000,           0x00000000,           0x00000000,            0x00000000,            0x00000000,            0x00000000 },  // CMCC, China
+
+    /* below is an example to disable FGI 8, 22, 27, 33, 114 */
+    //{"46601F", 0x01000420,           0x01000420,           0x80000000,            0x80000000,            0x00040000,            0x00040000 },  // FET
+
+    {"FFFFFF", 0x00000000,           0x00000000,           0x00000000,            0x00000000,            0x00000000,            0x00000000 }   // END (don't touch and put your new entry above this line)
+};
+
+const kal_uint32 CUSTOM_FGI_BLACKLIST_HPLMN_CFG_NUM = sizeof(CUSTOM_FGI_BLACKLIST_HPLMN_CFG)/sizeof(eas_custom_fgi_blacklist_plmn_config);
+
+/*******************************************************************************
+ * Allowed to customize HSR (High Speed Railway) specific PLMN Identities here.
+ * By referring to this data, UE decides to start corresponding enhancement 
+ * mechanism or not.
+ ******************************************************************************/
+const custom_hsr_plmn_list CUSTOM_HSR_PLMN_LIST[] = 
+{
+    {"46000F"}, /*{"46002F"},*/ {"46004F"}, /*{"46007F"}, {"46008F"},*/  // CMCC, China
+    {"46001F"}, /*{"46006F"}, {"46009F"},*/                              // CU, China
+
+#ifdef UNIT_TEST
+    {"00131F"}, {"00132F"}, {"00133F"}, {"00134F"}, {"00135F"},
+    {"00136F"}, {"00137F"}, {"00138F"}, {"00139F"}, {"00140F"},
+    {"00141F"}, {"00142F"}, {"00143F"}, {"00144F"}, {"00145F"},
+    {"00146F"}, {"00147F"}, {"00148F"}, {"00149F"}, {"00150F"},
+    {"00151F"}, {"00152F"}, {"00153F"}, {"00154F"}, {"00155F"},
+    {"00156F"}, {"00157F"}, {"00158F"}, {"00159F"}, {"00160F"},
+    {"00161F"}, {"00162F"}, {"00163F"}, {"00164F"}, {"00165F"},
+    {"00166F"}, {"00167F"}, {"00168F"}, {"00169F"}, {"00170F"},
+    {"00171F"}, {"00172F"}, {"00173F"}, {"00174F"}, {"00175F"},
+    {"00176F"}, {"00177F"}, {"00178F"}, {"00179F"}, {"00180F"},
+#endif
+
+    {"FFFFFF"}   // END (don't touch and put your new entry above this line)
+};
+
+const kal_uint32 CUSTOM_HSR_PLMN_LIST_NUM = sizeof(CUSTOM_HSR_PLMN_LIST)/sizeof(custom_hsr_plmn_list);
+
+/*******************************************************************************
+ * when encounter the plmn list in this table, UE will disable the CA feature 
+ ******************************************************************************/
+const custom_ca_disable_plmn_list CUSTOM_CA_DISABLE_PLMN_LIST[] = 
+{
+   // {"515FFF"},   // philippine
+
+#ifdef UNIT_TEST
+    {"00131F"}, {"00132F"}, {"00133F"}, {"00134F"}, {"00135F"},
+#endif
+
+    {"FFFFFF"}   // END (don't touch and put your new entry above this line)
+};
+
+const kal_uint32 CUSTOM_CA_DISABLE_PLMN_LIST_NUM = sizeof(CUSTOM_CA_DISABLE_PLMN_LIST)/sizeof(custom_ca_disable_plmn_list);
+
+
+/*******************************************************************************
+ * when encounter the plmn list in this table, UE will report UL64QAM supported 
+ * when CA is disabled, otherwise reporting UL64QAM disabled when CA is disabled
+ ******************************************************************************/
+const custom_ul64qam_plmn_list CUSTOM_UL64QAM_PLMN_LIST[] = 
+{
+	#if (CUR_GEN >= MD_GEN95)
+	{"000000"}, // Super plmn (match any PLMN in whitelist check)
+	#endif
+    {"46000F"}, {"46002F"}, {"46004F"}, {"46007F"}, {"46008F"},  // CMCC, China
+    {"310053"}, {"310054"}, {"310120"}, {"310830"}, {"311260"}, {"311490"}, {"311870"}, {"311880"}, {"311940"}, {"312190"}, {"312140"}, {"312240"}, {"312250"}, {"312530"}, {"316010"}, // Sprint
+
+#ifdef UNIT_TEST
+    {"00131F"}, {"00132F"}, {"00133F"}, {"00134F"}, {"00135F"},
+#endif
+
+    {"FFFFFF"}   // END (don't touch and put your new entry above this line)
+};
+
+const kal_uint32 CUSTOM_UL64QAM_PLMN_LIST_NUM = sizeof(CUSTOM_UL64QAM_PLMN_LIST)/sizeof(custom_ul64qam_plmn_list);
+
+/*******************************************************************************
+ * This table is used to specify which serving PLMN is allowed to report DL 256QAM.
+ * Initial set as CMCC PLMNs.
+ * 
+ * Use special PLMN Id "FFFFFE" to allow DL 256QAM capability reporting in all PLMNs.
+ ******************************************************************************/
+const custom_dl256qam_plmn_list CUSTOM_DL256QAM_PLMN_LIST[] = 
+{
+#if !defined(MT6763)
+    {"FFFFFE"},  // Super PLMN (match for any PLMN)
+#endif
+    {"46000F"}, {"46002F"}, {"46004F"}, {"46007F"}, {"46008F"},  // CMCC, China
+
+    {"FFFFFF"}   // END (don't touch and put your new entry above this line)
+};
+
+const kal_uint32 CUSTOM_DL256QAM_PLMN_LIST_NUM = sizeof(CUSTOM_DL256QAM_PLMN_LIST)/sizeof(custom_dl256qam_plmn_list);
+
+/*******************************************************************************
+ * when encounter the plmn list in this table, UE will report CA band combination
+ * align with the order in Enablelist. 
+ ******************************************************************************/
+
+const custom_order_CA_with_Enablelist_plmn_list CUSTOM_ORDER_CA_WITH_ENABLELIST_PLMN_LIST[] =
+{
+    {"20416F"}, {"20420F"}, {"26002F"}, {"26034F"}, {"26201F"}, {"26206F"},
+        
+#ifdef UNIT_TEST
+    {"00116F"},
+#endif        
+    {"FFFFFF"}   // END (don't touch and put your new entry above this line)
+};
+const kal_uint32 CUSTOM_ORDER_CA_WITH_ENABLELIST_PLMN_LIST_NUM = sizeof(CUSTOM_ORDER_CA_WITH_ENABLELIST_PLMN_LIST)/sizeof(custom_order_CA_with_Enablelist_plmn_list);
+
+/*******************************************************************************
+ * when encounter the plmn list in this table, UE will not apply any customization 
+ * setting of PLMN CA band combination table for CA reporting. 
+ ******************************************************************************/
+const custom_exclude_for_cadb_plmn_list CUSTOM_EXCLUDE_FOR_CADB_PLMN_LIST[] = 
+{
+#ifdef UNIT_TEST
+    {"00123F"},
+#endif  
+    {"FFFFFF"}   // END (don't touch and put your new entry above this line)    
+};
+const kal_uint32 CUSTOM_EXCLUDE_FOR_CADB_PLMN_LIST_NUM = sizeof(CUSTOM_EXCLUDE_FOR_CADB_PLMN_LIST)/sizeof(custom_exclude_for_cadb_plmn_list);
+/*******************************************************************************
+ * when encounter the plmn list in this table, UE will delay SRVCC until check NW capability or call alerting 
+ * delay SRVCC by delay B1/B2 measurement report
+ ******************************************************************************/
+const custom_bsrvcc_check_plmn_list CUSTOM_BSRVCC_CHECK_PLMN_LIST[] = 
+{
+    {"40493F"}, // Airtel 
+
+    {"FFFFFF"}  // END (don't touch and put your new entry above this line)
+};
+
+const kal_uint32 CUSTOM_BSRVCC_CHECK_PLMN_LIST_NUM = sizeof(CUSTOM_BSRVCC_CHECK_PLMN_LIST)/sizeof(custom_bsrvcc_check_plmn_list);
+
+/*******************************************************************************
+ * when encounter the plmn list in this table, UE will  enable HPUE for the PLMN ID
+ * and HPUE will be enabled if PLMN Id matches. 
+ ******************************************************************************/
+const custom_enable_sbp_lte_hpue_plmn_list CUSTOM_ENABLE_SBP_LTE_HPUE_PLMN_LIST[] = 
+{
+    {"440FFF"},
+    {"441FFF"},
+    {"001FFF"},
+    {"002FFF"},
+    {"003FFF"},
+    {"004FFF"},
+    {"005FFF"},
+    {"006FFF"},
+    {"007FFF"},
+    {"008FFF"},
+    {"009FFF"},
+    {"FFFFFF"}   // END (don't touch and put your new entry above this line)    
+};
+const kal_uint32 CUSTOM_ENABLE_SBP_LTE_HPUE_PLMN_LIST_NUM = sizeof(CUSTOM_ENABLE_SBP_LTE_HPUE_PLMN_LIST)/sizeof(custom_enable_sbp_lte_hpue_plmn_list);
+
+/*******************************************************************************
+ * when encounter the plmn list in this table, UE will send conn release A2 to  
+ * trigger earily connection release
+ ******************************************************************************/
+const custom_conn_rel_a2_check_plmn_cfg CUSTOM_CONN_REL_A2_CHECK_PLMN_LIST[] = 
+{
+    {"FFFF00"}, // Apply All PLMN 
+    {"40493F"}, // Airtel 
+    {"405854"}, {"405862"}, {"405872"}, {"405874"},// RJIO 
+    {"46011F"}, {"46003F"},// CT 
+	
+    {"FFFFFF"}  // END (don't touch and put your new entry above this line)
+};
+
+const kal_uint32 CUSTOM_CONN_REL_A2_CHECK_PLMN_LIST_NUM = sizeof(CUSTOM_CONN_REL_A2_CHECK_PLMN_LIST)/sizeof(custom_conn_rel_a2_check_plmn_cfg);
+
+/*******************************************************************************
+ * when encounter the plmn list in this table, UE will not send conn release A2 to  
+ * trigger earily connection release for this PLMN
+ ******************************************************************************/
+const custom_conn_rel_a2_check_plmn_cfg CUSTOM_CONN_REL_A2_CHECK_PLMN_BLACK_LIST[] = 
+{
+    {"40431F"}, // Airtel Kolkata
+	
+    {"FFFFFF"}  // END (don't touch and put your new entry above this line)
+};
+
+const kal_uint32 CUSTOM_CONN_REL_A2_CHECK_PLMN_BLACK_LIST_NUM = sizeof(CUSTOM_CONN_REL_A2_CHECK_PLMN_BLACK_LIST)/sizeof(custom_conn_rel_a2_check_plmn_cfg);
+
+/*******************************************************************************
+ * when encounter the plmn list in this table, UE will trigger reest when  
+ * the network ignores the connection release A2
+ ******************************************************************************/
+const custom_conn_rel_a2_reest_check_plmn_cfg CUSTOM_CONN_REL_A2_REEST_CHECK_PLMN_LIST[] = 
+{
+    {"40493F"}, // Airtel 
+    {"405854"}, {"405862"}, {"405872"}, {"405874"},// RJIO 
+    {"46011F"}, {"46003F"},// CT 
+	
+    {"FFFFFF"}  // END (don't touch and put your new entry above this line)
+};
+
+const kal_uint32 CUSTOM_CONN_REL_A2_REEST_CHECK_PLMN_LIST_NUM = sizeof(CUSTOM_CONN_REL_A2_REEST_CHECK_PLMN_LIST)/sizeof(custom_conn_rel_a2_reest_check_plmn_cfg);
+
+/* Dynamic UE cap size adjustment*/
+#if (CUR_GEN >= MD_GEN97)
+#define CUSTOM_DCSA_TRIGGER_TH  6
+#else
+#define CUSTOM_DCSA_TRIGGER_TH  3
+#endif
+
+#define CUSTOM_DCSA_EXPIRE      48 //hrs
+
+kal_uint8 eas_custom_get_dcsa_trigge_th(void)
+{
+    return (kal_uint8)CUSTOM_DCSA_TRIGGER_TH;
+}
+
+kal_uint8 eas_custom_get_dcsa_expire(void)
+{
+    return (kal_uint8)CUSTOM_DCSA_EXPIRE;
+}
+
+
+kal_uint8 eas_custom_get_rohc_profile_num(void)
+{
+    return (kal_uint8)NUM_OF_CUSTOM_ROHC_PROFILE;
+}
+
+
+/*******************************************************************************
+* let customer configure the max size of LTE capability according to plmn
+ ******************************************************************************/
+const eas_custom_eutra_cap_size_config CUSTOM_EUTRA_CAP_SIZE_CFG[] = 
+{
+    /*PLMN id, MAX EUTRA capability size (byte) */
+    /*{"46000F", 1800 },  // CMCC, China
+    {"46002F", 1800 },  // CMCC, China
+    {"46004F", 1800 },  // CMCC, China
+    {"46007F", 1800 },  // CMCC, China
+    {"46008F", 1800 },  // CMCC, China*/
+    {"26202F", 3700 },  // Vodafone, Germany
+    {"23415F", 3700 },  // Vodafone, UK
+    {"310410", 3700 },  // AT&T, USA
+    {"310380", 3700 },  // AT&T, USA
+    {"310170", 3700 },  // AT&T, USA
+    {"310150", 3700 },  // AT&T, USA
+    {"310280", 3700 },  // AT&T, USA
+    {"310030", 3700 },  // AT&T, USA
+    {"310180", 3700 },  // AT&T, USA
+    {"310560", 3700 },  // AT&T, USA
+    {"310680", 3700 },  // AT&T, USA
+    {"310070", 3700 },  // AT&T, USA
+    {"310090", 3700 },  // AT&T, USA
+    {"310950", 3700 },  // AT&T Lab, USA
+    {"24412F", 3700 },  // DNA,  Finland
+    {"20810F", 3000 },  // SFR,  France, [ALPS05208036] has no CADB for this operator yet 
+    {"44007F", 3700 },  // KDDI, Japan
+    {"44008F", 3700 },  // KDDI, Japan
+    {"44050F", 3700 },  // KDDI, Japan
+    {"44051F", 3700 },  // KDDI, Japan
+    {"44052F", 3700 },  // KDDI, Japan
+    {"44053F", 3700 },  // KDDI, Japan
+    {"44054F", 3700 },  // KDDI, Japan
+    {"44055F", 3700 },  // KDDI, Japan
+    {"44056F", 3700 },  // KDDI, Japan
+    {"44070F", 3700 },  // KDDI, Japan
+    {"44071F", 3700 },  // KDDI, Japan
+    {"44072F", 3700 },  // KDDI, Japan
+    {"44073F", 3700 },  // KDDI, Japan
+    {"44074F", 3700 },  // KDDI, Japan
+    {"44075F", 3700 },  // KDDI, Japan
+    {"44076F", 3700 },  // KDDI, Japan
+    {"44077F", 3700 },  // KDDI, Japan
+    {"44078F", 3700 },  // KDDI, Japan
+    {"44079F", 3700 },  // KDDI, Japan
+    {"44088F", 3700 },  // KDDI, Japan
+    {"44089F", 3700 },  // KDDI, Japan
+    {"44170F", 3700 },  // KDDI, Japan
+    {"44020F", 3700 },  // softbank, Japan      
+    {"44011F", 3700 },  // Rakuten, Japan
+    {"20408F", 3700 },  // KPN,  no CADB for this operator yet 	
+    {"20469F", 3700 },  // KPN,  no CADB for this operator yet
+#ifdef UNIT_TEST
+    {"00200F", 300 },  // UT
+    {"00201F", 500 },  // UT
+    {"00202F", 700 },  // UT
+    {"00203F", 900 },  // UT
+    {"00204F", 1300 },  // UT
+#endif
+    {"FFFFFF", 0 }   // END (don't touch and put your new entry above this line)
+};
+
+const kal_uint32 CUSTOM_EUTRA_CAP_SIZE_CFG_NUM = sizeof(CUSTOM_EUTRA_CAP_SIZE_CFG)/sizeof(eas_custom_eutra_cap_size_config);
+
+/*******************************************************************************
+ * Operator specific white list CA band combination table
+ ******************************************************************************/
+const eas_custom_white_list_cabc_config CUSTOM_EUTRA_WHITE_LIST_CABC_CFG[] = 
+{
+    /*         operator,     band_num, {   CC0_BAND,   CC0_BW_CLAS_UL,   CC0_BW_CLAS_DL}, {    CC1_BAND,     CC1_BW_CLAS_UL,     CC1_BW_CLAS_DL}, {    CC2_BAND,     CC1_BW_CLAS_UL,     CC1_BW_CLAS_DL} */
+    {CUSTOM_EAS_OP_CMCC,            1, {{LTE_Band38,     CA_BW_CLAS_C,     CA_BW_CLAS_C}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CMCC,            1, {{LTE_Band39,     CA_BW_CLAS_C,     CA_BW_CLAS_C}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CMCC,            1, {{LTE_Band40,     CA_BW_CLAS_C,     CA_BW_CLAS_C}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CMCC,            1, {{LTE_Band41,     CA_BW_CLAS_C,     CA_BW_CLAS_C}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CMCC,            1, {{LTE_Band38,     CA_BW_CLAS_A,     CA_BW_CLAS_C}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CMCC,            1, {{LTE_Band39,     CA_BW_CLAS_A,     CA_BW_CLAS_C}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CMCC,            1, {{LTE_Band40,     CA_BW_CLAS_A,     CA_BW_CLAS_C}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CMCC,            1, {{LTE_Band41,     CA_BW_CLAS_A,     CA_BW_CLAS_C}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CMCC,            2, {{LTE_Band41,     CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band41,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    //Update some 2D1U/2D2U/3D1U CMCC mandatory CA by CMCC white paper 2019 ver.
+	//only consider category D12U13, and CMCC white paper 2019 ver. don't mention 4cc case
+    {CUSTOM_EAS_OP_CMCC,            2, {{LTE_Band39,     CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band41,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CMCC,            2, {{LTE_Band41,     CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band39,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CMCC,            2, {{LTE_Band3,      CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band41,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CMCC,            2, {{LTE_Band8,      CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band41,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CMCC,            2, {{LTE_Band39,     CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band41,       CA_BW_CLAS_A,       CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CMCC,            1, {{LTE_Band40,     CA_BW_CLAS_A,     CA_BW_CLAS_D}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CMCC,            1, {{LTE_Band41,     CA_BW_CLAS_A,     CA_BW_CLAS_D}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}, {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    //Because CT mandatory CA just only one, so add mandatory and recommend CA
+    //Add some 2D1U/3D1U CT mandatory and recommend CA by CT white paper 2018.V2
+	//only consider category D12U13, and CT white paper 2018.V2 don't mention 4cc case
+    {CUSTOM_EAS_OP_CT,              2, {{LTE_Band1,      CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CT,              2, {{LTE_Band3,      CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band1,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CT,              2, {{LTE_Band1,      CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band5,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CT,              2, {{LTE_Band5,      CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band1,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CT,              2, {{LTE_Band3,      CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band5,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CT,              2, {{LTE_Band5,      CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_CT,              3, {{LTE_Band1,      CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band5,        CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_CT,              3, {{LTE_Band3,      CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band1,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band5,        CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_CT,              3, {{LTE_Band5,      CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band1,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+};
+
+const kal_uint32 CUSTOM_EUTRA_WHITE_LIST_CABC_CFG_NUM = sizeof(CUSTOM_EUTRA_WHITE_LIST_CABC_CFG)/sizeof(eas_custom_white_list_cabc_config);
+
+/*******************************************************************************
+ * Operator vs. PLMN
+ ******************************************************************************/
+const eas_custom_operator_plmn_config CUSTOM_EUTRA_OPERATOR_PLMN_CFG[] = 
+{
+    {CUSTOM_EAS_OP_CMCC, "46000F"},
+    {CUSTOM_EAS_OP_CMCC, "46002F"},
+    {CUSTOM_EAS_OP_CMCC, "46004F"},
+    {CUSTOM_EAS_OP_CMCC, "46007F"},
+    {CUSTOM_EAS_OP_CMCC, "46008F"},
+    {CUSTOM_EAS_OP_CT,   "46003F"},
+    {CUSTOM_EAS_OP_CT,   "46005F"},
+    {CUSTOM_EAS_OP_CT,   "46011F"},
+};
+
+const kal_uint32 CUSTOM_EUTRA_OPERATOR_PLMN_CFG_NUM = sizeof(CUSTOM_EUTRA_OPERATOR_PLMN_CFG)/sizeof(eas_custom_operator_plmn_config);
+
+/*******************************************************************************
+ * Allowed to customize pratial supported band frequency by plmn
+ ******************************************************************************/
+const eas_custom_partial_band_info_config CUSTOM_PARTIAL_BAND_INFO_TBL[] = 
+{    
+#ifdef UNIT_TEST
+    {"00200F", {41, 39650, 41500, 39650, 41500}},
+    {"00200F", {41, 39650, 41589, 39650, 41589}},
+    {"00200F", {41, 39650, 41589, 39650, 41589}},
+    {"00200F", {41, 39900, 41589, 39900, 41589}},
+    {"00200F", {40, 38650, 39649, 38650, 39649}},
+#endif
+
+    {"FFFFFF",{255,0,0,0,0}}   // END (don't touch and put your new entry above this line)
+};
+
+const kal_uint32 CUSTOM_PARTIAL_BAND_INFO_NUM = sizeof(CUSTOM_PARTIAL_BAND_INFO_TBL)/sizeof(eas_custom_partial_band_info_config);
+
+#endif  /* END of #ifdef __LTE_R11__ */
+
+/**********************************************************************************************************************************************************
+ * Allowed to customize coexist operator list to judge whether the SIB1 of this 4G cell carries different operators simultaneously.
+ *
+ * Note: 
+ * The max operator number of each row is 6 because the max number of PLMNs in SIB1 is 6.
+ * Each row means that the customer wants to check whether the operator list of SIB1 matches each operator.
+ * P.S. If the customer wants to check whether the operator list of SIB1 meatches 2 operators between 3 operators, please list the combination separately.
+ * Warning! You should not only set operator1!(because SIB1 carries 1 operator is normal.) You should set 2~6 operators here.
+ **********************************************************************************************************************************************************/
+eas_custom_operator_enum custom_coexist_operator_table[CUSTOM_COEXIST_OPERATOR_ROW][6]=
+{
+  /*{operator1,          operator2,        operator3,        operator4,         operator5,         operator6        }*/
+    {CUSTOM_EAS_OP_CMCC, CUSTOM_EAS_OP_CU,  CUSTOM_EAS_OP_CT, CUSTOM_EAS_OP_END, CUSTOM_EAS_OP_END, CUSTOM_EAS_OP_END},
+  //{CUSTOM_EAS_OP_CMCC, CUSTOM_EAS_OP_CU, CUSTOM_EAS_OP_END, CUSTOM_EAS_OP_END, CUSTOM_EAS_OP_END, CUSTOM_EAS_OP_END},
+  //{CUSTOM_EAS_OP_CMCC, CUSTOM_EAS_OP_CT, CUSTOM_EAS_OP_END, CUSTOM_EAS_OP_END, CUSTOM_EAS_OP_END, CUSTOM_EAS_OP_END},
+  //{CUSTOM_EAS_OP_CT  , CUSTOM_EAS_OP_CU, CUSTOM_EAS_OP_END, CUSTOM_EAS_OP_END, CUSTOM_EAS_OP_END, CUSTOM_EAS_OP_END},
+};
+
+kal_char* custom_plmn_list_of_operator[CUSTOM_OPERATOR_NUM][CUSTOM_PLMN_LIST_NUM]=
+{
+	{"46000F","46002F","46007F","46020F",  NULL},/*CUSTOM_EAS_OP_CMCC*/
+	{"46001F","46006F",    NULL,    NULL,  NULL},/*CUSTOM_EAS_OP_CU*/
+	{"46011F","46003F","46005F",    NULL,  NULL},/*CUSTOM_EAS_OP_CT*/
+};
+
+/*******************************************************************************
+ * ROHC profile custom config
+ *if this ROHC file is not supported by UE, the configuration is ignored currently
+ ******************************************************************************/
+const custom_eas_lte_rohc_profile_config CUSTOM_EUTRA_ROHC_PROFILE_CFG[]=
+{
+    /*PLMN id,                profile0x0001,         profile0x0002,         profile0x0003,        profile0x0004,         profile0x0006,        profile0x0101,        profile0x0102,         profile0x0103,        profile0x0104  */
+    /*UE support:           KAL_TRUE,           KAL_TRUE,             KAL_FALSE,          KAL_TRUE,             KAL_FALSE,          KAL_FALSE,          KAL_FALSE,          KAL_FALSE,          KAL_FALSE*/
+#ifdef UNIT_TEST
+    {"55555F",{    KAL_FALSE,    KAL_FALSE,    KAL_FALSE,    KAL_FALSE,    KAL_FALSE,    KAL_FALSE,    KAL_FALSE,    KAL_FALSE,    KAL_FALSE}},  //for test purpose
+    {"55556F",{    KAL_TRUE,     KAL_FALSE,    KAL_TRUE,     KAL_FALSE,    KAL_TRUE,     KAL_FALSE,    KAL_FALSE,    KAL_FALSE,    KAL_FALSE}},  //for test purpose
+#endif
+    {"FFFFFF",{    KAL_FALSE,    KAL_FALSE,    KAL_FALSE,    KAL_FALSE,    KAL_FALSE,    KAL_FALSE,    KAL_FALSE,    KAL_FALSE,    KAL_FALSE}}  //END
+};
+
+const kal_uint32 CUSTOM_EUTRA_ROHC_PROFILE_NUM = sizeof(CUSTOM_EUTRA_ROHC_PROFILE_CFG)/sizeof(custom_eas_lte_rohc_profile_config);
+
+/*******************************************************************************
+ * Allowed to customize 2G/3G AFR enable/disable by HPLMN
+ ******************************************************************************/
+const custom_hplmn_afr_mapping_record CUSTOM_HPLMN_AFR_MAPPING_TABLE[]=
+{
+    /*Home PLMN id, 2G AFR, 3G AFR */ /*KAL_TRUE: AFR enable; KAL_FALSE: AFR disable */
+#ifdef UNIT_TEST
+    {"23099F", KAL_TRUE, KAL_TRUE},  //for test purpose
+    {"22210", KAL_TRUE, KAL_FALSE},  //for test purpose
+    {"22401", KAL_FALSE, KAL_TRUE},  //for test purpose
+    {"26801F", KAL_FALSE, KAL_FALSE},  //for test purpose
+#endif	
+
+	// all the following HPLMN mapping comes from g_l4bsbp_plmn_table of l4bsbp_utility.c
+	{"46000", KAL_TRUE, KAL_TRUE},    //OP01  SBP_ID_CMCC
+	{"46002", KAL_TRUE, KAL_TRUE},	
+	{"46004", KAL_TRUE, KAL_TRUE},	
+	{"46007", KAL_TRUE, KAL_TRUE},	
+	{"46008", KAL_TRUE, KAL_TRUE},	
+	{"46070", KAL_TRUE, KAL_TRUE},	
+	{"46096", KAL_TRUE, KAL_TRUE},	
+												
+	{"46001", KAL_TRUE, KAL_TRUE},    //OP02  SBP_ID_CU
+	{"46006", KAL_TRUE, KAL_TRUE},	
+	{"46009", KAL_TRUE, KAL_TRUE},	
+												
+	{"46003", KAL_TRUE, KAL_TRUE},    // OP09 SBP_ID_CT
+	{"46005", KAL_TRUE, KAL_TRUE},	    
+	{"46011", KAL_TRUE, KAL_TRUE},	
+	{"45502", KAL_TRUE, KAL_TRUE},	//Macao China
+	{"45507", KAL_TRUE, KAL_TRUE},	//Macao China
+												
+	{"310230", KAL_TRUE, KAL_TRUE},   // OP08 US TMO SBP_ID_TMO_US
+	{"31031", KAL_TRUE, KAL_TRUE},	
+	{"31032", KAL_TRUE, KAL_TRUE},	
+	{"310220", KAL_TRUE, KAL_TRUE},	
+	{"310270", KAL_TRUE, KAL_TRUE},	
+	{"310210", KAL_TRUE, KAL_TRUE},	
+	{"310260", KAL_TRUE, KAL_TRUE},	
+	{"310200", KAL_TRUE, KAL_TRUE},	
+	{"310250", KAL_TRUE, KAL_TRUE},	
+	{"310160", KAL_TRUE, KAL_TRUE},	
+
+    {"FFFFFF", KAL_FALSE, KAL_FALSE}  //END
+};
+
+const kal_uint32 CUSTOM_HPLMN_AFR_MAPPING_RECORD_NUM = sizeof(CUSTOM_HPLMN_AFR_MAPPING_TABLE)/sizeof(custom_hplmn_afr_mapping_record);
+
+/*******************************************************************************
+ * Allowed to customize 2G4/3G4 AFR enable/disable by HPLMN and SPLMN
+ * Please config this table by priority.  The upper item has higher priority than lower item (From high to low)
+ ******************************************************************************/
+const eas_custom_afr_by_hplmn_and_splmn_config CUSTOM_AFR_BY_HPLMN_AND_SPLMN_CFG[]=
+{
+    /*Home PLMN id,   SPLMN,     2G4 AFR,     3G4 AFR */   /*KAL_TRUE: AFR enable; KAL_FALSE: AFR disable */
+#ifdef UNIT_TEST
+    {"55555F",       "55556F",   KAL_TRUE,    KAL_TRUE},     //for test purpose
+	{"55666F",       "55612F",   KAL_FALSE,    KAL_FALSE},   //for test purpose
+    {"55666F",       "556FFF",   KAL_TRUE,    KAL_TRUE},     //for test purpose, customer can also set mcc only splmn
+	{"555FFF",       "555FFF",   KAL_TRUE,    KAL_FALSE},    //for test purpose, customer can also set mcc only hplmn
+#endif
+    {"FFFFFF",       "FFFFFF",   KAL_FALSE,   KAL_FALSE}     //END, please add custom config before END
+};
+
+
+const kal_uint32 CUSTOM_AFR_BY_HPLMN_AND_SPLMN_NUM = sizeof(CUSTOM_AFR_BY_HPLMN_AND_SPLMN_CFG)/sizeof(eas_custom_afr_by_hplmn_and_splmn_config);
+
+/*******************************************************************************
+ * North America MCC list
+ ******************************************************************************/
+
+const eas_custom_mcc_config CUSTOM_NORTH_AMERICA_MCC_LIST[]=
+{
+		{3,1,0},
+		{3,1,1},
+		{3,1,2},
+		{3,1,3},
+		{3,1,4},
+		{3,1,5},
+		{3,1,6},
+		{3,5,0},
+		{3,0,2}
+};
+
+const kal_uint32 CUSTOM_NORTH_AMERICA_MCC_LIST_NUM = sizeof(CUSTOM_NORTH_AMERICA_MCC_LIST)/sizeof(eas_custom_mcc_config);
+
+
+/*************************************************************************
+* Function
+*************************************************************************/
+
+#if defined (__AS_SPECIFIC_CHANNEL_SRCH__)|| defined(UNIT_TEST)
+/*****************************************************************************
+* FUNCTION
+*  eas_custom_set_specific_channel_srch
+* DESCRIPTION
+*   The function set specific search mode.
+*
+* PARAMETERS
+*   kal_bool
+*   TRUE: set specific search mode, FALSE: disable specific search mode.
+* RETURNS
+*   Void
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+void eas_custom_set_specific_channel_srch( kal_bool set_value )
+{
+    eas_custom_specific_channel_srch = set_value;
+}
+/*****************************************************************************
+* FUNCTION
+*  eas_custom_is_specific_channel_srch
+* DESCRIPTION
+*   The function returns whether UE is in specific channel search mode.
+*
+* PARAMETERS
+*  Void
+* RETURNS
+*  kal_bool
+*  TRUE: specific channel search mode, FALSE: normal search mode
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool eas_custom_is_specific_channel_srch(void)
+{
+    return eas_custom_specific_channel_srch;
+}
+/*****************************************************************************
+* FUNCTION
+*  eas_custom_get_specific_earfcn
+* DESCRIPTION
+*   The function returns custom configured specific earfcn.
+*
+* PARAMETERS
+*   kal_uint8 band: the specific band
+*   kal_uint8 earfcn_index: the specific channel index
+* RETURNS
+*  kal_uint32: earfcn
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+EARFCN eas_custom_get_specific_earfcn(kal_uint16 band, kal_uint8 earfcn_index)
+{
+    return specific_earfcn[band][earfcn_index];
+}
+/*****************************************************************************
+* FUNCTION
+*  eas_custom_set_specific_earfcn
+* DESCRIPTION
+*   The function sets custom configured specific earfcn.
+*
+* PARAMETERS
+*   kal_uint8 band: the specific band
+*   kal_uint8 earfcn_index: the specific channel index
+*   kal_uint32 earfcn: the specific earfcn
+* RETURNS
+*   Void
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+void eas_custom_set_specific_earfcn(kal_uint16 band, kal_uint8 earfcn_index, EARFCN earfcn)
+{
+    specific_earfcn[band][earfcn_index] = earfcn;
+    return;
+}
+/*****************************************************************************
+* FUNCTION
+*  eas_custom_get_lte_specific_band_number
+* DESCRIPTION
+*   The function returns custom configured the number of specific band.
+*
+* PARAMETERS
+*   void
+* RETURNS
+*  kal_uint8: NUM_OF_LTE_SPECIFIC_BANDS
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint16 eas_custom_get_lte_specific_band_number(void)
+{
+    return NUM_OF_LTE_SPECIFIC_BANDS;
+}
+/*****************************************************************************
+* FUNCTION
+*  eas_custom_get_lte_specific_channel_number
+* DESCRIPTION
+*   The function returns custom configured the number of specific earfcn.
+*
+* PARAMETERS
+*   void
+* RETURNS
+*  kal_uint8: NUM_OF_LTE_SPECIFIC_CHANNELS
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint8 eas_custom_get_lte_specific_channel_number(void)
+{
+    return NUM_OF_LTE_SPECIFIC_CHANNELS;
+}
+#endif
+
+kal_uint8 eas_custom_get_coexist_operator_row(void)
+{
+    return CUSTOM_COEXIST_OPERATOR_ROW;
+}
+
+kal_uint8 eas_custom_get_operator_num(void)
+{
+    return CUSTOM_OPERATOR_NUM;
+}
+
+kal_uint8 eas_custom_get_plmn_list_num(void)
+{
+    return CUSTOM_PLMN_LIST_NUM;
+}
+
+eas_custom_operator_enum eas_custom_get_coexist_operator(kal_uint8 row, kal_uint8 coexist_operator_idx)
+{
+	return custom_coexist_operator_table[row][coexist_operator_idx];
+}
+
+kal_char* eas_custom_get_plmn_list_of_target_operator(kal_uint8 target_operator, kal_uint8 plmn_list_idx)
+{
+	return custom_plmn_list_of_operator[target_operator][plmn_list_idx];
+}
+
+/* If the API returns a KAL_TRUE, then this is PostPaid,
+   so FN SIM card is inserted, then FN LTE Band priority is required.
+   and ATT SIM card is inserted, then ATT LTE Band Priority is required.
+
+   If the API returns a KAL_FALSE, then this is prepaid, 
+   so, even if FN SIM card is inserted, then AT&T LTE Band Priority only searched.*/
+kal_bool eas_custom_get_FirstNet_capability_for_LTE_Band_priority()
+{
+    return KAL_TRUE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_endc_prefer_rsrp_threshold
+* DESCRIPTION
+*   get NSA cell prefer threshold (RSRP), the ENDC cell which RSRP >= the threshold will be choosed to camp on first.
+* RETURNS
+*  RSRP threshold. Notice that the unit is qdBm, not dBm.
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+const kal_int16 eas_custom_get_endc_prefer_rsrp_threshold(void)
+{
+    return LTE_ENDC_PREFER_RSRP_THRESHOLD;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_endc_prefer_rsrq_threshold
+* DESCRIPTION
+*   get NSA cell prefer threshold (RSRQ), the ENDC cell which RSRQ >= the threshold will be choosed to camp on first.
+* RETURNS
+*  RSRQ threshold. Notice that the unit is qdBm, not dBm.
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+const kal_int16 eas_custom_get_endc_prefer_rsrq_threshold(void)
+{
+    return LTE_ENDC_PREFER_RSRQ_THRESHOLD;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_with_nr_neighbor_rsrp_threshold
+* DESCRIPTION
+*   get with NR neighbor cell threshold (RSRP), the cell with NR neighbor which RSRP >= the threshold will be choosed to camp on first.
+* RETURNS
+*  RSRP threshold. Notice that the unit is qdBm, not dBm.
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+const kal_int16 eas_custom_get_with_nr_neighbor_rsrp_threshold(void)
+{
+    return LTE_WITH_NR_NEIGHBOR_RSRP_THRESHOLD;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_with_nr_neighbor_rsrq_threshold
+* DESCRIPTION
+*   get with NR neighbor cell threshold (RSRQ), the cell with NR neighbor which RSRQ >= the threshold will be choosed to camp on first.
+* RETURNS
+*  RSRQ threshold. Notice that the unit is qdBm, not dBm.
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+const kal_int16 eas_custom_get_with_nr_neighbor_rsrq_threshold(void)
+{
+    return LTE_WITH_NR_NEIGHBOR_RSRQ_THRESHOLD;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_endc_invalid_earfcn
+* DESCRIPTION
+*   get LTE_ENDC_INVALID_EARFCN
+* RETURNS
+*   LTE_ENDC_INVALID_EARFCN
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+const EARFCN eas_custom_get_endc_invalid_earfcn(void)
+{
+    return LTE_ENDC_INVALID_EARFCN;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_endc_invalid_pci
+* DESCRIPTION
+*   get LTE_ENDC_INVALID_PCI
+* RETURNS
+*   LTE_ENDC_INVALID_PCI
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+const kal_uint16 eas_custom_get_endc_invalid_pci(void)
+{
+    return LTE_ENDC_INVALID_PCI;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   eas_custom_get_endc_invalid_cell_id
+* DESCRIPTION
+*   get LTE_ENDC_INVALID_CELL_ID
+* RETURNS
+*   LTE_ENDC_INVALID_CELL_ID
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+const kal_uint32 eas_custom_get_endc_invalid_cell_id(void)
+{
+    return LTE_ENDC_INVALID_CELL_ID;
+}
+
+const kal_uint32 tmo_plmn_id_list[] = {
+    0x310160,
+    0x310200,
+    0x310210,
+    0x310220,
+    0x310230,
+    0x310240,
+    0x310250,
+    0x310260,
+    0x310270,
+    0x310310,
+    0x310490,
+    0x310660,
+    0x310880,
+    0}; // END, DO NOT modify this line and put your new entry above this line
+    
+const kal_uint16 tmo_band_list[] = { 
+    2,
+    4,
+    5,
+    12,
+    66,
+    71,
+    48,
+    25,
+    26,
+    41,
+    13,
+    17,
+    0};  // END, DO NOT modify this line and put your new entry above this line
+    
+const kal_uint8 tmo_band_num_pl = 7; /* 2~48 are TMO network bands i.e. number of Home bands is 7
+                                        Rest are SPRINT network bands*/
+
+void eas_custom_get_tmo_prefer_band_info(kal_bool* enable, const kal_uint32** plmn_id_list, const kal_uint16** band_list, kal_uint8* band_num_pl)
+{
+    *enable = KAL_TRUE;
+    *plmn_id_list = tmo_plmn_id_list;
+    *band_list = tmo_band_list;
+    *band_num_pl = tmo_band_num_pl;
+}
+
+const kal_uint32 sprint_plmn_id_list[] = {
+    0x310053,
+    0x310054,
+    0x310120,
+    0x310830,
+    0x311260,
+    0x311490,
+    0x311870,
+    0x311880,
+    0x311940,
+    0x312190,
+    0x312140,
+    0x312240,
+    0x312250,
+    0x312530,
+    0x316010,
+    0}; // END, DO NOT modify this line and put your new entry above this line
+
+
+const kal_uint16 sprint_band_list[] = { 
+    25,
+    26,
+    41,
+    12,
+    2,
+    4,
+    5,
+    13,
+    17,
+    66,
+    71,
+    48,
+    0}; // END, DO NOT modify this line and put your new entry above this line
+    
+const kal_uint8 sprint_band_num_pl = 9; /* 25~17 are SPRINT network bands i.e. number of Home bands is 9
+                                        Rest are TMO network bands*/
+
+void eas_custom_get_sprint_prefer_band_info(kal_bool* enable, const kal_uint32** plmn_id_list, const kal_uint16** band_list, kal_uint8* band_num_pl)
+{
+    *enable = KAL_TRUE;
+    *plmn_id_list = sprint_plmn_id_list;
+    *band_list = sprint_band_list;
+    *band_num_pl = sprint_band_num_pl;
+}
+
+//you can set plmn or mcc
+//when 0x123456 or 0x12345f, we would try to match plmn
+//when 0x123fff, we would try to match mcc
+const kal_uint32 eas_custom_ignore_ims_emerg_sup_plmns[] = {
+    0x44050f, //KDDI
+    0x44051f, //KDDI
+    0x44052f, //KDDI
+    0x44053f, //KDDI
+    0x44054f, //KDDI
+    0x44070f, //KDDI
+    0x44071f, //KDDI
+    0x44072f, //KDDI
+    0x44073f, //KDDI
+    0x44074f, //KDDI
+    0x44075f, //KDDI
+    0x44076f, //KDDI
+    0}; //END, DO NOT modify this line and put your new entry above this line
+
+const kal_uint32 * eas_custom_get_ignore_ims_emerg_sup_plmns()
+{
+    return eas_custom_ignore_ims_emerg_sup_plmns;
+}
+#define ERRC_CEL_HO_FAIL_SEARCH_TIMER_LENTH 2 // 2sec
+const kal_uint32 eas_custom_get_ho_fail_search_timer_length(void)
+{
+	return ERRC_CEL_HO_FAIL_SEARCH_TIMER_LENTH;
+}
+
+/*******************************************************************************
+ * Operator specific DOWNGRADE MIMO CA band combination table
+ ******************************************************************************/
+
+const eas_custom_mimo_downgrade_cabc_config CUSTOM_EUTRA_MIMO_DOWNGRADE_CABC_CFG[] = 
+{
+    /*     operator,               band_num, position,{   CC0_BAND,   CC0_BW_CLAS_UL,   CC0_BW_CLAS_DL}, {    CC1_BAND,     CC1_BW_CLAS_UL,     CC1_BW_CLAS_DL}, {    CC2_BAND,     CC1_BW_CLAS_UL,     CC1_BW_CLAS_DL} */
+    {CUSTOM_EAS_OP_SOFTBANK,            2,     1, {{LTE_Band1,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band3,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            2,     2, {{LTE_Band3,        CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band1,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            2,     1, {{LTE_Band1,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band8,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}}, 
+    {CUSTOM_EAS_OP_SOFTBANK,            2,     2, {{LTE_Band8,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band1,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            2,     1, {{LTE_Band1,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band28,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            2,     2, {{LTE_Band28,     CA_BW_CLAS_A,     CA_BW_CLAS_A},   {LTE_Band1,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            2,     1, {{LTE_Band1,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band42,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+	{CUSTOM_EAS_OP_SOFTBANK,            2,     2, {{LTE_Band42,       CA_BW_CLAS_A,     CA_BW_CLAS_A}, {LTE_Band1,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            2,     1, {{LTE_Band1,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band42,       CA_BW_CLAS_INV,     CA_BW_CLAS_C},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            2,     2, {{LTE_Band42,       CA_BW_CLAS_A,     CA_BW_CLAS_C}, {LTE_Band1,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            2,     1, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band41,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            2,     2, {{LTE_Band41,        CA_BW_CLAS_A,     CA_BW_CLAS_A},{LTE_Band3,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band8,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band3,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_Band1,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     1, {{LTE_Band1,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band42,     CA_BW_CLAS_INV,     CA_BW_CLAS_C}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     3, {{LTE_Band28,     CA_BW_CLAS_A,     CA_BW_CLAS_A},   {LTE_Band3,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_Band1,       CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band42,       CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     1, {{LTE_Band1,     CA_BW_CLAS_A,     CA_BW_CLAS_A},   {LTE_Band3,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_Band28,       CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band42,       CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     2, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},   {LTE_Band1,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_Band28,       CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band42,       CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     4, {{LTE_Band42,     CA_BW_CLAS_A,     CA_BW_CLAS_A},   {LTE_Band28,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_Band3,       CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band1,       CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+	{CUSTOM_EAS_OP_SOFTBANK,            4,     1, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band41,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band42,       CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     2, {{LTE_Band28,     CA_BW_CLAS_A,     CA_BW_CLAS_A},   {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_Band41,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band42,       CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     3, {{LTE_Band41,     CA_BW_CLAS_A,     CA_BW_CLAS_A},   {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band3,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band42,       CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     4, {{LTE_Band42,     CA_BW_CLAS_A,     CA_BW_CLAS_A},   {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band41,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band3,       CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},	
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     1, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band41,        CA_BW_CLAS_INV,     CA_BW_CLAS_C},   {LTE_Band42,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     2, {{LTE_Band41,     CA_BW_CLAS_A,     CA_BW_CLAS_C},    {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band42,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band42,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band41,        CA_BW_CLAS_INV,     CA_BW_CLAS_C},   {LTE_Band3,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band42,     CA_BW_CLAS_C,     CA_BW_CLAS_C},    {LTE_Band41,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band3,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+	{CUSTOM_EAS_OP_SOFTBANK,            3,     1, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band41,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band42,     CA_BW_CLAS_INV,     CA_BW_CLAS_C}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     2, {{LTE_Band41,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band42,     CA_BW_CLAS_INV,     CA_BW_CLAS_C}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band42,     CA_BW_CLAS_A,     CA_BW_CLAS_C},    {LTE_Band41,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band3,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},    
+	{CUSTOM_EAS_OP_SOFTBANK,            3,     1, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band41,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band42,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     2, {{LTE_Band41,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band42,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band42,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band41,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band3,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},   
+	{CUSTOM_EAS_OP_SOFTBANK,            3,     1, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band41,     CA_BW_CLAS_INV,     CA_BW_CLAS_C}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     2, {{LTE_Band28,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band41,     CA_BW_CLAS_INV,     CA_BW_CLAS_C}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band41,     CA_BW_CLAS_A,     CA_BW_CLAS_C},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band3,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},   
+	{CUSTOM_EAS_OP_SOFTBANK,            3,     1, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band41,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     2, {{LTE_Band28,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band41,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band41,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band3,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},   
+	{CUSTOM_EAS_OP_SOFTBANK,            3,     2, {{LTE_Band28,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band1,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band42,     CA_BW_CLAS_INV,     CA_BW_CLAS_C}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band42,     CA_BW_CLAS_A,     CA_BW_CLAS_C},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band1,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},   
+	{CUSTOM_EAS_OP_SOFTBANK,            3,     1, {{LTE_Band1,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band42,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     2, {{LTE_Band28,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band1,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band42,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band42,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band1,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},   
+   	{CUSTOM_EAS_OP_SOFTBANK,            3,     1, {{LTE_Band1,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band42,     CA_BW_CLAS_INV,     CA_BW_CLAS_C}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     2, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band1,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band42,     CA_BW_CLAS_INV,     CA_BW_CLAS_C}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band42,     CA_BW_CLAS_A,     CA_BW_CLAS_C},    {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band1,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},	
+	{CUSTOM_EAS_OP_SOFTBANK,            3,     1, {{LTE_Band1,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band28,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     2, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band1,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band28,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band28,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band1,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     1, {{LTE_Band1,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band8,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     2, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band1,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band8,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     1, {{LTE_Band1,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band42,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     2, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band1,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band42,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            2,     1, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band41,       CA_BW_CLAS_INV,     CA_BW_CLAS_C},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            2,     2, {{LTE_Band41,    CA_BW_CLAS_A,     CA_BW_CLAS_C},    {LTE_Band3,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    /*Additional LTE CA Band Combinations*/
+    {CUSTOM_EAS_OP_SOFTBANK,            2,     2, {{LTE_Band42,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band3,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     1, {{LTE_Band1,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band11,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     2, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band1,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band11,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band11,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band1,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     1, {{LTE_Band1,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band8,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_Band11,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}}, 
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     2, {{LTE_Band8,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band1,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_Band11,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}}, 
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band11,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band8,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_Band1,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}}, 
+    
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band42,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band3,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    
+    {CUSTOM_EAS_OP_SOFTBANK,            2,     2, {{LTE_Band42,     CA_BW_CLAS_C,     CA_BW_CLAS_C},    {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+        
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     1, {{LTE_Band1,     CA_BW_CLAS_A,     CA_BW_CLAS_A},   {LTE_Band3,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_Band8,       CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band11, CA_BW_CLAS_INV, CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     2, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},   {LTE_Band1,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_Band8,       CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band11, CA_BW_CLAS_INV, CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     3, {{LTE_Band8,     CA_BW_CLAS_A,     CA_BW_CLAS_A},   {LTE_Band3,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_Band1,       CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band11, CA_BW_CLAS_INV, CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     4, {{LTE_Band11,     CA_BW_CLAS_A,     CA_BW_CLAS_A},   {LTE_Band8,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_Band3,       CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band1, CA_BW_CLAS_INV, CA_BW_CLAS_A}}},
+    
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band42,     CA_BW_CLAS_C,     CA_BW_CLAS_C},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band3,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}}},
+    
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     1, {{LTE_Band1,     CA_BW_CLAS_A,     CA_BW_CLAS_A},   {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band28,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band42, CA_BW_CLAS_INV, CA_BW_CLAS_C}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     2, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},   {LTE_Band1,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band28,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band42, CA_BW_CLAS_INV, CA_BW_CLAS_C}}},	
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     3, {{LTE_Band28,     CA_BW_CLAS_A,     CA_BW_CLAS_A},   {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band1,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band42, CA_BW_CLAS_INV, CA_BW_CLAS_C}}},	
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     4, {{LTE_Band42,     CA_BW_CLAS_C,     CA_BW_CLAS_C},   {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band3,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band1, CA_BW_CLAS_INV, CA_BW_CLAS_A}}},	
+	
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     1, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band41,     CA_BW_CLAS_INV,     CA_BW_CLAS_C}, {LTE_Band42, CA_BW_CLAS_INV, CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     2, {{LTE_Band28,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band41,     CA_BW_CLAS_INV,     CA_BW_CLAS_C}, {LTE_Band42, CA_BW_CLAS_INV, CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     3, {{LTE_Band41,     CA_BW_CLAS_C,     CA_BW_CLAS_C},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band3,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band42, CA_BW_CLAS_INV, CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     4, {{LTE_Band42,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band41,     CA_BW_CLAS_INV,     CA_BW_CLAS_C}, {LTE_Band3, CA_BW_CLAS_INV, CA_BW_CLAS_A}}},
+        
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     1, {{LTE_Band3,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band41,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band42, CA_BW_CLAS_INV, CA_BW_CLAS_C}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     2, {{LTE_Band28,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band3,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band41,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band42, CA_BW_CLAS_INV, CA_BW_CLAS_C}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     3, {{LTE_Band41,     CA_BW_CLAS_A,     CA_BW_CLAS_A},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band3,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band42, CA_BW_CLAS_INV, CA_BW_CLAS_C}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            4,     4, {{LTE_Band42,     CA_BW_CLAS_C,     CA_BW_CLAS_C},    {LTE_Band28,        CA_BW_CLAS_INV,     CA_BW_CLAS_A},   {LTE_Band41,     CA_BW_CLAS_INV,     CA_BW_CLAS_A}, {LTE_Band3, CA_BW_CLAS_INV, CA_BW_CLAS_A}}},
+    
+	{CUSTOM_EAS_OP_SOFTBANK,            2,     2, {{LTE_Band42,     CA_BW_CLAS_A,     CA_BW_CLAS_C},    {LTE_Band3,       CA_BW_CLAS_INV,     CA_BW_CLAS_A},    {LTE_BandNone,     CA_BW_CLAS_INV,     CA_BW_CLAS_INV}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band41,      CA_BW_CLAS_A,     CA_BW_CLAS_C},    {LTE_Band28,     CA_BW_CLAS_INV,   CA_BW_CLAS_A},       {LTE_Band3,     CA_BW_CLAS_INV,   CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band42,      CA_BW_CLAS_A,     CA_BW_CLAS_C},    {LTE_Band28,     CA_BW_CLAS_INV,   CA_BW_CLAS_A},       {LTE_Band3,     CA_BW_CLAS_INV,   CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band42,      CA_BW_CLAS_C,     CA_BW_CLAS_C},    {LTE_Band28,     CA_BW_CLAS_INV,   CA_BW_CLAS_A},       {LTE_Band3,     CA_BW_CLAS_INV,   CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     1, {{LTE_Band3,      CA_BW_CLAS_A,     CA_BW_CLAS_A},     {LTE_Band41,     CA_BW_CLAS_INV,   CA_BW_CLAS_C},       {LTE_Band42,     CA_BW_CLAS_INV,   CA_BW_CLAS_C}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     2, {{LTE_Band41,      CA_BW_CLAS_A,     CA_BW_CLAS_C},    {LTE_Band3,     CA_BW_CLAS_INV,   CA_BW_CLAS_A},        {LTE_Band42,     CA_BW_CLAS_INV,   CA_BW_CLAS_C}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band42,      CA_BW_CLAS_A,     CA_BW_CLAS_C},    {LTE_Band41,     CA_BW_CLAS_INV,   CA_BW_CLAS_C},       {LTE_Band3,     CA_BW_CLAS_INV,   CA_BW_CLAS_A}}},
+    {CUSTOM_EAS_OP_SOFTBANK,            3,     3, {{LTE_Band42,      CA_BW_CLAS_C,     CA_BW_CLAS_C},    {LTE_Band41,     CA_BW_CLAS_INV,   CA_BW_CLAS_C},       {LTE_Band3,     CA_BW_CLAS_INV,   CA_BW_CLAS_A}}}
+
+	};   
+const kal_uint32 CUSTOM_EUTRA_MIMO_DOWNGRADE_CABC_CFG_NUM = sizeof(CUSTOM_EUTRA_MIMO_DOWNGRADE_CABC_CFG)/sizeof(eas_custom_mimo_downgrade_cabc_config);
+
+
diff --git a/mcu/custom/protocol/common/ps/custom_eas_config.h b/mcu/custom/protocol/common/ps/custom_eas_config.h
new file mode 100644
index 0000000..3ee72a2
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_eas_config.h
@@ -0,0 +1,650 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_eas_config.c
+ *
+ * Project:
+ * --------
+ *   MONZA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the EAS configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifndef _CUSTOM_EAS_CONFIG_H
+#define _CUSTOM_EAS_CONFIG_H
+
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "global_type.h"
+#include "el1d_rf_public.h"
+#include "mrs_eas_capability.h"
+
+
+#define CUSTOM_WCABC_BAND_MAX   3
+#define CUSTOM_DOWNGRADE_CABC_BAND_MAX   5
+
+#define CUSTOM_COEXIST_OPERATOR_ROW 1
+#define CUSTOM_OPERATOR_NUM         3
+#define CUSTOM_PLMN_LIST_NUM        5
+
+typedef enum {
+    CUSTOM_EAS_OP_CMCC = 0,
+    CUSTOM_EAS_OP_CU   = 1,
+    CUSTOM_EAS_OP_CT   = 2,
+ 
+    CUSTOM_EAS_OP_END = 255
+} eas_custom_operator_enum;
+
+typedef enum {
+    CUSTOM_EAS_OP_SOFTBANK = 0
+ 
+} eas_custom_downgrade_mimo_operator_enum;
+
+
+typedef struct
+{
+    LTE_Band            band;
+    LTE_CA_BW_CLAS_E    ca_bw_clas_ul;
+    LTE_CA_BW_CLAS_E    ca_bw_clas_dl;
+} LTE_CA_BAND_PARAM_E_config;  //because include el1d_rf_custom_data.h will lead to build fail of MT6763_SP(BASIC), so create this to mimic LTE_CA_BAND_PARAM_E
+
+typedef struct
+{
+    eas_custom_operator_enum    op;
+    kal_uint8                   band_num;
+    LTE_CA_BAND_PARAM_E_config  band_param[CUSTOM_WCABC_BAND_MAX];
+} eas_custom_white_list_cabc_config;
+
+extern const eas_custom_white_list_cabc_config CUSTOM_EUTRA_WHITE_LIST_CABC_CFG[];
+extern const kal_uint32 CUSTOM_EUTRA_WHITE_LIST_CABC_CFG_NUM;
+
+typedef struct
+{
+    eas_custom_downgrade_mimo_operator_enum    op;
+    kal_uint8                   band_num;
+	kal_uint8                   position;
+    LTE_CA_BAND_PARAM_E_config  band_param[CUSTOM_DOWNGRADE_CABC_BAND_MAX];
+} eas_custom_mimo_downgrade_cabc_config;
+
+extern const eas_custom_mimo_downgrade_cabc_config CUSTOM_EUTRA_MIMO_DOWNGRADE_CABC_CFG[];
+extern const kal_uint32 CUSTOM_EUTRA_MIMO_DOWNGRADE_CABC_CFG_NUM;
+
+typedef struct
+{
+    eas_custom_operator_enum    op;
+    kal_char                    *plmnId;
+} eas_custom_operator_plmn_config;
+
+extern const eas_custom_operator_plmn_config CUSTOM_EUTRA_OPERATOR_PLMN_CFG[];
+extern const kal_uint32 CUSTOM_EUTRA_OPERATOR_PLMN_CFG_NUM;
+
+/* FGI Black List */
+typedef struct
+{
+    /* PLMN identity */
+    kal_char  *plmnId;
+    kal_uint32  feature_group_ind_fdd;
+    kal_uint32  feature_group_ind_tdd;
+    kal_uint32  feature_group_ind_rel9_add_r9_fdd;
+    kal_uint32  feature_group_ind_rel9_add_r9_tdd;
+    kal_uint32  feature_group_ind_r10_fdd;
+    kal_uint32  feature_group_ind_r10_tdd;
+} eas_custom_fgi_blacklist_plmn_config;
+
+extern const eas_custom_fgi_blacklist_plmn_config CUSTOM_FGI_BLACKLIST_PLMN_CFG[];
+extern const kal_uint32 CUSTOM_FGI_BLACKLIST_PLMN_CFG_NUM;
+
+/* FGI Black List for SIM plmn*/
+extern const eas_custom_fgi_blacklist_plmn_config CUSTOM_FGI_BLACKLIST_HPLMN_CFG[];
+extern const kal_uint32 CUSTOM_FGI_BLACKLIST_HPLMN_CFG_NUM;
+
+
+/* Data structure for customized High Speed Railway's special PLMN list */
+typedef struct
+{
+    /* PLMN identity */
+    kal_char  *plmnId;
+} custom_hsr_plmn_list;
+
+extern const custom_hsr_plmn_list CUSTOM_HSR_PLMN_LIST[];
+extern const kal_uint32 CUSTOM_HSR_PLMN_LIST_NUM;
+
+/* CA disable list*/
+typedef struct
+{
+    /* PLMN identity */
+    kal_char  *plmnId;
+} custom_ca_disable_plmn_list;
+
+extern const custom_ca_disable_plmn_list CUSTOM_CA_DISABLE_PLMN_LIST[];
+extern const kal_uint32  CUSTOM_CA_DISABLE_PLMN_LIST_NUM;
+
+
+/* plmn white list  for reporting UL64QAM when CA disabled,*/
+typedef struct
+{
+    /* PLMN identity */
+    kal_char  *plmnId;
+} custom_ul64qam_plmn_list;
+
+extern const custom_ul64qam_plmn_list CUSTOM_UL64QAM_PLMN_LIST[];
+extern const kal_uint32 CUSTOM_UL64QAM_PLMN_LIST_NUM;
+
+/* PLMN white list for reporting DL256QAM */
+typedef struct
+{
+    /* PLMN identity */
+    kal_char  *plmnId;
+} custom_dl256qam_plmn_list;
+extern const custom_dl256qam_plmn_list CUSTOM_DL256QAM_PLMN_LIST[];
+extern const kal_uint32 CUSTOM_DL256QAM_PLMN_LIST_NUM;
+
+/*PLMN list for reporting CA same order with Enablelist*/
+typedef struct
+{
+    /* PLMN identity */
+    kal_char  *plmnId;    
+}custom_order_CA_with_Enablelist_plmn_list;
+extern const custom_order_CA_with_Enablelist_plmn_list CUSTOM_ORDER_CA_WITH_ENABLELIST_PLMN_LIST[];
+extern const kal_uint32 CUSTOM_ORDER_CA_WITH_ENABLELIST_PLMN_LIST_NUM;
+
+/*PLMN exclude list for CADB*/
+typedef struct
+{
+    /* PLMN identity */
+    kal_char  *plmnId;    
+}custom_exclude_for_cadb_plmn_list; 
+extern const custom_exclude_for_cadb_plmn_list CUSTOM_EXCLUDE_FOR_CADB_PLMN_LIST[];
+extern const kal_uint32 CUSTOM_EXCLUDE_FOR_CADB_PLMN_LIST_NUM;
+
+/* observe plmn list for check NW BSRVCC capabaility */
+typedef struct
+{
+    /* PLMN identity */
+    kal_char  *plmnId;
+} custom_bsrvcc_check_plmn_list;
+
+extern const custom_bsrvcc_check_plmn_list CUSTOM_BSRVCC_CHECK_PLMN_LIST[];
+extern const kal_uint32 CUSTOM_BSRVCC_CHECK_PLMN_LIST_NUM;
+
+
+typedef struct
+{
+    /* PLMN identity */
+    kal_char  *plmnId;    
+}custom_enable_sbp_lte_hpue_plmn_list; 
+extern const custom_enable_sbp_lte_hpue_plmn_list CUSTOM_ENABLE_SBP_LTE_HPUE_PLMN_LIST[];
+extern const kal_uint32 CUSTOM_ENABLE_SBP_LTE_HPUE_PLMN_LIST_NUM;
+
+/*max size of LTE capability*/
+typedef struct
+{
+    /* PLMN identity */
+    kal_char  *plmnId;
+    /* Max size of eutra capability (bytes)*/
+    kal_uint32 max_eutra_capability_size;
+} eas_custom_eutra_cap_size_config;
+
+extern const eas_custom_eutra_cap_size_config CUSTOM_EUTRA_CAP_SIZE_CFG[];
+extern const kal_uint32 CUSTOM_EUTRA_CAP_SIZE_CFG_NUM;
+
+/*partial band information setting*/
+typedef struct
+{
+    kal_char  *plmnId;
+    eas_partial_band_list_struct partial_band_info;
+}eas_custom_partial_band_info_config;
+extern const eas_custom_partial_band_info_config CUSTOM_PARTIAL_BAND_INFO_TBL[];
+extern const kal_uint32 CUSTOM_PARTIAL_BAND_INFO_NUM;
+
+/*afr by hplmn and splmn setting*/
+#define CUSTOM_AFR_BY_HPLMN_AND_SPLMN_CFG_END "FFFFFF"
+typedef struct
+{
+    kal_char *hplmn;
+    kal_char *splmn;
+    kal_bool afr_2g4;
+    kal_bool afr_3g4;
+}eas_custom_afr_by_hplmn_and_splmn_config;
+extern const eas_custom_afr_by_hplmn_and_splmn_config CUSTOM_AFR_BY_HPLMN_AND_SPLMN_CFG[];
+extern const kal_uint32 CUSTOM_AFR_BY_HPLMN_AND_SPLMN_NUM;
+
+/*ROHC profile  setting*/
+#define NUM_OF_CUSTOM_ROHC_PROFILE  9
+typedef struct
+{
+    kal_char            *plmnId;
+    kal_bool            rohc_profiles[NUM_OF_CUSTOM_ROHC_PROFILE];
+}custom_eas_lte_rohc_profile_config;
+extern const custom_eas_lte_rohc_profile_config CUSTOM_EUTRA_ROHC_PROFILE_CFG[];
+extern const kal_uint32 CUSTOM_EUTRA_ROHC_PROFILE_NUM;
+
+
+//Shall align to MAX_NUM_LTE_BAND_BITMASK (32)
+#define MAX_NUM_CUSTOM_LTE_BAND_BITMASK 32
+
+typedef struct
+{
+    /* PLMN Identity */
+    kal_char  *plmnId;
+    /* Bitmask indicates which LTE band is required */
+    kal_uint8  eightWidthLteBandBitmask[MAX_NUM_CUSTOM_LTE_BAND_BITMASK];
+} eas_global_support_band_struct;
+
+extern const eas_global_support_band_struct eas_ca_sel_tbl[];
+extern const kal_uint32 eas_ca_sel_num;
+extern const eas_global_support_band_struct eas_capsize_reduce_tbl[];
+extern const kal_uint32 eas_capsize_reduce_num;
+
+typedef struct
+{
+    /* PLMN Identity */
+    kal_char  *plmnId;
+} eas_special_plmn_exclude_struct;
+
+extern const eas_special_plmn_exclude_struct eas_special_plmn_exclude_tbl[];
+extern const kal_uint32 eas_special_plmn_exclude_num;
+
+
+typedef struct
+{
+    kal_char  *plmnId;
+    kal_char  *caCombEnableList;
+    kal_char  *caCombDisableList;
+} eas_global_ca_comb_struct;
+
+extern const eas_global_ca_comb_struct eas_global_ca_comb_tbl[];
+extern const kal_uint32 eas_global_ca_comb_num;
+
+/*HPLMN-AFR mapping table setting*/
+typedef struct
+{
+    kal_char            *plmnId;
+    kal_bool            csfb_2g_afr;
+    kal_bool            csfb_3g_afr;
+}custom_hplmn_afr_mapping_record;
+extern const custom_hplmn_afr_mapping_record CUSTOM_HPLMN_AFR_MAPPING_TABLE[];
+extern const kal_uint32 CUSTOM_HPLMN_AFR_MAPPING_RECORD_NUM;
+
+/*RSRP threshold to determine good signal for EPDCP UL use*/
+#define EL2EM_EPDCP_UL_DISC_RPT_RSRP_THRESHOLD                              (-100)
+
+/* observe plmn list for connection release A2 */
+typedef struct
+{
+    /* PLMN identity */
+    kal_char  *plmnId;
+} custom_conn_rel_a2_check_plmn_cfg;
+
+extern const custom_conn_rel_a2_check_plmn_cfg CUSTOM_CONN_REL_A2_CHECK_PLMN_LIST[];
+extern const kal_uint32 CUSTOM_CONN_REL_A2_CHECK_PLMN_LIST_NUM;
+
+extern const custom_conn_rel_a2_check_plmn_cfg CUSTOM_CONN_REL_A2_CHECK_PLMN_BLACK_LIST[];
+extern const kal_uint32  CUSTOM_CONN_REL_A2_CHECK_PLMN_BLACK_LIST_NUM;
+
+/* observe plmn list for reest if network ignores connection release A2 */
+typedef struct
+{
+    /* PLMN identity */
+    kal_char  *plmnId;
+} custom_conn_rel_a2_reest_check_plmn_cfg;
+
+extern const custom_conn_rel_a2_reest_check_plmn_cfg CUSTOM_CONN_REL_A2_REEST_CHECK_PLMN_LIST[];
+extern const kal_uint32 CUSTOM_CONN_REL_A2_REEST_CHECK_PLMN_LIST_NUM;
+
+/*************************************************************************
+* Function
+*************************************************************************/
+typedef struct
+{
+	kal_uint8 mcc1;
+	kal_uint8 mcc2;
+	kal_uint8 mcc3;
+} eas_custom_mcc_config;
+
+/*north america mcc set by customer*/
+extern const eas_custom_mcc_config CUSTOM_NORTH_AMERICA_MCC_LIST[];
+extern const kal_uint32 CUSTOM_NORTH_AMERICA_MCC_LIST_NUM;
+
+
+/*************************************************************************
+* Function
+*************************************************************************/
+extern void eas_custom_get_bgsrch_intv_para(kal_uint8 *a_intv_init_ptr,
+                                     kal_uint8 *a_intv_max_ptr,
+                                     kal_uint8 *a_intv_delta_ptr );
+extern kal_int16 eas_custom_get_ct_min_rsrp();
+extern kal_bool eas_custom_get_elevator_mode_ping_pong_enh_enable();
+extern kal_int16 eas_custom_get_elevator_mode_ping_pong_enh_min_rsrp();
+extern kal_bool eas_custom_get_sa_lte_prefer_custom_threshold_enable();
+extern kal_int16 eas_custom_get_sa_lte_prefer_custom_threshold_min_rsrp();
+extern kal_bool eas_custom_get_irtolte_custom_threshold_enable();
+extern kal_int16 eas_custom_get_irtolte_custom_threshold_min_rsrp();
+extern kal_uint16 eas_custom_get_tau_rej_time();
+extern kal_uint8 eas_custom_get_dcsa_trigge_th(void);
+extern kal_uint8 eas_custom_get_dcsa_expire(void);
+extern kal_uint8 eas_custom_get_rohc_profile_num(void);
+
+
+#if defined (__AS_SPECIFIC_CHANNEL_SRCH__)|| defined(UNIT_TEST)
+#define LTE_SPECIFIC_CHANNELS_INVALID_EARFCN 0xFFFFFFFF
+EARFCN eas_custom_get_specific_channels_invalid_earfcn(void);
+extern void eas_custom_set_specific_channel_srch( kal_bool set_value );
+extern kal_bool eas_custom_is_specific_channel_srch(void);
+extern EARFCN eas_custom_get_specific_earfcn(kal_uint16 band, kal_uint8 earfcn_index);
+extern void eas_custom_set_specific_earfcn(kal_uint16 band, kal_uint8 earfcn_index, EARFCN earfcn);
+extern kal_uint16 eas_custom_get_lte_specific_band_number(void);
+extern kal_uint8 eas_custom_get_lte_specific_channel_number(void);
+#endif
+extern kal_uint8 eas_custom_get_coexist_operator_row(void);
+extern kal_uint8 eas_custom_get_operator_num(void);
+extern kal_uint8 eas_custom_get_plmn_list_num(void);
+extern eas_custom_operator_enum eas_custom_get_coexist_operator(kal_uint8 row, kal_uint8 coexist_operator_idx);
+extern kal_char* eas_custom_get_plmn_list_of_target_operator(kal_uint8 target_operator, kal_uint8 plmn_list_idx);
+kal_bool eas_custom_get_FirstNet_capability_for_LTE_Band_priority();
+
+#define LTE_ENDC_PREFER_RSRP_THRESHOLD (-520) // unit: qdBm
+#define LTE_ENDC_PREFER_RSRQ_THRESHOLD (-100) // unit: qdBm
+#define LTE_WITH_NR_NEIGHBOR_RSRP_THRESHOLD (-520) // unit: qdBm
+#define LTE_WITH_NR_NEIGHBOR_RSRQ_THRESHOLD (-100) // unit: qdBm
+#define LTE_ENDC_INVALID_EARFCN 0xFFFFFFFF
+#define LTE_ENDC_INVALID_PCI 0xFFFF
+#define LTE_ENDC_INVALID_CELL_ID 0xFFFFFFFF
+const kal_int16 eas_custom_get_endc_prefer_rsrp_threshold(void);
+const kal_int16 eas_custom_get_endc_prefer_rsrq_threshold(void);
+const kal_int16 eas_custom_get_with_nr_neighbor_rsrp_threshold(void);
+const kal_int16 eas_custom_get_with_nr_neighbor_rsrq_threshold(void);
+const EARFCN eas_custom_get_endc_invalid_earfcn(void);
+const kal_uint16 eas_custom_get_endc_invalid_pci(void);
+const kal_uint32 eas_custom_get_endc_invalid_cell_id(void);
+
+void eas_custom_get_tmo_prefer_band_info(kal_bool* enable, const kal_uint32** plmn_id_list, const kal_uint16** band_list, kal_uint8* band_num_pl);                                                
+void eas_custom_get_sprint_prefer_band_info(kal_bool* enable, const kal_uint32** plmn_id_list, const kal_uint16** band_list, kal_uint8* band_num_pl);
+
+const kal_uint32 * eas_custom_get_ignore_ims_emerg_sup_plmns();
+const kal_uint32 eas_custom_get_ho_fail_search_timer_length(void);
+
+#endif /* _CUSTOM_EAS_CONFIG_H */
+
diff --git a/mcu/custom/protocol/common/ps/custom_em.c b/mcu/custom/protocol/common/ps/custom_em.c
new file mode 100644
index 0000000..eeb7f65
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_em.c
@@ -0,0 +1,1774 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ * Filename:
+ * ---------
+ * custom_em.c
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *   This file is for engineer mode.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by ClearCase. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Log$
+ *
+ * 08 02 2021 tongkun.zhang
+ * [MOLY00678004] [M80][FM350-GL][harvey.cheng][DIPC][NA][NA][NA]Dipc_config process consultation
+ * 	
+ * 	dipc enhance for security
+ *
+ * 07 29 2021 tongkun.zhang
+ * [MOLY00678004] [M80][FM350-GL][harvey.cheng][DIPC][NA][NA][NA]Dipc_config process consultation
+ * 	
+ * 	DIPC
+ *
+ * 07 27 2021 tongkun.zhang
+ * [MOLY00678004] [M80][FM350-GL][harvey.cheng][DIPC][NA][NA][NA]Dipc_config process consultation
+ * 	
+ * 	DIPC change for pcie control
+ *
+ * 11 10 2020 tongkun.zhang
+ * [MOLY00593154] [L5] patch back L5 from NR15.R3.MD700.MP  to  NR15.R3.MD700.MP
+ *
+ * 	[L5][OA]
+ *
+ * 08 06 2020 tongkun.zhang
+ * [MOLY00555238] [L5] patch back L5 to NR15.R3.T700.MP
+ *
+ * 	[L5][OA]Custom
+ *
+ * 07 19 2020 mingchun.cheng
+ * [MOLY00545496] [L5] patch back L5 to NR15.R3.MT6880.MP
+ * .
+ *
+ * 07 14 2020 tongkun.zhang
+ * [MOLY00545496] [L5] patch back L5 to NR15.R3.MT6880.MP
+ *
+ * 	L5 OA
+ * 06 23 2020 titi.wu
+ * [MOLY00536776] 97 LG ePDG new CHANNEL
+ * titi-RD
+ *
+ * 07 09 2020 mingchun.cheng
+ * [MOLY00533417] [L5] patch back L5 to NR15.R3.COLGIN.SB.SMT.DEV]
+ *
+ * 	.
+ *
+ * 09 18 2019 victoria.wang
+ * [MOLY00416922] DHL Legacy Wrapper migration and phase-out
+ * [Remove][DHL] phase out legacy wrapper API
+ *
+ * 07 31 2019 lucien.li
+ * [MOLY00408908] [CODE SYNC] Modem??SAR Sensor??έSARݨD? (VMOLY)
+ *
+ * 	(SWRD)[SAR Sensor][L4C]
+ *
+ * 05 24 2018 hong.yu
+ * [MOLY00325228] [UMOLYE] Remove NVRAM group header file
+ * include dhl_nvram_def.h
+ *
+ * 06 05 2017 hong.yu
+ * [MOLY00255008] [Gen93] fix build warning
+ * fix build warning
+ *
+ * 12 28 2016 hong.yu
+ * [MOLY00221317] [Gen93] L4 Integration M1 check in
+ * ATP,L4B and L4C M1 check in
+ *
+ * 11 24 2016 allen.hsu
+ * sync MOLY00212575.
+ *
+ * 03 04 2016 bart.liang
+ * [MOLY00164802] [L4C] Revise l4c for klocwork and coverity check
+ * 	  For MSBB activity.
+ *
+ * 09 30 2015 bart.liang
+ * [MOLY00137572] [PS8] 2015 Q3 Build Warning Fix Activity
+ * .
+ *
+ * 07 22 2015 eason.lai
+ * [MOLY00130157] [TK6291][DHL] smart logging migration
+ * 	.
+ *
+ * 06 23 2015 lexel.yu
+ * [MOLY00123397] [MT6755][BRINGUP_FIRSTCALL] Replace compile option for speech port
+ * 	.
+ *
+ * 01 14 2015 bart.liang
+ * [MOLY00092425] Revise RF init status in L4C_init
+ *
+ * 11 13 2014 jerry.chang
+ * [MOLY00084326] checkin common custom file to MOLY.W14.42.LTE.p2
+ * rollback to MOLY.W14.42.LTE.p2
+ *
+ * 08 29 2014 xuejing.chen
+ * [MOLY00077547] [SGLTE DSDS] AT+EGMR write IMEI change
+ * .
+ *
+ * 05 19 2014 bart.liang
+ * [MOLY00065517] [MT6290] Add API for L4 to query the status of RF_init.
+ *
+ * 03 30 2014 xuejing.chen
+ * [MOLY00061326] [CMCC_SGLTE_P1] [MT6592][SGLTE][Free][EE]Externel (EE),0,0,99,/data/core/,1,modem,
+ * .
+ *
+ * 03 19 2014 lexel.yu
+ * [MOLY00059647] [MT6290E2] SAR feature support for 4G LTE
+ * 	4G TX power reduction
+ *
+ * 12 31 2013 vend_bob.chiang
+ * [MOLY00051916] ??G750-T00?�读?�IMEI?�失败�?跟ALPS01209771 ?�象?��?
+ * .
+ *
+ * 12 13 2013 vend_bob.chiang
+ * [MOLY00046566] [Need Patch] [Volunteer Patch] low battery protect
+ * .
+ *
+ * 11 15 2013 ken.liu
+ * [MOLY00046623] [MT6290E1][DHL] Add filter on/off control for META tool
+ * add filter on/off control for META tool.
+ *
+ * 11 14 2013 lexel.yu
+ * [MOLY00013956] [MT6290 Bring-up][MT6290E1][FirstCall] Submit L4 revise for bring up
+ * 	Disable uart3
+ *
+ * 07 01 2013 lexel.yu
+ * [MOLY00028040] Customized AT command port setting
+ * PS Port setting refined
+ *
+ * 06 13 2013 lexel.yu
+ * [MOLY00013956] [MT6290 Bring-up][MT6290E1][FirstCall] Submit L4 revise for bring up
+ * Port setting revise for SP boot up.
+ * MBCI revise for MBIM.
+ *
+ * 03 14 2013 xuejing.chen
+ * [MOLY00010058] Remove Driver FakeAPI
+ * Wrap pwm driver related codes with compile option.
+ *
+ * 02 04 2013 xuejing.chen
+ * [MOLY00009887] Rename MT7208 to MT6290
+ * .
+ *
+ * 12 06 2012 danny.kuo
+ * [MOLY00005824] [NVRAM][MT6280][Change Feature] Support modem switch between RNDIS and HOSTED_DONGLE
+ * Integration change.
+ *
+ * 11 12 2012 chin-chieh.hung
+ * [MOLY00005322] TATAKA merge to MOLY
+ * add thumb2 instruction support & remove uart_port3 in MT7208 project
+ *
+ * 09 20 2012 mingtsung.sun
+ * [MOLY00000284] [PPP][MT6280] 3 PPP Dialup Support
+ * Integration change. - 3PPP + Voice call configuration of USB
+ *
+ * 08 21 2012 lexel.yu
+ * [MOLY00002426] KAL API replacement
+ * Integration change.
+ *
+ * 08 13 2012 lexel.yu
+ * [MOLY00001791] [MT6280] USB 5VCOM port setting
+ * Integration change.
+ *
+ * 08 02 2012 chenhao.gong
+ * [MOLY00000729] [L4C]Fix Moly compile warning
+ * .
+ *
+ * 07 19 2012 chenhao.gong
+ * [MOLY00000729] [L4C]Fix Moly compile warning
+ * .
+ *
+ * 07 10 2012 mingtsung.sun
+ * [MOLY00000284] [PPP][MT6280] 3 PPP Dialup Support
+ * Update port setting for 5VCOM
+ *
+ * 07 06 2012 mingtsung.sun
+ * [MOLY00000284] [PPP][MT6280] 3 PPP Dialup Support
+ * Auto camp on and generate USB COMs when bootup
+ *
+ * 06 01 2012 ray.lin-wang
+ * removed!
+ * .
+ *
+ * 05 30 2012 lexel.yu
+ * removed!
+ * <saved by Perforce>
+ *
+ * 05 25 2012 chenhao.gong
+ * removed!
+ * .
+ *
+ * 05 24 2012 wcpuser_integrator
+ * removed!
+ * Qinghua Yu check in global enum (MSG & SAP) at modem_dev.
+ *
+ * 05 24 2012 wcpuser_integrator
+ * removed!
+ * Qinghua Yu check in global enum (MSG & SAP) at modem_dev.
+ *
+ * 05 24 2012 wcpuser_integrator
+ * removed!
+ * Qinghua Yu check in global enum (MSG & SAP) at modem_dev.
+ *
+ * 05 21 2012 lexel.yu
+ * removed!
+ * 5VCOM - MODEM_DEV
+ *
+ * 05 18 2012 shyla.lan
+ * removed!
+ * Sync with MT6280_DVT_DEV
+ *
+ * 05 04 2012 chenhao.gong
+ * removed!
+ * .
+ *
+ * 04 24 2012 wcpuser_integrator
+ * removed!
+ * .
+ *
+ * 12 27 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 12 13 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 12 08 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 12 08 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 11 24 2011 shengkai.lin
+ * removed!
+ * .
+ *
+ * 11 17 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 11 15 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 11 15 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 11 08 2011 lexel.yu
+ * removed!
+ * MSBB Check in
+ *
+ * 11 04 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 08 04 2011 lexel.yu
+ * removed!
+ * Integration change.
+ *
+ * 08 02 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 08 02 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 06 02 2011 lexel.yu
+ * removed!
+ * Integration change.
+ *
+ * 05 23 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 05 18 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 04 19 2011 pohan.chu
+ * removed!
+ * CUSTOM CODEC PRIORITY
+ *
+ * 03 03 2011 chelun.tsai
+ * removed!
+ * .
+ *
+ * 03 03 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 02 17 2011 xiaojian.long
+ * removed!
+ * Check in TDD EM BLER Statistic
+ *
+ * 02 16 2011 hongwei.zhang
+ * removed!
+ * .SRNC ID display
+ *
+ * 02 15 2011 cylen.yao
+ * removed!
+ * [HAL] MAUI custom module split
+ *
+ * 01 31 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 01 20 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 01 10 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 01 06 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 01 05 2011 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 12 30 2010 jinxing.hu
+ * removed!
+ * .
+ *
+ * 12 28 2010 jianhua.zhao
+ * removed!
+ * removed!
+ * .
+ *
+ * 12 28 2010 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 12 24 2010 gordonjc.kuo
+ * removed!
+ * .
+ *
+ * 12 22 2010 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 12 20 2010 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 12 17 2010 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 12 17 2010 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 12 16 2010 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 12 16 2010 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 12 15 2010 lexel.yu
+ * removed!
+ * Integration change.
+ *
+ * 12 13 2010 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 12 13 2010 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 12 01 2010 yanfei.ding
+ * removed!
+ * [make c,r uas]Merge UL2 EM code backup MAUI.
+ *
+ * 11 30 2010 yongtuan.qiao
+ * removed!
+ * add TDD128 handover sequence info in EM.
+ *
+ * 11 30 2010 lexel.yu
+ * removed!
+ * <saved by Perforce>
+ *
+ * 11 30 2010 lexel.yu
+ * removed!
+ * remove swdbg_sw.h
+ *
+ * 11 28 2010 lexel.yu
+ * removed!
+ * Integration change.
+ *
+ * 11 27 2010 gordonjc.kuo
+ * removed!
+ * .
+ *
+ * 11 26 2010 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 09 26 2010 jianhua.zhao
+ * removed!
+ * .
+ *
+ * 09 03 2010 shengkai.lin
+ * removed!
+ * .
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * remove compile option
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * volatile type
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * Apply new EM architecture for 3G
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * add plutommi compile option
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * Move secure time into custom folder.
+ *
+ * removed!
+ * removed!
+ * Add custom_config_rlc_timer() for customer can set rlc timer value, default = 3 second.
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * compile error
+ *
+ * removed!
+ * removed!
+ * Let customer can configure ACM boundary, if acm is exceed the reasonable boundary, turn off ACM check and will not disconnect MO/MT call.
+ *
+ * removed!
+ * rebase maintrunk.MAUI_MSZ on 03/17/2007 11:19:34 PM.
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * Network Events notification mech. support.
+ *
+ * removed!
+ * removed!
+ * Fix MoDIS compile warning.
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * download folder name customization
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by ClearCase. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#include "kal_general_types.h"
+//#include "lcm_if.h"
+#include "kal_public_api.h"
+#include "string.h"
+#include "nvram_data_items.h"
+#include "kal_public_defs.h"
+//#include "stack_common.h"
+#include "dcl.h"
+#include "kal_public_defs.h" //MSBB change #include "stack_config.h"
+#include "nvram_interface.h"
+//#include "lcd_if.h"
+#include "custom_em.h"
+#include "device.h"
+#include "l1audio.h"
+#include "em_struct.h"
+#include "dcl.h"
+#include "drv_comm.h"
+#include "l4c_em.h"
+#include "dhl_cc_public.h"
+#include "ps_public_utility.h"
+#include "dhl_nvram_def.h"
+
+#include "svc_sap.h"
+#include "custom_port.h"
+
+typedef struct
+{
+    kal_uint32 freq[CUSTOM_EM_PWM_TYPE_MAX];
+    kal_uint32 duty_cycle[CUSTOM_EM_PWM_TYPE_MAX];
+} custom_em_pwm_param_set_struct;
+
+typedef struct
+{
+    custom_em_pwm_param_set_struct custom_em_pwm_param;     /* PWM Current Setting */
+    custom_em_pwm_param_set_struct custom_em_pwm_level_param[CUSTOM_EM_PWM_LEVEL_MAX];  /* PWM Level */
+} custom_em_param_context_struct;
+
+#ifndef __L1_STANDALONE__
+static void custom_em_gpio_writeIO(kal_uint8 data, kal_uint8 port);
+static void custom_em_gpo_writeIO(kal_uint8 data,kal_uint8 port);
+#endif
+
+extern UART_PORT atp_custom_ps_uart_port(void);
+
+#ifndef __L1_STANDALONE__
+
+kal_bool g_is_custom_em_init = KAL_FALSE;
+custom_em_param_context_struct g_em_context;
+
+extern void PWM_level(kal_uint8 level);
+
+#ifndef DRV_PWM_NOT_EXIST
+static kal_bool custom_em_init(kal_bool is_reset)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+    //kal_uint32 Ret, len;
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    kal_mem_set(&g_em_context, 0, sizeof(custom_em_param_context_struct));
+    g_is_custom_em_init = KAL_TRUE;
+    return KAL_TRUE;
+}
+#endif
+
+kal_uint8 custom_em_pwm_get_hw_current_level(CUSTOM_EM_PWM_TYPE type)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+#ifndef DRV_PWM_NOT_EXIST
+    DCL_HANDLE pwm_handle;
+    DCL_CTRL_DATA_T data;
+    switch (type)
+    {
+        case (CUSTOM_EM_PWM_TYPE_1):
+        	  pwm_handle=DclPWM_Open(DCL_PWM1,MOD_UEM);
+        	  DclPWM_Control(pwm_handle,PWM_CMD_GET_CURRENT_LEVEL,&data);
+        	  DclPWM_Close(pwm_handle);
+        	  return data.rPWMSaveData.pwm_level;
+
+        case (CUSTOM_EM_PWM_TYPE_2):
+            return 0;
+
+        case (CUSTOM_EM_PWM_TYPE_3):
+            pwm_handle=DclPWM_Open(DCL_PWM3, MOD_UEM);
+        	  DclPWM_Control(pwm_handle,PWM_CMD_GET_CURRENT_LEVEL,&data);
+        	  DclPWM_Close(pwm_handle);
+        	  return data.rPWMSaveData.pwm_level;
+        default:
+            ASSERT(0);
+            break;
+    }
+#endif
+    return 0;
+}
+
+kal_bool custom_em_pwm_get_level_value(
+            CUSTOM_EM_PWM_TYPE type,
+            CUSTOM_EM_PWM_LEVEL level,
+            kal_uint16 *freq,
+            kal_uint8 *duty_cycle)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+#ifndef DRV_PWM_NOT_EXIST
+    if (g_is_custom_em_init != KAL_TRUE)
+    {
+        custom_em_init(KAL_FALSE);
+    }
+
+    if (level >= CUSTOM_EM_PWM_LEVEL_MAX || type >= CUSTOM_EM_PWM_TYPE_MAX)
+    {
+        return KAL_FALSE;
+    }
+
+    *freq = g_em_context.custom_em_pwm_level_param[level].freq[type];
+    *duty_cycle = g_em_context.custom_em_pwm_level_param[level].duty_cycle[type];
+
+    return KAL_TRUE;
+#else
+    return KAL_FALSE;
+#endif
+}
+
+extern void PWM3_level(kal_uint8 level);
+void custom_em_pwm_set_level(CUSTOM_EM_PWM_TYPE type, kal_uint8 level)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+#ifndef DRV_PWM_NOT_EXIST
+    switch (type)
+    {
+        case (CUSTOM_EM_PWM_TYPE_1):
+            PWM_level(level);
+            break;
+        case (CUSTOM_EM_PWM_TYPE_2):
+            break;
+        case (CUSTOM_EM_PWM_TYPE_3):
+            PWM3_level(level);
+            break;
+        default:
+            ASSERT(0);
+            break;
+    }
+#endif
+}
+
+kal_bool custom_em_pwm_set_level_value(
+            CUSTOM_EM_PWM_TYPE type,
+            CUSTOM_EM_PWM_LEVEL level,
+            kal_uint16 freq,
+            kal_uint8 duty_cycle)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+#ifndef DRV_PWM_NOT_EXIST
+    if (g_is_custom_em_init != KAL_TRUE)
+    {
+        custom_em_init(KAL_FALSE);
+    }
+
+    if (level >= CUSTOM_EM_PWM_LEVEL_MAX || type >= CUSTOM_EM_PWM_TYPE_MAX)
+    {
+        return KAL_FALSE;
+    }
+
+    g_em_context.custom_em_pwm_level_param[level].freq[type] = freq;
+    g_em_context.custom_em_pwm_level_param[level].duty_cycle[type] = duty_cycle;
+
+
+    return KAL_TRUE;
+#else
+    return KAL_FALSE;
+#endif
+}
+
+void custom_em_pwm_start(CUSTOM_EM_PWM_TYPE type, kal_uint32 freq, kal_uint32 duty)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+#ifndef DRV_PWM_NOT_EXIST
+    DCL_HANDLE pwm_handle;
+    PWM_CMD_CONFIG_OLD_T old_config;
+    //ALERTER_CONFIGURE_T  alerter_config;
+    if (g_is_custom_em_init != KAL_TRUE)
+    {
+        custom_em_init(KAL_FALSE);
+    }
+
+    switch (type)
+    {
+        case (CUSTOM_EM_PWM_TYPE_1):
+            pwm_handle=DclPWM_Open(DCL_PWM1,MOD_UEM);
+            old_config.freq=freq;
+            old_config.duty=duty;
+            DclPWM_Control(pwm_handle,PWM_CMD_CONFIG_OLD,(DCL_CTRL_DATA_T*)&old_config);
+            DclPWM_Control(pwm_handle,PWM_CMD_START,0);
+            DclPWM_Close(pwm_handle);
+            break;
+
+        case (CUSTOM_EM_PWM_TYPE_2):
+            break;
+
+        case (CUSTOM_EM_PWM_TYPE_3):
+            pwm_handle=DclPWM_Open(DCL_PWM3,MOD_UEM);
+            old_config.freq=freq;
+            old_config.duty=duty;
+            DclPWM_Control(pwm_handle,PWM_CMD_CONFIG_OLD,(DCL_CTRL_DATA_T*)&old_config);
+            DclPWM_Control(pwm_handle,PWM_CMD_START,0);
+            DclPWM_Close(pwm_handle);
+            break;
+
+        default:
+            ASSERT(0);
+            break;
+    }
+#endif
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_em_pwm_stop
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  type        [IN]
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void custom_em_pwm_stop(CUSTOM_EM_PWM_TYPE type)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+#ifndef DRV_PWM_NOT_EXIST
+    DCL_HANDLE pwm_handle;
+    if (g_is_custom_em_init != KAL_TRUE)
+    {
+        custom_em_init(KAL_FALSE);
+    }
+
+    switch (type)
+    {
+        case (CUSTOM_EM_PWM_TYPE_1):
+            pwm_handle=DclPWM_Open(DCL_PWM1,MOD_UEM);
+            DclPWM_Control(pwm_handle,PWM_CMD_STOP,0);
+            DclPWM_Close(pwm_handle);
+            break;
+
+        case (CUSTOM_EM_PWM_TYPE_2):
+            break;
+
+        case (CUSTOM_EM_PWM_TYPE_3):
+            pwm_handle=DclPWM_Open(DCL_PWM3,MOD_UEM);
+            DclPWM_Control(pwm_handle,PWM_CMD_STOP,0);
+            DclPWM_Close(pwm_handle);
+            break;
+
+        default:
+            ASSERT(0);
+            break;
+    }
+#endif
+}
+
+void custom_em_pwm_get_value(kal_uint16 *freq, kal_uint8 *duty_cycle)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+#ifndef DRV_PWM_NOT_EXIST
+    if (g_is_custom_em_init != KAL_TRUE)
+    {
+        custom_em_init(KAL_FALSE);
+    }
+
+    kal_mem_cpy(freq, g_em_context.custom_em_pwm_param.freq, sizeof(g_em_context.custom_em_pwm_param.freq));
+    kal_mem_cpy(
+        duty_cycle,
+        g_em_context.custom_em_pwm_param.duty_cycle,
+        sizeof(g_em_context.custom_em_pwm_param.duty_cycle));
+#endif
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_em_pwm_set_value
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  freq            [?]
+ *  duty_cycle      [?]
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void custom_em_pwm_set_value(kal_uint16 *freq, kal_uint8 *duty_cycle)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+#ifndef DRV_PWM_NOT_EXIST
+    if (g_is_custom_em_init != KAL_TRUE)
+    {
+        custom_em_init(KAL_FALSE);
+    }
+
+    kal_mem_cpy(g_em_context.custom_em_pwm_param.freq, freq, sizeof(g_em_context.custom_em_pwm_param.freq));
+    kal_mem_cpy(
+        g_em_context.custom_em_pwm_param.duty_cycle,
+        duty_cycle,
+        sizeof(g_em_context.custom_em_pwm_param.duty_cycle));
+#endif
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_em_gpio_start
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  port        [IN]
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void custom_em_gpio_start(kal_uint8 port)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    custom_em_gpio_writeIO(1, port);
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_em_gpio_stop
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  port        [IN]
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void custom_em_gpio_stop(kal_uint8 port)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    custom_em_gpio_writeIO(0, port);
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_em_gpo_writeio
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  data        [IN]
+ *  port        [IN]
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void custom_em_gpo_writeio(kal_int8 data, kal_int8 port)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    custom_em_gpo_writeIO(data, port);
+}
+
+
+#endif /* __L1_STANDALONE__ */
+
+static kal_uint8 CTI_UART_PORT = 0;
+static UART_baudrate CTI_BAUD_RATE = 0;
+
+kal_bool High_Speed_SIM = KAL_FALSE;
+kal_uint8 UART_POWER_SETTING = 0;
+
+kal_uint8 g_usb_cdrom_config;
+
+#ifdef __TST_MODULE__
+extern UART_PORT TST_PORT;
+extern UART_baudrate TST_BAUDRATE;
+
+extern UART_PORT TST_PORT_L1;
+extern UART_baudrate TST_BAUDRATE_L1;
+
+#if defined(__DSP_FCORE4__)
+  extern UART_PORT TST_PORT_DSP;
+  extern UART_baudrate TST_BAUDRATE_DSP;
+#endif	//#if defined(__DSP_FCORE4__)
+
+/* This macro can be located at the makefile */
+#ifdef __TST_WRITE_TO_FILE__
+extern kal_uint8 TST_OUTPUT_MODE;
+#endif
+
+#ifndef L4_NOT_PRESENT
+extern UART_PORT PS_UART_PORT;
+extern UART_PORT PS_UART_PORT_2;
+extern UART_PORT PS_EPDG_CMD_PORT;
+extern UART_PORT PS_EPDG_URC_PORT;
+extern UART_PORT PS_EPDG_CMD_PORT_2;
+extern UART_PORT PS_EPDG_URC_PORT_2;
+extern UART_baudrate PS_BAUDRATE;
+#endif /* L4_NOT_PRESENT */
+#endif /* __TST_MODULE__ */
+extern kal_uint8 SWDBG_Profile;
+extern kal_uint32 BytesPerCluster;  /* will be set to exact value in nvram_get_disk_file_info */
+
+
+#ifdef __DATA_CARD_SPEECH__
+#ifdef __MTK_TARGET__
+extern UART_PORT SPEECH_PORT;
+#endif
+#endif
+
+extern void UART_TurnOnPower(UART_PORT port, kal_bool enable);
+#ifndef __L1_STANDALONE__
+static kal_bool custom_em_is_uart_used(UART_PORT port);
+#endif
+
+extern boot_mode_type stack_query_boot_mode(void);
+
+#ifndef __MAUI_BASIC__
+
+static void custom_em_uart_turnon_power(UART_PORT port, kal_bool on);
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  nvram_config_com_port
+ * DESCRIPTION
+ *  To init COM port setting
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void custom_em_nvram_config_com_port(void)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+    kal_uint8 *buffer = NULL;
+    kal_bool result;
+#if defined(__BOOT_FOR_USBAT__) && defined(__MTK_TARGET__)
+    kal_bool for_usbat = KAL_FALSE;
+#endif
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    buffer = (kal_uint8*) get_ctrl_buffer(NVRAM_EF_PORT_SETTING_SIZE);
+
+    if (buffer)
+    {
+        port_setting_struct *port_setting;
+
+        result = nvram_external_read_data(NVRAM_EF_PORT_SETTING_LID, 1, buffer, NVRAM_EF_PORT_SETTING_SIZE);
+
+        /* Ok, now config UART/IrCOMM ports for L4 and TST, and filters to TST */
+        if (result)
+        {
+        #if defined(__BOOT_FOR_USBAT__) && defined(__MTK_TARGET__)
+            for_usbat = INT_IsBootForUSBAT();
+        #endif
+
+
+            port_setting = (port_setting_struct*) buffer;
+
+        #ifdef __TST_MODULE__
+
+        #ifdef __IRDA_SUPPORT__
+            if ( (uart_port_irda == (UART_PORT) port_setting->tst_port_ps) ||
+                 (uart_port_irda == (UART_PORT) port_setting->tst_port_l1))
+            {
+                init_ircomm_module();
+                IRDA_Open();
+            }
+        #endif /* __IRDA_SUPPORT__ */
+
+        #if defined(__BOOT_FOR_USBAT__) && defined(__MTK_TARGET__)
+            if (for_usbat)
+            {
+                TST_PORT = (UART_PORT) uart_port1;
+                TST_PORT_L1 = (UART_PORT) uart_port1;
+            }
+            else
+        #endif
+            {
+                TST_PORT = (UART_PORT) port_setting->tst_port_ps;
+                TST_PORT_L1 = (UART_PORT) port_setting->tst_port_l1;
+            }
+
+            TST_BAUDRATE = port_setting->tst_baudrate_ps;
+            TST_BAUDRATE_L1 = port_setting->tst_baudrate_l1;
+
+        #ifndef L4_NOT_PRESENT
+            #if defined(__BOOT_FOR_USBAT__) && defined(__MTK_TARGET__)
+                if (for_usbat)
+                {
+                    PS_UART_PORT = (UART_PORT) uart_port_usb;
+                }
+                else
+            #endif
+                {
+                    kal_uint8 port_mode = CUSTOM_PORT_GET_MODE(CUSTOM_PORT_USER_AT);
+                    switch (port_mode) {
+                        case PORT_MODE_USB:
+                            PS_UART_PORT = (UART_PORT) uart_port_usb;
+                            break;
+                        case PORT_MODE_PCIE:
+                            if(0 != CUSTOM_PORT_GET_PCIE_ENABLE(CUSTOM_PORT_USER_AT)) {
+                                PS_UART_PORT = (UART_PORT) uart_port_at_ccci;
+                            } else {
+                                PS_UART_PORT = (UART_PORT) uart_port_null;
+                            }
+                            break;
+                        default:
+                            PS_UART_PORT = (UART_PORT) port_setting->ps_port;
+                    }
+                    PS_UART_PORT_2 = (UART_PORT) port_setting->ndis_port;
+					PS_EPDG_CMD_PORT = (UART_PORT) port_setting->epdg_cmd_port;
+					PS_EPDG_URC_PORT = (UART_PORT) port_setting->epdg_urc_port;
+					PS_EPDG_CMD_PORT_2 = (UART_PORT) port_setting->epdg_cmd_port_2;
+					PS_EPDG_URC_PORT_2 = (UART_PORT) port_setting->epdg_urc_port_2;
+                }
+            PS_BAUDRATE = port_setting->ps_baudrate;
+
+        #endif /* L4_NOT_PRESENT */
+
+        #if defined(__DSP_FCORE4__)
+            TST_PORT_DSP = (UART_PORT) port_setting->tst_port_dsp;
+            TST_BAUDRATE_DSP = port_setting->tst_baud_rate_dsp;
+        #endif	//#if defined(__DSP_FCORE4__)
+
+        #endif /* __TST_MODULE__ */
+
+            High_Speed_SIM = port_setting->High_Speed_SIM_Enabled;
+
+            if (High_Speed_SIM)
+            {
+                // remove
+            }
+
+            SWDBG_Profile = port_setting->swdbg;
+            UART_POWER_SETTING = port_setting->uart_power_setting;
+            CTI_UART_PORT = port_setting->cti_uart_port;
+            CTI_BAUD_RATE = port_setting->cti_baudrate;
+
+        #ifdef __TST_WRITE_TO_FILE__
+            TST_OUTPUT_MODE = port_setting->tst_output_mode;
+        #endif
+
+
+        #ifdef __MTK_TARGET__
+        #ifndef __L1_STANDALONE__
+            /* To determine if in META mode */
+            if (FACTORY_BOOT != kal_query_boot_mode())
+            {
+                //kal_bool enable;
+
+                if (custom_em_is_uart_used(uart_port1))
+                {
+                    custom_em_uart_turnon_power(uart_port1, KAL_TRUE);
+                }
+                else
+                {
+                    custom_em_uart_turnon_power(uart_port1, KAL_FALSE);
+                }
+            #ifndef __SMART_PHONE_MODEM__
+                if (custom_em_is_uart_used(uart_port2))
+                {
+                    custom_em_uart_turnon_power(uart_port2, KAL_TRUE);
+                }
+                else
+                {
+                    custom_em_uart_turnon_power(uart_port2, KAL_FALSE);
+                }
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+            #endif
+            }
+            else    /* In META Mode, Turn on every UART power */
+        #endif /* __L1_STANDALONE__ */
+            {
+            #ifndef __SMART_PHONE_MODEM__
+                custom_em_uart_turnon_power(uart_port1, KAL_TRUE);
+                custom_em_uart_turnon_power(uart_port2, KAL_TRUE);
+#if 0
+/* under construction !*/
+#endif
+            #endif
+            }
+        #endif /* __MTK_TARGET__ */
+
+        g_usb_cdrom_config = port_setting->usb_cdrom_config;
+
+        #ifdef __DATA_CARD_SPEECH__
+        #ifdef __MTK_TARGET__
+            SPEECH_PORT = port_setting->speech_port;
+        #endif
+        #endif
+        }
+
+        free_ctrl_buffer(buffer);
+    }
+
+    buffer = NULL;
+}
+
+
+#ifndef __L1_STANDALONE__
+static kal_bool custom_em_is_uart_used(UART_PORT port)
+{
+#if defined(__TST_MODULE__)
+    if (TST_PORT == port ||
+        TST_PORT_L1 == port
+    #if !defined(L4_NOT_PRESENT)
+        || PS_UART_PORT == port
+        || PS_UART_PORT_2 == port
+        || PS_EPDG_CMD_PORT == port
+        || PS_EPDG_URC_PORT == port
+        || PS_EPDG_CMD_PORT_2 == port
+        || PS_EPDG_URC_PORT_2 == port
+        || atp_custom_ps_uart_port() == port
+    #endif
+    #if defined(__DSP_FCORE4__)
+        || TST_PORT_DSP == port
+    #endif
+        )
+    {
+        return KAL_TRUE;
+    }
+    else
+#endif  //#if defined(__TST_MODULE__)
+    {
+        return KAL_FALSE;
+    }
+}
+#endif
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_em_get_usb_cdrom_config
+ * DESCRIPTION
+ *  To get USB CDROM configure value
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  0 for CDROM, 1 for COM
+ *****************************************************************************/
+kal_uint8 custom_em_get_usb_cdrom_config(void)
+{
+    return g_usb_cdrom_config;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_em_set_usb_cdrom_config
+ * DESCRIPTION
+ *  To set USB CDROM configure value
+ * PARAMETERS
+ *  value
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void custom_em_set_usb_cdrom_config(kal_uint8 cdrom_config)
+{
+    g_usb_cdrom_config = cdrom_config;
+}
+
+#endif /* #ifndef __MAUI_BASIC__*/
+
+/*****************************************************************************
+ * FUNCTION
+ *  nvram_get_cti
+ * DESCRIPTION
+ *  To get CTI_UART_PORT
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  kal_uint8   [OUT]   CTI
+ *****************************************************************************/
+void nvram_get_cti(kal_uint8 *port, kal_uint32 *baudrate)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+
+    *port = CTI_UART_PORT;
+    *baudrate = (kal_uint32) CTI_BAUD_RATE;
+    return;
+}
+
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  nvram_get_speech
+ * DESCRIPTION
+ *  To get SPEECH_PORT
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  kal_uint8   [OUT]   CTI
+ *****************************************************************************/
+void nvram_get_speech(kal_uint8 *port, kal_uint32 *baudrate)
+{
+#ifdef __DATA_CARD_SPEECH__
+#ifdef __MTK_TARGET__
+    *port = SPEECH_PORT;
+    *baudrate = 0;
+#endif
+#endif
+    return;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  nvram_get_swdbg
+ * DESCRIPTION
+ *  To get SWDBG_Profile
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  kal_uint8   [OUT]   swdbg_profile
+ *****************************************************************************/
+void nvram_get_swdbg(kal_uint8 *swdbg_profile)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+
+    *swdbg_profile = SWDBG_Profile;
+}
+
+void custom_em_uart_turnon_power(UART_PORT port, kal_bool on)
+{
+    DCL_HANDLE handle;
+    UART_CTRL_POWERON_T data;
+
+    handle = DclSerialPort_Open(port, 0);
+    data.bFlag_Poweron = on;
+    DclSerialPort_Control(handle, UART_CMD_POWER_ON, (DCL_CTRL_DATA_T*)&data);
+
+    DclSerialPort_Close(handle);
+}
+
+#ifndef __L1_STANDALONE__
+static void custom_em_gpio_writeIO(kal_uint8 data, kal_uint8 port)
+{
+	DCL_HANDLE handle;
+
+	handle=DclGPIO_Open(DCL_GPIO, port);
+
+    if(0 == data)
+		DclGPIO_Control(handle,GPIO_CMD_WRITE_LOW,0);
+	else if(1 == data)
+		DclGPIO_Control(handle,GPIO_CMD_WRITE_HIGH,0);
+
+	DclGPIO_Close(handle);
+}
+
+static void custom_em_gpo_writeIO(kal_uint8 data,kal_uint8 port)
+{
+	DCL_HANDLE handle;
+
+	handle=DclGPIO_Open(DCL_GPO,port);
+
+    if(0 == data)
+		DclGPIO_Control(handle,GPO_CMD_WRITE_LOW,0);
+	else if(1 == data)
+		DclGPIO_Control(handle,GPO_CMD_WRITE_HIGH,0);
+
+	DclGPIO_Close(handle);
+}
+#endif /* #ifndef __L1_STANDALONE__ */
+
+#ifdef __SP_RIL_SUPPORT__
+/*****************************************************************************
+ * FUNCTION
+ *  custom_em_thermal_red_ccci_hisr_callback
+ * DESCRIPTION
+ *  reduce TX power
+ * PARAMETERS
+ *  value   [IN]    tx reduction unit, byte 3: reserved, byte 2: reserved, byte 1: 3G, byte 0: 2G
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void custom_em_thermal_red_ccci_hisr_callback(kal_uint32 value)
+{
+
+    if (kal_query_boot_mode() == NORMAL_BOOT)
+    {
+        kal_uint8 gsm_tx_pwr_reduction_tbl[4][2][4];
+        kal_uint8 umts_tx_pwr_reduction_tbl[20][2];
+	    kal_uint8 gsm_tx_pwr_reduction_tbl_tas[4][2][4];
+        kal_uint8 umts_tx_pwr_reduction_tbl_tas[20][2];
+
+        kal_mem_set((void*)gsm_tx_pwr_reduction_tbl, (value & 0x000000FF), 4*2*4);
+        kal_mem_set((void*)umts_tx_pwr_reduction_tbl, ((value & 0x0000FF00) >> 8), 20*2);
+	    kal_mem_set((void*)gsm_tx_pwr_reduction_tbl_tas, (value & 0x000000FF), 4*2*4);
+        kal_mem_set((void*)umts_tx_pwr_reduction_tbl_tas, ((value & 0x0000FF00) >> 8), 20*2);
+
+	    l4c_l1_max_tx_pwr_red_req((kal_uint8)0, 1, KAL_TRUE, (kal_uint8***)gsm_tx_pwr_reduction_tbl, (kal_uint8***)gsm_tx_pwr_reduction_tbl_tas,
+	        KAL_TRUE, (kal_uint8**)umts_tx_pwr_reduction_tbl, (kal_uint8**)umts_tx_pwr_reduction_tbl_tas, KAL_FALSE, 0, NULL);
+    }
+}
+#endif /* __SP_RIL_SUPPORT__ */
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_em_get_imei_rec_by_sim
+ * DESCRIPTION
+ *  get mapping based on SIM slot or 3g switched protocol
+ *  if defined: SIM slot
+ *  if not defined: 3g switched protocol (default)
+ * PARAMETERS
+ *  op  [IN]    0 for read, 1 for write
+ *  slot    [IN]    SIM slot
+ * RETURNS
+ *  sim_interface_enum
+ *****************************************************************************/
+sim_interface_enum custom_em_get_imei_rec_by_sim(kal_uint8 op, sim_interface_enum slot)
+{
+    sim_interface_enum idx;
+
+#if defined(__CUSTOM_MAP_SIM_SLOT__)
+    idx = slot;
+#else
+    idx = l4c_gemini_get_switched_sim_id(slot);
+#endif /* __CUSTOM_MAP_SIM_SLOT__ */
+
+    return idx;
+}
+
+#ifdef __SAR_SENSOR_SUPPORT__
+/*****************************************************************************
+ * FUNCTION
+ *  custom_sar_mapping
+ *
+ * DESCRIPTION
+ * Needs  to be updated by customer.
+ *
+ * PARAMETERS
+ *  g_sar_sensor_state  [IN]
+ *      0x00 : Far
+ *      0x01 : Near
+ *      0xFD : SAR sensor state disable
+ *      0xFE : SAR sensor state enable
+ *      0xFF : SAR sensor state not support
+ *  g_scenario_index    [IN]
+ *      1~20: Range of valid values of Scenario index
+ *
+ * RETURNS
+ * scenario_index:  kal_int16
+ *      -1: combined scenario index disable
+ *      1~20: Range of valid values of combined scenario index
+ *****************************************************************************/
+kal_int16 custom_sar_mapping(kal_uint8 g_sar_sensor_state, kal_uint16 g_scenario_index)
+{
+    if((g_sar_sensor_state == 255)||(g_sar_sensor_state == 254)||(g_sar_sensor_state == 253))
+    {
+        return (kal_int16)g_scenario_index;// if the g_sar_sensor_state is unknown then combined scenario index will equal to g_scenario_index
+    }
+    else//customer can modify here
+    {
+        return (1); // Please note that the return value should be -1 or between 1~20
+    }
+
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_extant_by_sar_sensor_state
+ *
+ * DESCRIPTION
+ * Needs  to be updated by customer.
+ *
+ * PARAMETERS
+ *  src_id  [IN]    Use it as it is in the function l4c_force_tx_ant_req.
+ *
+ *  g_sar_sensor_state    [IN]
+ *      0xFF: SAR sensor state unknown, or disable
+ *      0x00: Far
+ *      0x01: Near
+ *      0xFD : SAR sensor state disable
+ *      0xFE : SAR sensor state enable
+ *      0xFF : SAR sensor state not support
+ *
+ *  g_scenario_index    [IN]
+ *      0xFFFF: g_scenario_index unknown, or disable
+ *      1~20: Range of valid values of Scenario index
+ *
+ *  is_test_sim    [IN]
+ *       KAL_TRUE: yes it is a Test SIM
+ *       KAL_FALSE: It is a real SIM
+ *
+ *  md_product_model_id    [IN]
+ *      0xFFFFFFFF : If invalid MD Product Model ID
+ *      Any valid 32 bit integer.
+ *
+ * RETURNS
+ *  Nothing
+ *****************************************************************************/
+void custom_extant_by_sar_sensor_state(kal_uint8 src_id, kal_uint8 g_sar_sensor_state, kal_uint16 g_scenario_index,
+                                                    kal_bool is_test_sim, kal_uint32 md_product_model_id)
+{
+/*
+kal_bool l4c_force_tx_ant_req(kal_uint8 src_id, kal_uint8 mode, kal_uint8 rat,  kal_uint8 ant_state, kal_uint8 band, kal_uint8 nvram_write)
+
+<mode>: kal_uint8 (0~5)
+    0: diable force TX antenna
+    1: enable force TX antenna
+    2: query antenna
+    3: restore by band TAS default value in NVRAM (both real SIM and test SIM)
+    4: force TX antenna by band (both real SIM and test SIM)
+    5: query
+
+<rat>: kal_uint8 (1~4)
+    1: GSM
+    2: UMTS
+    3: LTE
+    4: C2K
+
+<ant_state>: kal_uint8 (0~7)
+   0: TX_ANTENNA_STATE_0,
+   1: TX_ANTENNA_STATE_1,
+   2: TX_ANTENNA_STATE_2,
+   3: TX_ANTENNA_STATE_3,
+   4: TX_ANTENNA_STATE_4,
+   5: TX_ANTENNA_STATE_5,
+   6: TX_ANTENNA_STATE_6,
+   7: TX_ANTENNA_STATE_7,
+   8: TX_ANTENNA_STATE_NUM,
+   255: TX_ANTENNA_INVALID = 0xFF
+
+<band>: kal_uint8
+
+<nvram_write>: kal_uint8 (0~1)
+    0: No need to save the settings to NVRAM
+    1: Need to save the settings to NVRAM
+
+*/
+
+/* example : for mode = 0, or 1 */
+/* enable force TX antenna 0 for LTE, and NW write enable */
+//    l4c_force_tx_ant_req(src_id,1/*mode*/,3/*rat = LTE*/,TX_ANTENNA_STATE_0,0xff,1);
+/* enable force TX antenna 1 for WCDMA, and NW write disable */
+//    l4c_force_tx_ant_req(src_id,1/*mode*/,2/*rat = UMTS*/,TX_ANTENNA_STATE_1,0xff,0);
+/* disable force TX antenna for LTE, and NW write enable */
+//    l4c_force_tx_ant_req(src_id,0/*mode*/,3/*rat = LTE*/,0xff,0xff,1);
+/* disable force TX antenna for LTE, and NW write disable */
+//    l4c_force_tx_ant_req(src_id,0/*mode*/,3/*rat = LTE*/,0xff,0xff,0);
+
+
+/* example : for mode = 3, or 4 */
+/* enable force TX antenna 1 for LTE band 3, does not support NV write, and this action only valid when the serving cell RAT & Band is equal */
+//    l4c_force_tx_ant_req(src_id,4/*mode*/,3/*rat = LTE*/,TX_ANTENNA_STATE_1,0x03,0);
+/* enable force TX antenna 0 for LTE band 7, does not support NV write, and this action only valid when the serving cell RAT & Band is equal */
+//    l4c_force_tx_ant_req(src_id,4/*mode*/,3/*rat = LTE*/,TX_ANTENNA_STATE_0,0x07,0);
+/* restore by band TAS default value in NVRAM (both real SIM and test SIM) for LTE band 3, and this action only valid when the serving cell RAT & Band is equal */
+//    l4c_force_tx_ant_req(src_id,3/*mode*/,3/*rat = LTE*/,0xff,0x03,0);
+	kal_uint8 count = 0, ret_val = KAL_FALSE;
+
+    count = l4c_sar_get_tx_ant_req_count();
+
+    if (count > 0)
+    {
+        /*this means previous SAR update is ongoing
+                   So wait until the previous operation is not finished and then again start the update procedure*/
+        l4c_sar_set_txant_update_needed();
+        return;
+    }
+    /*******Customer should call the function l4c_force_tx_ant_req() after this ************/
+    /*  please store the return value of function call l4c_force_tx_ant_req() in ret_val for every call */
+    //ret_val = l4c_force_tx_ant_req(src_id,4/*mode*/,3/*rat = LTE*/,TX_ANTENNA_STATE_1,0x03,0);
+	//ret_val = l4c_force_tx_ant_req(src_id,4/*mode*/,4/*rat = C2K*/,TX_ANTENNA_STATE_1,0x03,0);
+    /*******Customer should call the function l4c_force_tx_ant_req() before this ************/
+
+    if(ret_val == KAL_FALSE)
+    {
+        /*This means AT+ETXANT from the AP is received and modem is making changes corresponding to it.
+                    So wait until the previous operation is not finished and then again start the update procedure*/
+        l4c_sar_set_txant_update_needed();
+        return;
+    }
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  customer_is_sar_sensor_enable
+ *
+ * DESCRIPTION
+ * Needs  to be updated by customer.
+ *
+ * PARAMETERS
+ *  md_product_model_id    [IN]
+ *      0xFFFFFFFF : If invalid MD Product Model ID
+ *      Any valid 32 bit integer.
+ *
+ * RETURNS
+ * custom_sar_setting:  kal_int16
+ *      -1: L4C_SAR_IGNORE_ACTION
+ *       0: L4C_SAR_MODEM_TO_AP_DISABLE_ACTION
+ *       1: L4C_SAR_MODEM_TO_AP_ENABLE_ACTION
+ *****************************************************************************/
+kal_int8 customer_is_sar_sensor_enable(kal_uint32 md_product_model_id)
+{
+    //customer can implement this function
+    return -1;//return -1 to ignore sar or sar sensor not supported
+}
+#endif
+
diff --git a/mcu/custom/protocol/common/ps/custom_em.h b/mcu/custom/protocol/common/ps/custom_em.h
new file mode 100644
index 0000000..2ca7ba1
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_em.h
@@ -0,0 +1,275 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   custom_em.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This file provides the custom engineer mode declarations
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef CUSTOM_EM_H
+#define CUSTOM_EM_H
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h" //MSBB change #include "stack_config.h"
+#include "ps_em_enum.h"
+/* for HAL, some device definition move to device.h*/
+#include "device.h"
+
+#ifdef __TC01__ 
+#define CUSTOM_RX_PATH_1        1 // Prx only
+#define CUSTOM_RX_PATH_0        2 // Drx only 
+#define CUSTOM_RX_PATH_0_SWAP   3 // Prx swap
+#define CUSTOM_RX_PATH_1_SWAP   4 // Drx swap
+#define CUSTOM_RX_BOTH          0 // Primary & Secondary path ON
+#define CUSTOM_RX_PRI           1 // Primary path ON
+#define CUSTOM_RX_DIV           2 // Secondary path ON
+#define CUSTOM_RX_BOTH_RETURN   3 // Primary & Secondary path ON return string
+#define CUSTOM_RX_PRI_RETURN    0 // Primary path ON return string
+#define CUSTOM_RX_DRI_RETURN    6 // Secondary path ON return string
+#endif
+
+typedef enum
+{
+    CUSTOM_EM_PWM_LEVEL_1 = 0x0,
+    CUSTOM_EM_PWM_LEVEL_2,
+    CUSTOM_EM_PWM_LEVEL_3,
+    CUSTOM_EM_PWM_LEVEL_4,
+    CUSTOM_EM_PWM_LEVEL_5,
+    CUSTOM_EM_PWM_LEVEL_MAX
+} CUSTOM_EM_PWM_LEVEL;
+
+typedef enum
+{
+    CUSTOM_EM_PWM_TYPE_1 = 0x0,
+    CUSTOM_EM_PWM_TYPE_2,
+    CUSTOM_EM_PWM_TYPE_3,
+    CUSTOM_EM_PWM_TYPE_MAX
+} CUSTOM_EM_PWM_TYPE;
+
+typedef enum
+{
+    CUSTOM_EM_UART_PORT1 = 0,
+    CUSTOM_EM_UART_PORT2,
+    CUSTOM_EM_UART_PORT3,
+    CUSTOM_EM_UART_MAX_PORT
+} CUSTOM_EM_PORT_TYPE;
+
+extern kal_bool custom_em_pwm_get_level_value(
+                    CUSTOM_EM_PWM_TYPE type,
+                    CUSTOM_EM_PWM_LEVEL level,
+                    kal_uint16 *freq,
+                    kal_uint8 *duty_cycle);
+extern kal_bool custom_em_pwm_set_level_value(
+                    CUSTOM_EM_PWM_TYPE type,
+                    CUSTOM_EM_PWM_LEVEL level,
+                    kal_uint16 freq,
+                    kal_uint8 duty_cycle);
+extern void custom_em_pwm_get_value(kal_uint16 *freq, kal_uint8 *duty_cycle);
+extern void custom_em_pwm_set_value(kal_uint16 *freq, kal_uint8 *duty_cycle);
+extern void custom_em_pwm_start(CUSTOM_EM_PWM_TYPE type, kal_uint32 freq, kal_uint32 duty);
+extern void custom_em_pwm_stop(CUSTOM_EM_PWM_TYPE type);
+extern kal_uint8 custom_em_pwm_get_hw_current_level(CUSTOM_EM_PWM_TYPE type);
+extern void custom_em_pwm_set_level(CUSTOM_EM_PWM_TYPE type, kal_uint8 level);
+
+extern void custom_em_gpio_start(kal_uint8 port);
+extern void custom_em_gpio_stop(kal_uint8 port);
+extern void custom_em_gpo_writeio(kal_int8 data, kal_int8 port);
+extern void custom_em_nvram_config_com_port(void);
+/* For USB CDROM config*/
+extern kal_uint8 custom_em_get_usb_cdrom_config(void);
+extern void custom_em_set_usb_cdrom_config(kal_uint8 cdrom_config);
+
+#ifdef __SP_RIL_SUPPORT__
+extern void custom_em_thermal_red_ccci_hisr_callback(kal_uint32 value);
+#endif
+extern sim_interface_enum custom_em_get_imei_rec_by_sim(kal_uint8 op, sim_interface_enum slot);
+
+#ifdef __SAR_SENSOR_SUPPORT__
+extern kal_int16 custom_sar_mapping(kal_uint8 g_sar_sensor_state, kal_uint16 g_scenario_index);
+extern void custom_extant_by_sar_sensor_state(kal_uint8 src_id, kal_uint8 g_sar_sensor_state, kal_uint16 g_scenario_index,
+                                                    kal_bool is_test_sim, kal_uint32 md_product_model_id);
+extern kal_int8 customer_is_sar_sensor_enable(kal_uint32 md_product_model_id);
+#endif
+
+#endif /* CUSTOM_EM_H */
+
diff --git a/mcu/custom/protocol/common/ps/custom_em_dummyDrv.c b/mcu/custom/protocol/common/ps/custom_em_dummyDrv.c
new file mode 100644
index 0000000..ec136de
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_em_dummyDrv.c
@@ -0,0 +1,506 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+#ifdef WIN32
+
+#include "fat_fs.h"
+
+//MSBB remove #include "app_buff_alloc.h"     /* Declaration of buffer management API */
+#include "kal_public_defs.h" //MSBB change #include "stack_common.h"
+#include "kal_public_defs.h" //MSBB change #include "stack_msgs.h"
+//MSBB remove #include "app_buff_alloc.h"
+
+//#include "lcd_sw.h"
+//#include "lcm_if.h"
+
+/*****************************************************************************
+ * FUNCTION
+ *  PWM1_Configure
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  freq        [IN]        
+ *  duty        [IN]        
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void PWM1_Configure(kal_uint16 freq, kal_uint8 duty)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  PWM1_Start
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void PWM1_Start(void)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  PWM1_Stop
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void PWM1_Stop(void)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  PWM2_Configure
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  freq        [IN]        
+ *  duty        [IN]        
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void PWM2_Configure(kal_uint16 freq, kal_uint8 duty)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  PWM2_Start
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void PWM2_Start(void)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  PWM2_Stop
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void PWM2_Stop(void)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  Alter_Configure
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  freq        [IN]        
+ *  duty        [IN]        
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void Alter_Configure(kal_uint16 freq, kal_uint8 duty)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  Alter_Start
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void Alter_Start(void)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  Alter_Stop
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void Alter_Stop(void)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+}
+
+/* void LCD_Init_MNT(kal_uint32 bkground, void **buf_addr){}; */
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  LCD_PWRON_MNT
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  on      [IN]        
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void LCD_PWRON_MNT(kal_bool on)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+};
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  LCD_SetContrast_MNT
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  voltage     [IN]        
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void LCD_SetContrast_MNT(kal_uint8 voltage)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+};
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  LCD_ON_MNT
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  on      [IN]        
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void LCD_ON_MNT(kal_bool on)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+};
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  LCD_BlockWrite_MNT
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  startx      [IN]        
+ *  starty      [IN]        
+ *  endx        [IN]        
+ *  endy        [IN]        
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void LCD_BlockWrite_MNT(kal_uint16 startx, kal_uint16 starty, kal_uint16 endx, kal_uint16 endy)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+};
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  LCD_Size_MNT
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  out_LCD_width       [?]     
+ *  out_LCD_height      [?]     
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void LCD_Size_MNT(kal_uint16 *out_LCD_width, kal_uint16 *out_LCD_height)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+};
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  LCD_GetParm_MNT
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  type        [IN]        
+ * RETURNS
+ *  
+ *****************************************************************************/
+//kal_uint8 LCD_GetParm_MNT(lcd_func_type type)
+//{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+//    return 3;
+//}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  LCD_SetBias_MNT
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  bias        [?]     
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void LCD_SetBias_MNT(kal_uint8 *bias)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+};
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  LCD_Contrast_MNT
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  contrast        [?]     
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void LCD_Contrast_MNT(kal_uint8 *contrast)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+};
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  LCD_LineRate_MNT
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  linerate        [?]     
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void LCD_LineRate_MNT(kal_uint8 *linerate)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+};
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  LCD_Temp_Compensate_MNT
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  compensate      [?]     
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void LCD_Temp_Compensate_MNT(kal_uint8 *compensate)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+};
+
+/*
+ * LCD_Funcs LCD_func_MNT = {
+ * NULL,
+ * LCD_PWRON_MNT,
+ * LCD_SetContrast_MNT,
+ * LCD_ON_MNT,
+ * LCD_BlockWrite_MNT,
+ * LCD_Size_MNT,
+ * 
+ * LCD_GetParm_MNT,
+ * LCD_SetBias_MNT,
+ * LCD_Contrast_MNT,
+ * LCD_LineRate_MNT,
+ * LCD_Temp_Compensate_MNT
+ * };
+ * 
+ * 
+ * #ifdef DUAL_LCD
+ * LCD_Funcs   *SubLCD;
+ * #endif
+ * 
+ * void custom_em_LCD_FunConfig(void)
+ * {
+ * MainLCD = &LCD_func_MNT;
+ * #ifdef DUAL_LCD
+ * SubLCD = &LCD_func_MNT;
+ * #endif
+ * }
+ */
+
+#endif /* WIN32 */ 
+
diff --git a/mcu/custom/protocol/common/ps/custom_em_icd_backward_compatible.c b/mcu/custom/protocol/common/ps/custom_em_icd_backward_compatible.c
new file mode 100644
index 0000000..d04c3fc
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_em_icd_backward_compatible.c
@@ -0,0 +1,87 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ * Filename:
+ * ---------
+ * custom_em_icd_backward_compatible.c
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *   This file provides backward compatible functions/structures for EM/ICD.
+ *   By calling this function, libraries, which use EM or ICD,would not need to be rebuilt and released by MTK event if ICD/EM structures are changed.
+ *   Customer should not modify this file if you don't know when these functions/structures will be used..
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by ClearCase. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Log$
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by ClearCase. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "custom_em_icd_backward_compatible.h"
+#include "em_el1_public_struct.h"
+
+
+void custom_bc_get_em_el1_status_ind_struct(
+    em_el1_status_ind_struct *in,
+    custom_bc_em_el1_status_ind_struct *out)
+{
+    kal_uint8 i;
+    out->dl_cc_count = in->dl_cc_count;
+    for (i=0; (i<4) && (i<RPT_LTE_RX_CC_MAX); i++)
+    {
+        out->cell_info[i].tm = in->cell_info[i].tm;
+        out->cell_info[i].ant_port = in->cell_info[i].ant_port;
+
+        kal_mem_cpy(out->dl_info[i].dl_rsrp, in->dl_info[i].dl_rsrp, sizeof(kal_int16)*2);
+       // kal_mem_cpy(out->dl_info[i].DL_Mod_time, in->dl_info[i].DL_Mod_time, sizeof(kal_uint16)*4);
+    }
+}
\ No newline at end of file
diff --git a/mcu/custom/protocol/common/ps/custom_em_icd_backward_compatible.h b/mcu/custom/protocol/common/ps/custom_em_icd_backward_compatible.h
new file mode 100644
index 0000000..732cfed
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_em_icd_backward_compatible.h
@@ -0,0 +1,101 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   custom_em_icd_backward_compatible.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This file provides backward compatible functions/structures for EM/ICD.
+ *   By calling this function, libraries, which use EM or ICD,would not need to be rebuilt and released by MTK event if ICD/EM structures are changed.
+ *   Customer should not modify this file if you don't know when these functions/structures will be used..
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef CUSTOM_EM_ICD_BACKWARD_COMPATIBLE_H
+#define CUSTOM_EM_ICD_BACKWARD_COMPATIBLE_H
+
+#include "kal_general_types.h"
+#include "em_el1_public_struct.h"
+
+typedef struct
+{
+    kal_uint8  ant_port;
+    kal_uint8  tm;          // 0,1~9
+} custom_bc_em_el1_cell_info_struct;
+
+typedef struct
+{
+    kal_int16  dl_rsrp[2]; // -255: disable, -140 ~ 18 (dBm)
+    kal_uint16 DL_Mod_time[4];
+} custom_bc_em_el1_dl_status_struct;
+
+
+typedef struct
+{
+    kal_uint8               dl_cc_count;
+    custom_bc_em_el1_cell_info_struct cell_info[4]; //RPT_LTE_RX_CC_MAX
+    custom_bc_em_el1_dl_status_struct dl_info[4];   //RPT_LTE_RX_CC_MAX
+} custom_bc_em_el1_status_ind_struct;
+
+
+
+extern void custom_bc_get_em_el1_status_ind_struct(
+    em_el1_status_ind_struct *in,
+    custom_bc_em_el1_status_ind_struct *out);
+
+#endif /* CUSTOM_EM_ICD_BACKWARD_COMPATIBLE_H */
+
diff --git a/mcu/custom/protocol/common/ps/custom_emm_config.c b/mcu/custom/protocol/common/ps/custom_emm_config.c
new file mode 100644
index 0000000..18b4a40
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_emm_config.c
@@ -0,0 +1,1496 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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:
+ * ---------
+ *   custom_emm_config.h
+ *
+ * Project:
+ * --------
+ *   MOLY
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the EMM configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifdef __EMM_ENABLE__ 
+
+#include "custom_emm_config.h"
+
+/* Define the PLMN ID that applies SBP_EMM_PROC_FAIL_HANDLING
+ * Need to enable SBP_EMM_PROC_FAIL_HANDLING_BY_OP
+ */ 
+const kal_char* emm_proc_fail_handling_op_list[] = 
+{
+//CMCC
+"46000F", "46002F", "46004F", "46007F", "46008F",
+//CU
+"46001F", "46006F",
+//CT
+"46003F", "46011F"
+};
+
+const kal_uint8 EMM_PROC_FAIL_HANDLING_OP_NUM = sizeof(emm_proc_fail_handling_op_list)/sizeof(kal_char*);
+
+
+/* Define the PLMN ID that skip SBP_DISCARD_PLAINTEXT_NAS_MSG_AFTER_SECURE_EXCHANGE
+ * plaintext NAS signalling messages will be accepted even when secure exchange is established and 
+ * SBP_DISCARD_PLAINTEXT_NAS_MSG_AFTER_SECURE_EXCHANGE is enabled and camped on below PLMN
+ */ 
+const kal_char* emm_allow_plaintext_nas_signal_msg_op_list[] = 
+{
+//Vodafone Germany
+//"26202F", "26204F", "26209F"
+""
+};
+
+const kal_uint8 EMM_ALLOW_PLAINTEXT_NAS_SIGNAL_MSG_OP_NUM = sizeof(emm_allow_plaintext_nas_signal_msg_op_list)/sizeof(kal_char*);
+
+
+//Mapping table for {PLMN ID, Operator}
+
+const plmn_id_op_struct plmn_op_map_list[] = 
+{
+/*******North America******/
+//AT&T
+{"310410", EMM_OP_ATT},
+
+//VzW
+{"311480", EMM_OP_VZW},
+
+//Sprint
+{"310120", EMM_OP_SPRINT},
+
+//T-Mobile
+//GID-MTRREQ-373802
+{"310026", EMM_OP_TMO_US},
+{"310160", EMM_OP_TMO_US},
+{"310200", EMM_OP_TMO_US},
+{"310210", EMM_OP_TMO_US},
+{"310220", EMM_OP_TMO_US},
+{"310230", EMM_OP_TMO_US},
+{"310240", EMM_OP_TMO_US},
+{"310250", EMM_OP_TMO_US},
+{"310260", EMM_OP_TMO_US},
+{"310270", EMM_OP_TMO_US},
+{"310310", EMM_OP_TMO_US},
+{"310490", EMM_OP_TMO_US},
+{"310660", EMM_OP_TMO_US},
+{"310800", EMM_OP_TMO_US},
+
+//Telcel(Mexico)
+{"334020", EMM_OP_TELCEL},
+
+/*******Sounth America**************/
+//Movistar
+{"71606F", EMM_OP_MOVISTAR},
+
+/*******China**************/
+//China Mobile
+{"46000F", EMM_OP_CMCC},
+{"46002F", EMM_OP_CMCC},
+{"46004F", EMM_OP_CMCC},
+{"46007F", EMM_OP_CMCC},
+{"46008F", EMM_OP_CMCC},
+
+//China Unicom
+{"46001F", EMM_OP_CU},
+{"46006F", EMM_OP_CU},
+
+//China Telecom
+{"46003F", EMM_OP_CT},
+{"46011F", EMM_OP_CT},
+
+/******Taiwan**************/
+//Chunghwa Telecom 
+{"46692F", EMM_OP_CHT},
+
+//FarEasTone
+{"46601F", EMM_OP_FAR_EAST},
+
+//Taiwan Mobile
+{"46697F", EMM_OP_TWN},
+
+/*******Asia Others********/
+//Advanced Wireless Network (Thailand)
+{"52003F", EMM_OP_AWN},
+
+//TURKCELL(Turkey)
+{"28601F", EMM_OP_TURKCELL},
+
+//Vodafone India
+{"40401F", EMM_OP_VDF_INDIA},
+{"40405F", EMM_OP_VDF_INDIA},
+{"40411F", EMM_OP_VDF_INDIA},
+{"40413F", EMM_OP_VDF_INDIA},
+{"40415F", EMM_OP_VDF_INDIA},
+{"40420F", EMM_OP_VDF_INDIA},
+{"40427F", EMM_OP_VDF_INDIA},
+{"40430F", EMM_OP_VDF_INDIA},
+{"40443F", EMM_OP_VDF_INDIA},
+{"40446F", EMM_OP_VDF_INDIA},
+{"40460F", EMM_OP_VDF_INDIA},
+{"40484F", EMM_OP_VDF_INDIA},
+{"40486F", EMM_OP_VDF_INDIA},
+{"40488F", EMM_OP_VDF_INDIA},
+{"40566F", EMM_OP_VDF_INDIA},
+{"40567F", EMM_OP_VDF_INDIA},
+{"405750", EMM_OP_VDF_INDIA},
+{"405751", EMM_OP_VDF_INDIA},
+{"405752", EMM_OP_VDF_INDIA},
+{"405753", EMM_OP_VDF_INDIA},
+{"405754", EMM_OP_VDF_INDIA},
+{"405755", EMM_OP_VDF_INDIA},
+{"405756", EMM_OP_VDF_INDIA},
+
+//Ooredoo(Myanmar)
+{"41405F", EMM_OP_OOREDOO},
+
+// KT
+{"45002F", EMM_OP_KT},
+{"45008F", EMM_OP_KT},
+
+//Partner
+{"42501F", EMM_OP_PARTNER},
+
+/*******Europe********/
+//Vodafone Portugal
+{"26801F", EMM_OP_VDF_PORTUGAL},
+
+
+//Seatel(Cambodia)
+{"45611F", EMM_OP_SEATEL},
+
+//Bharti Airtel Limited (India)
+{"40402F", EMM_OP_BAL_INDIA},
+{"40403F", EMM_OP_BAL_INDIA},
+{"40406F", EMM_OP_BAL_INDIA},
+{"40410F", EMM_OP_BAL_INDIA},
+{"40416F", EMM_OP_BAL_INDIA},
+{"40431F", EMM_OP_BAL_INDIA},
+{"40440F", EMM_OP_BAL_INDIA},
+{"40445F", EMM_OP_BAL_INDIA},
+{"40449F", EMM_OP_BAL_INDIA},
+{"40470F", EMM_OP_BAL_INDIA},
+{"40490F", EMM_OP_BAL_INDIA},
+{"40492F", EMM_OP_BAL_INDIA},
+{"40493F", EMM_OP_BAL_INDIA},
+{"40494F", EMM_OP_BAL_INDIA},
+{"40495F", EMM_OP_BAL_INDIA},
+{"40496F", EMM_OP_BAL_INDIA},
+{"40497F", EMM_OP_BAL_INDIA},
+{"40498F", EMM_OP_BAL_INDIA},
+{"40551F", EMM_OP_BAL_INDIA},
+{"40552F", EMM_OP_BAL_INDIA},
+{"40553F", EMM_OP_BAL_INDIA},
+{"40554F", EMM_OP_BAL_INDIA},
+{"40555F", EMM_OP_BAL_INDIA},
+{"40556F", EMM_OP_BAL_INDIA},
+
+//RJIO India
+{"405840", EMM_OP_RJIO_INDIA},
+{"405854", EMM_OP_RJIO_INDIA},
+{"405855", EMM_OP_RJIO_INDIA},
+{"405856", EMM_OP_RJIO_INDIA},
+{"405857", EMM_OP_RJIO_INDIA},
+{"405858", EMM_OP_RJIO_INDIA},
+{"405859", EMM_OP_RJIO_INDIA},
+{"405860", EMM_OP_RJIO_INDIA},
+{"405861", EMM_OP_RJIO_INDIA},
+{"405862", EMM_OP_RJIO_INDIA},
+{"405863", EMM_OP_RJIO_INDIA},
+{"405864", EMM_OP_RJIO_INDIA},
+{"405865", EMM_OP_RJIO_INDIA},
+{"405866", EMM_OP_RJIO_INDIA},
+{"405867", EMM_OP_RJIO_INDIA},
+{"405868", EMM_OP_RJIO_INDIA},
+{"405869", EMM_OP_RJIO_INDIA},
+{"405870", EMM_OP_RJIO_INDIA},
+{"405871", EMM_OP_RJIO_INDIA},
+{"405872", EMM_OP_RJIO_INDIA},
+{"405873", EMM_OP_RJIO_INDIA},
+{"405874", EMM_OP_RJIO_INDIA},
+
+// SKT
+{"45005F", EMM_OP_SKT},
+{"45012F", EMM_OP_SKT},
+
+// LGU
+{"45006F", EMM_OP_LGU},
+
+};
+
+const kal_char* emm_custom_get_short_t3417ext_op_list[] = 
+{
+//Vodafone India
+"40401F", "40405F", "40411F", "40413F", "40415F", "40420F", "40427F", "40430F", "40443F", 
+"40446F", "40460F", "40484F", "40486F", "40488F", "40566F", "40567F", "405750", "405751", 
+"405752", "405753", "405754", "405755", "405756", 
+
+//CU
+"46001F", "46006F",
+
+//Telcel(Mexico)
+"334020",
+
+};
+
+const kal_uint32 CUSTOM_PLMN_OP_LIST_NUM = sizeof(plmn_op_map_list)/sizeof(plmn_id_op_struct);
+const kal_uint16 EMM_CUSTOM_GET_SHORT_T3417EXT_OP_NUM = sizeof(emm_custom_get_short_t3417ext_op_list)/sizeof(kal_char*);
+
+const kal_char* emm_custom_get_auth_rej_not_bar_cell_op_list[] = 
+{
+//AT&T
+"310410",
+
+//VzW
+"311480",
+
+//Sprint
+"310120",
+
+//T-Mobile
+"310026", "310160", "310490", "310210",
+
+//USCC
+"311580", "311581", "311582", "311583", "311584", "311585", "311586", "311587", "311588", "311589", 
+"311220", "311221", "311222", "311223", "311224", "311225", "311226", "311227", "311228", "311229",
+
+//Globalstar Asia Pacific
+"45001F",
+
+//KT
+"45002F", "45004F", "45007F", "45008F",
+
+//Shinsegi Telecom, Inc.
+"45003F",
+
+//SK Telecom
+"45005F", "45012F",
+
+//LG Telecom
+"45006F",
+
+};
+const kal_uint16 EMM_CUSTOM_GET_AUTH_REJ_NOT_BAR_CELL_OP_NUM = sizeof(emm_custom_get_auth_rej_not_bar_cell_op_list)/sizeof(kal_char*);
+
+const kal_char* emm_custom_get_queue_ps_paging_op_list[] = 
+{
+//CMCC
+"46000F", "46002F", "46004F", "46007F", "46008F"
+
+};
+const kal_uint16 EMM_CUSTOM_GET_QUEUE_PS_PAGING_OP_NUM = sizeof(emm_custom_get_queue_ps_paging_op_list)/sizeof(kal_char*);
+
+const kal_char* emm_custom_get_include_vdp_ie_op_list[] = 
+{
+//Operator PLMN
+"23420F"
+
+};
+const kal_uint16 EMM_CUSTOM_GET_INCLUDE_VDP_IE_OP_NUM = sizeof(emm_custom_get_include_vdp_ie_op_list)/sizeof(kal_char*);
+
+const kal_char* emm_custom_get_rat_mode_change_23G_to_2345G_use_imsi_op_list[] = 
+{
+//Operator PLMN
+"FFFFFF"
+
+};
+const kal_uint16 EMM_CUSTOM_GET_RAT_MODE_CHANGE_23G_TO_2345G_USE_IMSI_OP_NUM = sizeof(emm_custom_get_rat_mode_change_23G_to_2345G_use_imsi_op_list)/sizeof(kal_char*);
+
+const kal_char* emm_custom_get_sfr_op_list[] = 
+{
+// SFR, SFR La Reunion, MEO
+"20810F", "64710F", "26806F"
+};
+
+const kal_uint16 EMM_CUSTOM_GET_SFR_OP_NUM = sizeof(emm_custom_get_sfr_op_list)/sizeof(kal_char*);
+
+const kal_uint8 CUSTOM_EMM_NOT_DISABLE_S1_TIMES = 1;
+
+const kal_char* emm_5g4_not_delete_stmsi_op_list[] = 
+{
+//T-Mobile
+"310026", "310160", "310200", "310210", "310220", "310230", "310240", "310250", "310260", "310270",
+"310310", "310490", "310660", "310800"
+};
+const kal_uint8 EMM_5G4_NOT_DELETE_STMSI_OP_NUM = sizeof(emm_5g4_not_delete_stmsi_op_list)/sizeof(kal_char*);
+
+
+/**
+ *  @brief  This function is used to obtain the period of erasing forbbiden TAI list 
+ *
+ * @param[in] mccmnc       The plmn id means SIM PLMN which is contained in IMSI. You can adjust the DEFAULT_FTAI_EXPR_TIME
+ *                         depends on the plmn id or not.
+ *
+ * @return    kal_uint32
+ * @retval    the period to clear forbidden TAI list (in seconds)
+ * 
+ */
+kal_uint32 emm_custom_get_ftai_timer_length(kal_uint8 *mccmnc)
+{
+    /* mccmnc[0] --> mcc1, mccmnc[1] --> mcc2, mccmnc[2] --> mcc3, 
+     * mccmnc[3] --> mnc1, mccmnc[4] --> mnc2, mccmnc[5] --> mnc3, 
+     */
+    
+    /* example: the FTAI timer length is 86400(24hrs) in plmn 46692f
+    if((mccmnc[0] == 0x04 && mccmnc[1] == 0x06 && mccmnc[2] == 0x06 && mccmnc[3] == 0x09 && mccmnc[4] == 0x02 && mccmnc[5] == 0x0f))
+    { 
+        return 86400;
+    }
+    */
+	
+    return DEFAULT_FTAI_EXPR_TIME;
+}
+
+/**
+ *  @brief  This function is used to modify the detach retry max counter.
+ *          Also, this counter may vary depends on country or operator(PLMN id).
+ *          The default value is 5 according to TS 24.301 5.5.2.2.4 abnormal
+ *          case (c). As long as the detach retry max counter is meet, UE will
+ *          give up air detach and local detach. The detacg procedure will last
+ *          5*15 = 75 seconds if network does not respond UE in the worst case. 
+ *          Thus, if you want to decrease the detach finish time, you can modify
+ *          this function and return a value between 1 and 4. More than 5 or less
+ *          than 1 is not allowed. We will consider it as invalid setting. 
+ *          Also, to avoid this modification causing GCF verification or any kind
+ *          of test cases failure, it will not applied for test sim.
+ *
+ * @param[in] mccmnc       Current camping plmn id. You can adjust the counter
+ *                         depends on the plmn id or not.
+ *
+ * @return    kal_uint32
+ * @retval    the detach retry max counter
+ * 
+ */
+kal_uint32 emm_custom_get_detach_retry_max_counter(kal_uint8 *mccmnc)
+{
+#define DETACH_MAX_RETRY_1_TIMES    1
+#define DETACH_MAX_RETRY_2_TIMES    2
+#define DETACH_MAX_RETRY_3_TIMES    3
+#define DETACH_MAX_RETRY_4_TIMES    4
+
+    /* mccmnc[0] --> mcc1, mccmnc[1] --> mcc2, mccmnc[2] --> mcc3, 
+     * mccmnc[3] --> mnc1, mccmnc[4] --> mnc2, mccmnc[5] --> mnc3, 
+     */
+
+    /* example: the max retry counter is 3 in plmn 46692f
+    if((mccmnc[0] == 0x04 && mccmnc[1] == 0x06 && mccmnc[2] == 0x06 && mccmnc[3] == 0x09 && mccmnc[4] == 0x02 && mccmnc[5] == 0x0f))
+    { 
+        return DETACH_MAX_RETRY_3_TIMES;
+    }
+    */
+
+    return DEFAULT_DETACH_RETRY_MAX_COUNTER;
+
+#undef DETACH_MAX_RETRY_1_TIMES
+#undef DETACH_MAX_RETRY_2_TIMES
+#undef DETACH_MAX_RETRY_3_TIMES
+#undef DETACH_MAX_RETRY_4_TIMES
+}
+
+/**
+ * @brief  This function is used to map air emm cause to custom emm cause.
+ *         Note that as UE will behave as custom emm cause, NW behavior is not
+ *         predictable
+ *
+ * @param[in] emm_msg: air emm cause (24.301 Section 8.2 EPS mobility management messages)
+ * @param[in] emm_cause: 24.301 Annex A Cause values for EPS mobility management
+ * @param[in] is_hplmn: KAL_TRUE for hplmn
+ * @param[in] is_test_sim: KAL_TRUE for test SIM
+ * @param[in] protocol_id: LTE stack protocol id
+ * @param[in] mccmnc: current lte serving cell'mcc mnc 
+ * @param[in] pcell: current lte serving cell' infor: earfcn&pci, tac, cell_id, band, bandwidth, fake_cell_indication.
+ * @param[in] integrity: value 0 mean this nas reject message is not integrity.....
+ *
+ * @return    emm_cause_enum: custom emm cause (24.301 Section 8.2 EPS mobility management messages)
+ */
+emm_cause_enum emm_custom_get_customize_cause(emm_msg_type_enum emm_msg, emm_cause_enum emm_cause, kal_bool is_hplmn, kal_bool is_test_sim, protocol_id_enum protocol_id, kal_uint8 *mccmnc, custom_lte_cell_info *pcell, kal_bool integrity)
+{
+    emm_cause_enum cust_cause;
+    kal_prompt_trace(MOD_EMM+protocol_id, "[EMM CUSTOM] emm_custom_get_customize_cause()\n");
+	
+	if (sbp_query_md_feature(SBP_EMM_CUST_MAP_EMM_CAUSE) == KAL_FALSE)
+    {
+        return emm_cause;
+    }
+    
+    // not applicable
+  #ifdef __TC01__
+    if (is_test_sim == KAL_TRUE || is_hplmn == KAL_TRUE ) 
+  #else
+    if (is_test_sim == KAL_TRUE)
+  #endif
+    {
+        return emm_cause;
+    }
+
+    switch (emm_msg)
+    {
+        case EMM_MSG_ATTACH_ACCEPT:
+
+            switch (emm_cause)
+            {
+                // emm cause #16
+                case EMM_CAUSE_MSC_NOT_REACHABLE:
+                    if (mccmnc[0] == 0x04 && mccmnc[1] == 0x06 && mccmnc[2] == 0x00 && 
+					    mccmnc[3] == 0x01 && mccmnc[4] == 0x01 && mccmnc[5] == 0x0f)
+					{
+                        /* mccmnc[0] --> mcc1, mccmnc[1] --> mcc2, mccmnc[2] --> mcc3, 
+                         * mccmnc[3] --> mnc1, mccmnc[4] --> mnc2, mccmnc[5] --> mnc3, 
+                         */
+						 
+						// map from #16 to #18
+						cust_cause = EMM_CAUSE_CS_NOT_AVAILABLE;   // emm cause #18
+					}
+					else
+					{
+                        cust_cause = emm_cause;
+					}
+                    break;
+
+                default:
+                    // no change
+                    cust_cause = emm_cause;
+                    break;
+            }
+            break;
+			
+        case EMM_MSG_ATTACH_REJECT:
+
+            switch (emm_cause)
+            {
+
+                // emm cause #5
+                case EMM_CAUSE_IMEI_NOT_ACCEPTED:
+                    // camp on (LGU+ NW(45006)) and (SIM=LGU+)
+                    // customer can modify (which NW camp on) && (mccmnc==SIM card' mccmnc and is_hplmn to decied which SIM card)
+#ifdef __TC01__                    
+                    if ((mccmnc[0] == 0x04 && mccmnc[1] == 0x05 && mccmnc[2] == 0x00 && 
+					     mccmnc[3] == 0x00 && mccmnc[4] == 0x06 && mccmnc[5] == 0x0f) && 
+						 is_hplmn)
+                    {
+                        cust_cause = EMM_CAUSE_ILLEGAL_ME;    // emm cause #6
+                    }
+					else
+#endif
+					{
+					    cust_cause = emm_cause;
+					}
+                    break; 
+
+                // emm cause #7
+                case EMM_CAUSE_EPS_NOT_ALLOWED:
+                // emm cause #8    
+                case EMM_CAUSE_EPS_NON_EPS_NOT_ALLOWED:
+#ifdef __TC01__
+                    if (is_hplmn == KAL_FALSE)
+                    {
+                    #ifdef __TC01__
+                        cust_cause = EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN;   // emm cause #14
+                    #else
+                        cust_cause = EMM_CAUSE_NO_SUITABLE_CELL_IN_TA;   // emm cause #15
+                    #endif
+                    }
+					else
+#endif
+					{
+					    cust_cause = emm_cause;
+					}
+                    break;
+					
+                // emm cause #14
+                case EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN:
+                    if (mccmnc[0] == 0x04 && mccmnc[1] == 0x05 && mccmnc[2] == 0x02 && 
+					    mccmnc[3] == 0x00 && mccmnc[4] == 0x01 && mccmnc[5] == 0x0f)
+					{
+                        /* mccmnc[0] --> mcc1, mccmnc[1] --> mcc2, mccmnc[2] --> mcc3, 
+                         * mccmnc[3] --> mnc1, mccmnc[4] --> mnc2, mccmnc[5] --> mnc3, 
+                         */
+
+						// no change in operator 45201f
+                        cust_cause = emm_cause;
+					}
+					else
+					{
+                     #ifdef __TC01__
+                        cust_cause = EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN;   // emm cause #14
+                     #else
+                        cust_cause = EMM_CAUSE_NO_SUITABLE_CELL_IN_TA;   // emm cause #15
+                     #endif
+					}
+                    break;
+			
+				// AT&T dometsic roaming requirement: mapping emm cause #12 to #13
+                case EMM_CAUSE_TA_NOT_ALLOWED:
+                    if ((mccmnc[0] == 0x03 && mccmnc[1] == 0x03 && mccmnc[2] == 0x04 && 
+					    mccmnc[3] == 0x00 && mccmnc[4] == 0x02 && mccmnc[5] == 0x00) ||
+						(mccmnc[0] == 0x03 && mccmnc[1] == 0x03 && mccmnc[2] == 0x04 && 
+					    mccmnc[3] == 0x00 && mccmnc[4] == 0x03 && mccmnc[5] == 0x0f))
+					{
+                        // change to cause 13 in operator 334020 / 33403f
+                        cust_cause = EMM_CAUSE_ROAMING_NOT_ALLOWED_IN_TA;
+					}
+					else
+					{
+						cust_cause = emm_cause;   // no change
+					}
+                    break;
+
+                default:
+                    // no change
+                    cust_cause = emm_cause;
+                    break;
+            }
+            break;
+			
+        case EMM_MSG_TAU_ACCEPT:
+
+            switch (emm_cause)
+            {
+                // emm cause #16
+                case EMM_CAUSE_MSC_NOT_REACHABLE:
+                    if (mccmnc[0] == 0x04 && mccmnc[1] == 0x06 && mccmnc[2] == 0x00 && 
+					    mccmnc[3] == 0x01 && mccmnc[4] == 0x01 && mccmnc[5] == 0x0f)
+					{
+                        /* mccmnc[0] --> mcc1, mccmnc[1] --> mcc2, mccmnc[2] --> mcc3, 
+                         * mccmnc[3] --> mnc1, mccmnc[4] --> mnc2, mccmnc[5] --> mnc3, 
+                         */
+						 
+						// map from #16 to #18
+						cust_cause = EMM_CAUSE_CS_NOT_AVAILABLE;   // emm cause #18
+					}
+					else
+					{
+                        cust_cause = emm_cause;
+					}
+                    break;
+
+                default:
+                    // no change
+                    cust_cause = emm_cause;
+                    break;
+            }
+            break;
+
+        case EMM_MSG_TAU_REJECT:
+
+            switch (emm_cause)
+            {
+                // emm cause #5
+                case EMM_CAUSE_IMEI_NOT_ACCEPTED:
+                    // camp on (LGU+ NW(45006)) and (SIM=LGU+)
+                    // customer can modify (which NW camp on) && (mccmnc==SIM card' mccmnc and is_hplmn to decied which SIM card)
+#ifdef __TC01__                    
+                    if ((mccmnc[0] == 0x04 && mccmnc[1] == 0x05 && mccmnc[2] == 0x00 && 
+					     mccmnc[3] == 0x00 && mccmnc[4] == 0x06 && mccmnc[5] == 0x0f) && 
+						 is_hplmn)
+                    {
+                        cust_cause = EMM_CAUSE_ILLEGAL_ME;    // emm cause #6
+                    }
+					else
+#endif
+					{
+					    cust_cause = emm_cause;
+					}
+                    break; 
+
+                // emm cause #7
+                case EMM_CAUSE_EPS_NOT_ALLOWED:
+                // emm cause #8    
+                case EMM_CAUSE_EPS_NON_EPS_NOT_ALLOWED:
+#ifdef __TC01__
+                    if (is_hplmn == KAL_FALSE)
+                    {
+                        cust_cause = EMM_CAUSE_NO_SUITABLE_CELL_IN_TA;   // emm cause #15
+                    }
+					else
+#endif
+					{
+					    cust_cause = emm_cause;
+					}
+                    break;
+
+				// AT&T dometsic roaming requirement: mapping emm cause #12 to #13
+                case EMM_CAUSE_TA_NOT_ALLOWED:
+                    if ((mccmnc[0] == 0x03 && mccmnc[1] == 0x03 && mccmnc[2] == 0x04 && 
+					    mccmnc[3] == 0x00 && mccmnc[4] == 0x02 && mccmnc[5] == 0x00) ||
+						(mccmnc[0] == 0x03 && mccmnc[1] == 0x03 && mccmnc[2] == 0x04 && 
+					    mccmnc[3] == 0x00 && mccmnc[4] == 0x03 && mccmnc[5] == 0x0f))
+					{
+                        // change to cause 13 in operator 334020 / 33403f
+                        cust_cause = EMM_CAUSE_ROAMING_NOT_ALLOWED_IN_TA;
+					}
+					else
+					{
+						cust_cause = emm_cause;   // no change
+					}
+                    break;
+					            
+                default:
+                    // no change
+                    cust_cause = emm_cause;
+                    break;
+            }
+            break;
+
+        case EMM_MSG_DETACH_REQUEST:
+
+            switch (emm_cause)
+            {
+                // emm cause #7
+                case EMM_CAUSE_EPS_NOT_ALLOWED:
+                // emm cause #8    
+                case EMM_CAUSE_EPS_NON_EPS_NOT_ALLOWED:
+#ifdef __TC01__
+                    if (is_hplmn == KAL_FALSE)
+                    {
+                        cust_cause = EMM_CAUSE_NO_SUITABLE_CELL_IN_TA;   // emm cause #15
+                    }
+					else
+#endif
+					{
+					    cust_cause = emm_cause;
+					}
+                    break;
+
+                default:
+                    // no change
+                    cust_cause = emm_cause;
+                    break;
+            }
+            break;
+
+
+        default:
+            // no change
+            cust_cause = emm_cause;
+            break;
+    }
+
+    return cust_cause;
+}
+
+/**
+ * @brief  This function is to get customized T3402 after a NW Deatch of type re-attach not required with some specific cause
+ *
+ * @param[in] emm_cause: 24.301 Annex A Cause values for EPS mobility management
+ * @param[out] cust_t3402: the customized T3402 value
+ *
+ * @return	kal_bool
+ * @retval  KAL_TRUE        Customized value is needed for this cause; cust_t3402 returns the value
+ * @retval  KAL_FALSE      No customized value
+ */
+kal_bool emm_custom_get_t3402_nw_detach_other_cause(emm_cause_enum emm_cause, kal_uint32 *cust_t3402)
+{
+    switch (emm_cause)
+    {
+    case EMM_CAUSE_NO_EPS_CTXT_ACT:     // #40
+        *cust_t3402 = CUSTOM_T3402_VALUE;
+        return KAL_TRUE;
+        break;
+
+    default:
+        break;
+    }
+    return KAL_FALSE;
+}
+
+/**
+ *  @brief  This function is used to customize the length of local release timer for PLMN List in Connected Mode (EMM_T_PLMNLIST_REL)
+ *
+ *
+ * @return    kal_uint32
+ * @retval    the length of local release timer for PLMN List in Connected Mode (EMM_T_PLMNLIST_REL) in sec
+ * 
+ */
+kal_uint32 emm_custom_get_plmn_list_local_release_timer_length()
+{
+    return CUSTOM_EMM_T_PLMNLIST_REL;
+}
+
+
+/**
+ *  @brief  This function is used to customize the length of ps paging protect timer for ps paging (EMM_T_PS_PAGING_PROTECT)
+ *
+ *
+ * @return    kal_uint32
+ * @retval    the length of ps paging protect timer for ps paging (EMM_T_PS_PAGING_PROTECT) in sec
+ * 
+ */
+
+kal_uint32 emm_custom_get_ps_paging_protect_timer_length()
+{
+    return CUSTOM_EMM_T_PS_PAGING_PROTECT;
+}
+
+/**
+ *  @brief  This function is used to customize the length of RATBAND_REL_CONN_TIMER, it used ms as its unit
+ *
+ *
+ * @return    kal_uint32
+ * @retval    the length of RATBAND_REL_CONN_TIMER (ms)
+ * 
+ */
+
+kal_uint32 emm_custom_get_t_ratband_rel_conn_timer_length()
+{
+    return DEFAULT_RATBAND_REL_CONN_TIME;
+}
+
+/**
+ *  @brief  This function is used to customize the length of user response timer for CSFB (EMM_T_CSFB_USER_RSP)
+ *
+ *
+ * @return    kal_uint32
+ * @retval    the length of user response timer for CSFB (EMM_T_CSFB_USER_RSP) in sec
+ * 
+ */
+
+kal_uint32 emm_custom_get_csfb_user_rsp_timer_length()
+{
+    return CUSTOM_EMM_T_CSFB_USER_RSP;
+}
+
+/**
+ *  @brief  This function is used to customize the length of ignore same number of cs service notification timer (EMM_T_IGNORE_SAME_NUMBER_OF_CS_SERVICE_NOTIFICATION)
+ *
+ *
+ * @return    kal_uint32
+ * @retval    the length of ignore same number of cs service notification timer (EMM_T_IGNORE_SAME_NUMBER_OF_CS_SERVICE_NOTIFICATION) in sec
+ * 
+ */
+
+kal_uint32 emm_custom_get_ignore_same_number_of_cs_service_notification_timer_length()
+{
+    return CUSTOM_EMM_T_IGNORE_SAME_NUMBER_OF_CS_SERVICE_NOTIFICATION;
+}
+
+/**
+ *  @brief  This function is used to obtain the period of ignore ps paging after data switch 
+ *
+ *
+ * @return    kal_uint32
+ * @retval    the period to ignore ps paging after data switch  (in seconds)
+ * 
+ */
+kal_uint32 emm_custom_get_ignore_ps_paging_timer_length()
+{
+    return CUSTOM_EMM_T_IGNORE_PS_PAGING;
+}
+
+
+/**
+ *  @brief  This function is used to customize the length of observation paging timer for ps paging (EMM_T_OBSERVATION_PAGING)
+ *
+ *
+ * @return    kal_uint32
+ * @retval    the length of observation paging timer for ps paging (EMM_T_OBSERVATION_PAGING) in sec
+ * 
+ */
+
+kal_uint32 emm_custom_get_observation_paging_timer_length()
+{
+    return CUSTOM_EMM_T_OBSERVATION_PAGING;
+}
+
+/**
+ *  @brief  This function is used to customize the max value of ps paging protect timer for ps paging (EMM_T_PS_PAGING_PROTECT)
+ *
+ *
+ * @return    kal_uint32
+ * @retval    the max value of ps paging protect timer for ps paging (EMM_T_PS_PAGING_PROTECT) in sec
+ * 
+ */
+
+kal_uint32 emm_custom_get_ps_paging_protect_extend_max_value()
+{
+    return CUSTOM_EMM_T_PS_PAGING_PROTECT_EXTEND_MAX;
+}
+
+/**
+ * @brief  This function is used to get the customized value of the counter for NW detach abnormal case b convert to re-attach
+ *
+ *
+ * @return    kal_uint8
+ * @retval    the customized value of the counter for NW detach abnormal case b convert to re-attach
+ * 
+ */
+kal_uint8 emm_custom_get_nw_det_enh_max_counter()
+{
+	return CUSTOM_NW_DET_ENH_MAX_COUNTER;
+}
+
+/**
+ * @brief  This function is used to get the customized interval time for NW detach abnormal case b convert to re-attach
+ *
+ *
+ * @return    kal_uint8
+ * @retval    the customized interval time for NW detach abnormal case b convert to re-attach
+ * 
+ */
+kal_uint32 emm_custom_get_nw_det_enh_max_interval_time()
+{
+	return CUSTOM_NW_DET_ENH_MAX_INTERVAL_TIME;
+}
+
+/**
+ * @brief  This function is to check if current EMM cause need to be treated in the feature of NW 
+ *         detach abnormal case b convert to re-attach
+ *
+ * @param[in] emm_cause: 24.301 Annex A Cause values for EPS mobility management
+ * @param[in] mccmnc:    Current camping plmn id. One can customize applied cause depending on the plmn id.
+ *
+ * @return	kal_bool
+ * @retval  KAL_TRUE     current EMM cause need to be treated in the feature of NW detach abnormal 
+ *                       case b convert to re-attach
+ * @retval  KAL_FALSE    current EMM cause need NOT to be treated in the feature of NW detach abnormal 
+ *                       case b convert to re-attach
+ * 
+ */
+kal_bool emm_custom_is_nw_det_enh_cause(emm_cause_enum emm_cause, kal_uint8 *mccmnc)
+{
+	switch (emm_cause)
+	{
+        case EMM_CAUSE_IMSI_UNKNOWN_IN_HSS:			// #2
+		case EMM_CAUSE_ILLEGAL_UE:					// #3
+        case EMM_CAUSE_ILLEGAL_ME:					// #6
+        case EMM_CAUSE_EPS_NOT_ALLOWED:				// #7
+        case EMM_CAUSE_EPS_NON_EPS_NOT_ALLOWED:		// #8
+        case EMM_CAUSE_PLMN_NOT_ALLOWED:			// #11
+        case EMM_CAUSE_TA_NOT_ALLOWED:				// #12
+        case EMM_CAUSE_ROAMING_NOT_ALLOWED_IN_TA:	// #13
+        case EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN:		// #14
+		case EMM_CAUSE_NO_SUITABLE_CELL_IN_TA:		// #15
+        case EMM_CAUSE_NOT_AUTH_FOR_CSG:			// #25
+	        return KAL_FALSE;
+        default:
+	        return KAL_TRUE;
+	}
+}
+
+/**
+ *  @brief  This function is used to obtain the period of queue ps paging after SR for ps paging
+ *
+ *
+ * @return    kal_uint32
+ * @retval    the period of queue ps paging after SR for ps paging  (in seconds)
+ * 
+ */
+kal_uint32 emm_custom_get_queue_ps_paging_timer_length()
+{
+    return CUSTOM_EMM_T_QUEUE_PS_PAGING;
+}
+/**
+ *  @brief  This function is used to obtain the period of active queue ps paging
+ *
+ *
+ * @return    kal_uint32
+ * @retval    the period of active queue ps paging  (in seconds)
+ * 
+ */
+kal_uint32 emm_custom_get_active_queue_ps_paging_timer_length()
+{
+    return CUSTOM_EMM_T_ACTIVE_QUEUE_PS_PAGING;
+}
+
+/**
+ * @brief  This function is used to do custer special function when attach/tau accept by network.
+ *
+ * @param[in] emm_msg: air emm cause (24.301 Section 8.2 EPS mobility management messages)
+ * @param[in] is_hplmn: KAL_TRUE for hplmn
+ * @param[in] is_test_sim: KAL_TRUE for test SIM
+ * @param[in] protocol_id: LTE stack protocol id
+ * @param[in] mccmnc: current lte serving cell'mcc mnc 
+ * @param[in] pcell: current lte serving cell' infor: earfcn&pci, tac, cell_id, band, bandwidth, fake_cell_indication.
+ *
+ * @return    void
+ */
+void emm_custom_attach_tau_accept(emm_msg_type_enum emm_msg, kal_bool is_hplmn, kal_bool is_test_sim, protocol_id_enum protocol_id, kal_uint8 *mccmnc, custom_lte_cell_info *pcell)
+{
+    //printf: please add printf log here for debugging whether call this function or not.
+    kal_prompt_trace(MOD_EMM+protocol_id, "[EMM CUSTOM] emm_custom_attach_tau_accept()\n");
+
+}
+
+/**
+* @brief This function is used to do custer special function when attach/tau failed.
+*
+* @param[in] emm_msg: air emm cause (24.301 Section 8.2 EPS mobility management messages)
+* @param[in] emm_fail_cause: attach/tau failed cause, such as T3410/T3430 timout, network releas rrc, rach failed.. not include reject.
+* @param[in] is_hplmn: KAL_TRUE for hplmn
+* @param[in] is_test_sim: KAL_TRUE for test SIM
+* @param[in] protocol_id: LTE stack protocol id
+* @param[in] mccmnc: current lte serving cell'mcc mnc 
+* @param[in] pcell: current lte serving cell' infor: earfcn&pci, tac, cell_id, band, bandwidth, fake_cell_indication.
+*
+* @return void
+*/
+void emm_custom_attach_tau_failed(emm_msg_type_enum emm_msg, emm_fail_cause_enum emm_fail_cause, kal_bool is_hplmn, kal_bool is_test_sim, protocol_id_enum protocol_id, kal_uint8 *mccmnc, custom_lte_cell_info *pcell)
+{
+//printf: please add printf log here for debugging whether call this function or not.
+    kal_prompt_trace(MOD_EMM+protocol_id, "[EMM CUSTOM] emm_custom_attach_tau_failed()\n");
+
+//if some condition
+//{
+//emm_custom_bar_cell(time bar_duration, earfcn, pci, sub suibid);   // oppo will bar lte cell from nas/emm side and mtk nas/emm should send bar commad to LTE AS side.
+     //}
+}
+
+/**
+* @brief This function is used to do custer special function when network request imsi when attach/tau accept procedure.
+*
+* @param[in] emm_state: emm reg state
+* @param[in] is_hplmn: KAL_TRUE for hplmn
+* @param[in] is_test_sim: KAL_TRUE for test SIM
+* @param[in] protocol_id: LTE stack protocol id
+* @param[in] mccmnc: current lte serving cell'mcc mnc 
+* @param[in] pcell: current lte serving cell' infor: earfcn&pci, tac, cell_id, band, bandwidth, fake_cell_indication.
+*
+* @return void
+*/
+void emm_custom_request_imsi(eps_emm_state_type emm_reg_state, kal_bool is_hplmn, kal_bool is_test_sim, protocol_id_enum protocol_id, kal_uint8 *mccmnc, custom_lte_cell_info *pcell)
+{
+    //printf: please add printf log here for debugging whether call this function or not.
+    kal_prompt_trace(MOD_EMM+protocol_id, "[EMM CUSTOM] emm_custom_request_imsi()\n");
+
+
+}
+
+/**
+* @brief This function is used to do custer special function when lte redirect during attach/tau procedure.
+*
+* @param[in] emm_state: emm reg state
+* @param[in] is_hplmn: KAL_TRUE for hplmn
+* @param[in] is_test_sim: KAL_TRUE for test SIM
+* @param[in] protocol_id: LTE stack protocol id
+* @param[in] mccmnc: current lte serving cell'mcc mnc 
+* @param[in] pcell: current lte serving cell' infor: earfcn&pci, tac, cell_id, band, bandwidth, fake_cell_indication.
+*
+* @return kal_bool: if TRUE, then should abort currect LTE to gsm redirection and research lte network again.
+ */
+kal_bool emm_custom_attach_tau_redirect_gsm(eps_emm_state_type emm_state, emm_registered_substate_type substate, kal_bool is_hplmn, kal_bool is_test_sim, protocol_id_enum protocol_id, kal_uint8 *mccmnc, custom_lte_cell_info *pcell)
+{
+    kal_bool return_val = KAL_FALSE;
+
+    //printf: please add printf log here for debugging whether call this function or not.
+    kal_prompt_trace(MOD_EMM+protocol_id, "[EMM CUSTOM] emm_custom_attach_tau_redirect_gsm()\n");
+
+
+    return return_val;
+}
+
+/**
+* @brief This function is used to do custer special function when enter airplan mode.
+*
+* @param[in] is_hplmn: KAL_TRUE for hplmn
+* @param[in] is_test_sim: KAL_TRUE for test SIM
+* @param[in] protocol_id: LTE stack protocol id
+* @param[in] mccmnc: home plmn's mcc mnc 
+*
+* @return void.
+*/
+void emm_custom_enter_airplan_mode(kal_bool is_hplmn, kal_bool is_test_sim, protocol_id_enum protocol_id, kal_uint8 *mccmnc)
+{
+//printf: please add printf log here for debugging whether call this function or not.
+    kal_prompt_trace(MOD_EMM+protocol_id, "[EMM CUSTOM] emm_custom_enter_airplan_mode()\n");
+
+}
+
+kal_uint32 emm_custom_get_t_sim_detach_wait_ims_dereg_timer_length()
+{
+    return CUSTOM_T_SIM_DETACH_WAIT_IMS_DEREG_TIME;
+}
+
+/**
+ *  @brief  This function is used to customize the timer length for releasing semaphore of ps paging (EMM_T_RELEASE_PAGING_SEMAPHORE)
+ *
+ *
+ * @return    kal_uint32
+ * @retval    the timer length for releasing semaphore of ps paging (EMM_T_RELEASE_PAGING_SEMAPHORE) in millisec
+ * 
+ */
+
+kal_uint32 emm_custom_get_release_drb_session_timer_length()
+{
+    return CUSTOM_EMM_T_RELEASE_DRB_SESSION;
+}
+
+/**
+ *  @brief This function is used to get the customized count for recovery sync TAU
+ *
+ *
+ * @return 	kal_uint8
+ * @retval 	the customized count for maximum number of recovery sync TAU done with NW
+ *			Value 0 indicates No sync TAU done
+ * 
+ */
+kal_uint8 emm_custom_get_nas_recovery_tau_max_counter()
+{
+	return CUSTOM_NAS_RECOVERY_TAU_MAX_COUNT;
+}
+
+kal_uint32 emm_custom_get_monitor_ue_cap_enquiry_timer_length()
+{
+    return CUSTOM_EMM_T_MONITOR_UE_CAP_ENQUIRY;
+}
+
+/**
+ * @brief  This function is used to get the value of maximum consecutive 
+ *         attempts of mapping SIM invalid causes(#3, #6, #7, #8) to other 
+ *         cause.
+ *
+ * @return    kal_uint8
+ * @retval    the value of maximum attempt count
+ * 
+ */
+kal_uint8 emm_custom_get_sim_invalid_map_max_count()
+{
+	return SIM_INVALID_CAUSE_MAP_MAX_COUNT;
+}
+
+/**
+ * @brief  This function is used to get the customized value of the counter for the local release TAU
+ *
+ *
+ * @return    kal_uint8
+ * @retval    the customized value of the counter for the local release TAU
+ * 
+ */
+kal_uint8 emm_custom_get_local_release_tau_max_counter()
+{
+	return CUSTOM_LOCAL_RELEASE_TAU_MAX_COUNTER;
+}
+
+/**
+ * @brief  This function is used to get the customized interval time for limit state sync TAU
+ *
+ *
+ * @return    kal_uint32
+ * @retval    the customized interval time for limit state sync TAU
+ * 
+ */
+kal_uint32 emm_custom_get_limit_sync_tau_max_interval_time()
+{
+	return CUSTOM_LIMIT_SYNC_TAU_MAX_INTERVAL_TIME;
+}
+
+/**
+ * @brief  This function is used to get the value of maximum consecutive 
+ *         attempts of SERVICE_REJECT with cause other as defined in 24.301 5.6.1.6 (e)
+ *
+ * @return    kal_uint8
+ * @retval    the value of maximum attempt count
+ * 
+ */
+kal_uint8 emm_custom_get_sr_rej_max_attempt_count()
+{
+    return CUSTOM_EMM_SR_REJ_MAX_ATTEMPT_COUNTER;
+}
+
+/**
+ * @brief  This function is used to get the back-off timer length when EMM reach
+ *         maximun attempt of service reject with cause other as defined in 24.301 5.6.1.6 (e).
+ *         EMM will not trigger Service Request until this timer stop or expired
+ *
+ * @return    kal_uint8
+ * @retval    the value back-off timer length
+ * 
+ */
+kal_uint8 emm_custom_get_sr_rej_attempt_back_off_timer_length()
+{
+    return CUSTOM_EMM_T_SR_REJ_ATTEMPT_BACK_OFF_TIME;
+}
+
+/**
+ * @brief  Customize the timer value for EMM_T_DEREG_REL. This function returns the defined value 
+ *         in the header file.
+ *
+ * @return    kal_uint8
+ * @retval    the value of custom EMM_T_DEREG_REL in second
+ * 
+ */
+kal_uint8 emm_custom_get_emm_t_dereg_rel_timer_length()
+{
+    return CUSTOM_EMM_T_DEREG_REL;
+}
+
+/**
+ * @brief  Customize the value for EMM_DELAY_DATA_RETRY. This function returns the defined value 
+ *         in the header file.
+ *
+ * @return    kal_uint32
+ * @retval    the value of custom EMM_DELAY_DATA_RETRY in millisec
+ * 
+ */
+kal_uint32 emm_custom_get_emm_delay_data_retry()
+{
+    return CUSTOM_EMM_DELAY_DATA_RETRY;
+}
+
+/**
+ * @brief  This function is used to get the customized T3411
+ *
+ *
+ * @return    kal_uint32
+ * @retval    the customized T3411 length
+ * 
+ */
+kal_uint32 emm_custom_get_t3411_timer_length_t3410TO()
+{
+    // For SBP_CUSTOM_T3411_FOR_T3410TO
+    return CUSTOM_T3411_VALUE_FOR_T3410TO;
+}
+
+/**
+ *  @brief  This function is used to obtain the period of T_CSFB
+ *  MOLY00650062: 23G search on PLMN 450-08f takes more time to support CSFB. 
+ *  The default 15 sec timer is not sufficient for PLMN search. 
+ *  Hence customizing the T_CSFB timer value for this PLMN.
+ *
+ * @return    kal_bool: KAL_TRUE: Indicates new T_CSFB timer value is available
+ *                KAL_TRUE: Indicates no new T_CSFB timer value is available
+ * @retval    the period of T_CSFB  (in sec)
+ * 
+ */
+kal_bool emm_custom_get_t_csfb_timer_length(kal_uint8 *mccmnc, kal_uint32 *cust_t_csfb)
+{
+   if((mccmnc[0] == 0x04 && mccmnc[1] == 0x05 && mccmnc[2] == 0x00 &&
+       mccmnc[3] == 0x00 && mccmnc[4] == 0x08 && mccmnc[5] == 0x0f))
+   {
+       *cust_t_csfb = CUSTOM_EMM_T_CSFB;
+        return KAL_TRUE;
+   }
+   return KAL_FALSE;
+}
+
+#endif /* __EMM_ENABLE__ */
diff --git a/mcu/custom/protocol/common/ps/custom_emm_config.h b/mcu/custom/protocol/common/ps/custom_emm_config.h
new file mode 100644
index 0000000..1e6a98c
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_emm_config.h
@@ -0,0 +1,236 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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:
+ * ---------
+ *   custom_emm_config.h
+ *
+ * Project:
+ * --------
+ *   MOLY
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the EMM configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *******************************************************************************/
+
+#ifdef __EMM_ENABLE__
+
+#ifndef _CUSTOM_EMM_CONFIG_H
+#define _CUSTOM_EMM_CONFIG_H
+
+#include "kal_general_types.h"
+#include "ps_public_utility.h"
+#include "l3_inc_enums.h"
+#include "l3_inc_local.h"
+
+#define DEFAULT_FTAI_EXPR_TIME      43200       // the clear period of FTAI list, default setting is 43200 seconds(12 hours)
+#define CUSTOM_T3402_VALUE          120         // customized T3402 value (120 seconds)
+#define CUSTOM_T3411_VALUE_FOR_T3410TO    10     // customized T3411 value (10 seconds) for T3410 expiry abnormal. Suggest not lower than 5s ; range 1 ~ 10s
+
+#define DEFAULT_DETACH_RETRY_MAX_COUNTER 5      // TS24.301 5.5.2.2.4 abnormal case (c) five attempts
+#define CUSTOM_EMM_T_PLMNLIST_REL        5      // default is 5 sec, minimum is 2 sec
+#define CUSTOM_EMM_T_PS_PAGING_PROTECT   2000   // default is 2000 millisec
+#define CUSTOM_EMM_T_CSFB_USER_RSP   7   // default is 7 sec
+#define CUSTOM_EMM_T_IGNORE_SAME_NUMBER_OF_CS_SERVICE_NOTIFICATION   3   // default is 3 sec
+#define CUSTOM_EMM_T_OBSERVATION_PAGING        7      // default is 7 sec
+#define CUSTOM_EMM_T_PS_PAGING_PROTECT_EXTEND_MAX        5000      // default max is 2000 millisec
+
+#define CUSTOM_NW_DET_ENH_MAX_COUNTER    3      // customized counter for NW detach abnormal case b convert to re-attach
+#define CUSTOM_NW_DET_ENH_MAX_INTERVAL_TIME    3600      // customized interval time for NW detach abnormal case b convert to re-attach
+#define CUSTOM_EMM_T_IGNORE_PS_PAGING    15     //default 15s, suggest 12 ~ 50
+#define CUSTOM_EMM_T_RELEASE_DRB_SESSION   100   //default is 100 millisec
+#define CUSTOM_EMM_T_QUEUE_PS_PAGING 10 //default 8s, suggest not lower than 8s
+#define CUSTOM_EMM_T_ACTIVE_QUEUE_PS_PAGING 0 //default 0s : always active queue paging, value > 0 : deactive queue paging when timer timeout 
+#define CUSTOM_T_SIM_DETACH_WAIT_IMS_DEREG_TIME     5     //default setting is 5 sec
+#define CUSTOM_EMM_T_MONITOR_UE_CAP_ENQUIRY   5   /* default 5s: range: 0~15s 
+                                                   * 0s means local detach+attach if UE does not receive UECapabilityEnquiry before tau accept, may happen service discontinuously.
+                                                   * >15s UE may delay to report capability, and happen unsyc between UE and NW, not suggest 
+                                                   */
+#define SIM_INVALID_CAUSE_MAP_MAX_COUNT  3      // Maximum consecutive attempts of mapping SIM invalid causes(#3, #6, #7, #8) to other cause
+#define CUSTOM_LOCAL_RELEASE_TAU_MAX_COUNTER        2     // customized counter for the local release TAU
+#define CUSTOM_LIMIT_SYNC_TAU_MAX_INTERVAL_TIME     60    // customized interval time for limit state sync TAU
+#define CUSTOM_EMM_SR_REJ_MAX_ATTEMPT_COUNTER 5 // Maximum consecutive attempts of SERVICE_REQUEST after SERVICE REJECT with cause others(24.301 5.6.1.6 e) received
+#define CUSTOM_EMM_T_SR_REJ_ATTEMPT_BACK_OFF_TIME 10 // Default is 10 second, after number of SR attempt reaching CUSTOM_EMM_SR_REJ_MAX_ATTEMPT_COUNTER, EMM will start this timer and won't trigger SR until timer stop or expired.
+#define CUSTOM_EMM_T_DEREG_REL 5 // Customized value (in second) for EMM_T_DEREG_REL
+#define CUSTOM_EMM_DELAY_DATA_RETRY 5000 // Customized value (in millisec) for delay retry uplink data during T3411
+
+#define DEFAULT_RATBAND_REL_CONN_TIME    2000   // Unit of RATBAND_REL_CONN_TIMER is milisecond. Customize default length of RATBAND_REL_CONN_TIMER to 2 sec
+
+#define CUSTOM_EMM_T_CSFB   15   /* MOLY00650062: customized T_CSFB timer value */
+
+typedef struct
+{
+    EARFCN earfcn;
+    kal_uint16 pci;
+    kal_uint16 tac;
+    kal_uint32 cell_id;
+    kal_uint16 band;
+    kal_uint16 dl_bandwidth;
+    kal_bool fake_cell_ind; /* fake cell indication, TRUE: this is 4G fake cell identified by LTE AS SIB1 of PLMNs; FALSE: this is NOT 4G fake cell identified by LTE AS SIB1 of PLMNs */
+}custom_lte_cell_info;
+
+typedef enum
+{
+  CUSTOM_EMM_NULL = 0,
+  CUSTOM_EMM_DEREGISTERED,
+  CUSTOM_EMM_REGISTERED_INITIATED,
+  CUSTOM_EMM_REGISTERED,
+  CUSTOM_EMM_TRACKING_AREA_UPDATING_INITIATED,
+  CUSTOM_EMM_SERVICE_REQUEST_INITIATED,
+  CUSTOM_EMM_DEREGISTERED_INITIATED,
+  CUSTOM_EMM_INVALID_STATE
+} eps_emm_state_type;
+
+typedef enum
+{
+  CUSTOM_EMM_REGISTERED_NORMAL_SERVICE = 0,
+  CUSTOM_EMM_REGISTERED_UPDATE_NEEDED,
+  CUSTOM_EMM_REGISTERED_ATTEMPTING_TO_UPDATE,
+  CUSTOM_EMM_REGISTERED_NO_CELL_AVAILABLE,
+  CUSTOM_EMM_REGISTERED_PLMN_SEARCH,
+  CUSTOM_EMM_REGISTERED_LIMITED_SERVICE,
+  CUSTOM_EMM_REGISTERED_ATTEMPTING_TO_UPDATE_MM,
+  CUSTOM_EMM_REGISTERED_IMSI_DETACH_INITIATED,
+  CUSTOM_EMM_REGISTERED_INVALID_STATE
+} emm_registered_substate_type;
+
+typedef enum
+{
+  CUSTOM_T3410_EXPIRED = 0,
+  CUSTOM_T3430_EXPIRED,
+  CUSTOM_NW_RELEASE_CONNECTION,
+  CUSTOM_RACH_FAIL
+} emm_fail_cause_enum;
+
+#define CUSTOM_NAS_RECOVERY_TAU_MAX_COUNT    3      //customized count for maximum number of recovery sync TAU done with NW. Value 0 indicates No sync TAU done
+
+/*************************************************************************
+* Variable
+*************************************************************************/
+extern const kal_char* emm_proc_fail_handling_op_list[];
+extern const kal_uint8 EMM_PROC_FAIL_HANDLING_OP_NUM;
+extern const kal_char* emm_allow_plaintext_nas_signal_msg_op_list[];
+extern const kal_uint8 EMM_ALLOW_PLAINTEXT_NAS_SIGNAL_MSG_OP_NUM;
+extern const plmn_id_op_struct plmn_op_map_list[];
+extern const kal_uint32 CUSTOM_PLMN_OP_LIST_NUM;
+extern const kal_char* emm_custom_get_queue_ps_paging_op_list[];
+extern const kal_uint16 EMM_CUSTOM_GET_QUEUE_PS_PAGING_OP_NUM;
+extern const kal_char* emm_custom_get_auth_rej_not_bar_cell_op_list[];
+extern const kal_uint16 EMM_CUSTOM_GET_AUTH_REJ_NOT_BAR_CELL_OP_NUM;
+extern const kal_char* emm_custom_get_short_t3417ext_op_list[];
+extern const kal_uint16 EMM_CUSTOM_GET_SHORT_T3417EXT_OP_NUM;
+extern const kal_char* emm_custom_get_include_vdp_ie_op_list[];
+extern const kal_uint16 EMM_CUSTOM_GET_INCLUDE_VDP_IE_OP_NUM;
+extern const kal_char* emm_custom_get_rat_mode_change_23G_to_2345G_use_imsi_op_list[];
+extern const kal_uint16 EMM_CUSTOM_GET_RAT_MODE_CHANGE_23G_TO_2345G_USE_IMSI_OP_NUM;
+extern const kal_char* emm_custom_get_sfr_op_list[];
+extern const kal_uint16 EMM_CUSTOM_GET_SFR_OP_NUM;
+extern const kal_uint8 CUSTOM_EMM_NOT_DISABLE_S1_TIMES;
+extern const kal_char* emm_5g4_not_delete_stmsi_op_list[];
+extern const kal_uint8 EMM_5G4_NOT_DELETE_STMSI_OP_NUM;
+
+
+/*************************************************************************
+* Function
+*************************************************************************/
+extern kal_uint32 emm_custom_get_ftai_timer_length(kal_uint8 *mccmnc);
+
+extern kal_uint32 emm_custom_get_detach_retry_max_counter(kal_uint8 *mccmnc);
+
+extern emm_cause_enum emm_custom_get_customize_cause(emm_msg_type_enum emm_msg, emm_cause_enum emm_cause, kal_bool is_hplmn, 
+                                                     kal_bool is_test_sim, protocol_id_enum protocol_id, kal_uint8 *mccmnc, custom_lte_cell_info *pcell, kal_bool integrity);
+
+extern kal_bool emm_custom_get_t3402_nw_detach_other_cause(emm_cause_enum emm_cause, kal_uint32 *cust_t3402);
+extern kal_uint32 emm_custom_get_plmn_list_local_release_timer_length();
+extern kal_uint32 emm_custom_get_ps_paging_protect_timer_length();
+extern kal_uint32 emm_custom_get_csfb_user_rsp_timer_length();
+extern kal_uint32 emm_custom_get_ignore_same_number_of_cs_service_notification_timer_length();
+extern kal_uint32 emm_custom_get_observation_paging_timer_length();
+extern kal_uint32 emm_custom_get_ps_paging_protect_extend_max_value();
+
+extern kal_uint8 emm_custom_get_nw_det_enh_max_counter();
+extern kal_uint32 emm_custom_get_nw_det_enh_max_interval_time();
+extern kal_bool emm_custom_is_nw_det_enh_cause(emm_cause_enum emm_cause, kal_uint8 *mccmnc);
+extern void emm_custom_attach_tau_accept(emm_msg_type_enum emm_msg, kal_bool is_hplmn, kal_bool is_test_sim, 
+                                                     protocol_id_enum protocol_id, kal_uint8 *mccmnc, custom_lte_cell_info *pcell);
+extern void emm_custom_attach_tau_failed(emm_msg_type_enum emm_msg, emm_fail_cause_enum emm_fail_cause, kal_bool is_hplmn, kal_bool is_test_sim, 
+                                                     protocol_id_enum protocol_id, kal_uint8 *mccmnc, custom_lte_cell_info *pcell);
+extern void emm_custom_request_imsi(eps_emm_state_type emm_reg_state, kal_bool is_hplmn, kal_bool is_test_sim, protocol_id_enum protocol_id, kal_uint8 *mccmnc, custom_lte_cell_info *pcell);
+extern kal_bool emm_custom_attach_tau_redirect_gsm(eps_emm_state_type emm_state, emm_registered_substate_type substate, kal_bool is_hplmn, kal_bool is_test_sim, 
+                                                     protocol_id_enum protocol_id, kal_uint8 *mccmnc, custom_lte_cell_info *pcell);
+extern void emm_custom_enter_airplan_mode(kal_bool is_hplmn, kal_bool is_test_sim, protocol_id_enum protocol_id, kal_uint8 *mccmnc);
+
+extern void customize_bar_lte_cell(kal_uint32 bar_duration, EARFCN earfcn, kal_uint16 pci, kal_uint32 cell_id, kal_uint8* mccmnc,protocol_id_enum protocol_id, kal_uint16 custom_cause, kal_bool fake_cell_ind);
+
+extern kal_uint32 emm_custom_get_ignore_ps_paging_timer_length();
+
+extern kal_uint32 emm_custom_get_release_drb_session_timer_length();
+extern kal_uint32 emm_custom_get_queue_ps_paging_timer_length();
+extern kal_uint32 emm_custom_get_active_queue_ps_paging_timer_length();
+
+extern kal_uint32 emm_custom_get_t_sim_detach_wait_ims_dereg_timer_length();
+
+extern kal_uint8 emm_custom_get_nas_recovery_tau_max_counter();
+extern kal_uint8 emm_custom_get_sim_invalid_map_max_count();
+
+extern kal_uint32 emm_custom_get_monitor_ue_cap_enquiry_timer_length();
+
+extern kal_uint8 emm_custom_get_local_release_tau_max_counter();
+extern kal_uint32 emm_custom_get_limit_sync_tau_max_interval_time();
+
+extern kal_uint32 emm_custom_get_t_ratband_rel_conn_timer_length();
+
+extern kal_uint8 emm_custom_get_sr_rej_max_attempt_count();
+extern kal_uint8 emm_custom_get_sr_rej_attempt_back_off_timer_length();
+
+extern kal_uint8 emm_custom_get_emm_t_dereg_rel_timer_length();
+
+extern kal_uint32 emm_custom_get_t3411_timer_length_t3410TO();
+extern kal_uint32 emm_custom_get_emm_delay_data_retry();
+
+extern kal_bool emm_custom_get_t_csfb_timer_length(kal_uint8 *mccmnc, kal_uint32 *cust_t_csfb);
+
+#endif /* _CUSTOM_EMM_CONFIG_H */
+
+#endif /* __EMM_ENABLE__ */
+
diff --git a/mcu/custom/protocol/common/ps/custom_enl2_perf_inspect.c b/mcu/custom/protocol/common/ps/custom_enl2_perf_inspect.c
new file mode 100644
index 0000000..493028c
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_enl2_perf_inspect.c
@@ -0,0 +1,662 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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:
+ * ---------
+ *   custom_enl2_perf_inspect.c
+ *
+ * Project:
+ * --------
+ *   VMOLY
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the ENL2 performance custom inspection function
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#include "custom_enl2_perf_inspect.h"
+#include "kal_public_api.h"
+#include "tst_msgid.h"
+#include "tst_sap.h"
+
+#if defined(__LTE_RAT__)
+
+#if defined(__NR_RAT__)
+const custom_enl2_perf_inspect_struct enl2_perf_inspect_list[] =
+{
+    /* {USER_ID, UL_THRES_H, UL_THRES_L, DL_THRES_H, DL_THRES_L, pf_actv_hndlr, pf_deactv_hndlr, valid} */
+	{CUSTOM_ENL2_PERF_INSPECT_USER_0,  /* MOD_ENPDCP */
+        USER_0_UL_THRES_H,
+        USER_0_UL_THRES_L,
+        USER_0_DL_THRES_H,
+        USER_0_DL_THRES_L,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_0_actv_hndlr,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_0_deactv_hndlr,
+        KAL_TRUE},
+    {CUSTOM_ENL2_PERF_INSPECT_USER_1,  /* MOD_NL1 */
+        USER_1_UL_THRES_H,
+        USER_1_UL_THRES_L,
+        USER_1_DL_THRES_H,
+        USER_1_DL_THRES_L,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_1_actv_hndlr,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_1_deactv_hndlr,
+        KAL_TRUE},
+    {CUSTOM_ENL2_PERF_INSPECT_USER_2,  /* MOD_NRRC */
+        USER_2_UL_THRES_H,
+        USER_2_UL_THRES_L,
+        USER_2_DL_THRES_H,
+        USER_2_DL_THRES_L,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_2_actv_hndlr,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_2_deactv_hndlr,
+        KAL_TRUE},
+	{CUSTOM_ENL2_PERF_INSPECT_USER_3,  /* MOD_NRRC */
+        USER_3_UL_THRES_H,
+        USER_3_UL_THRES_L,
+        USER_3_DL_THRES_H,
+        USER_3_DL_THRES_L,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_3_actv_hndlr,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_3_deactv_hndlr,
+        KAL_TRUE},		
+    {CUSTOM_ENL2_PERF_INSPECT_USER_4,  /* MOD_NL1_MOB */
+        USER_4_UL_THRES_H,
+        USER_4_UL_THRES_L,
+        USER_4_DL_THRES_H,
+        USER_4_DL_THRES_L,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_4_actv_hndlr,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_4_deactv_hndlr,
+        KAL_TRUE},
+    {CUSTOM_ENL2_PERF_INSPECT_USER_5,  /* MOD_ERRC */
+        USER_5_UL_THRES_H,
+        USER_5_UL_THRES_L,
+        USER_5_DL_THRES_H,
+        USER_5_DL_THRES_L,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_5_actv_hndlr,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_5_deactv_hndlr,
+        KAL_TRUE},
+
+    {CUSTOM_ENL2_PERF_INSPECT_USER_6,
+        CUSTOM_ENL2_PERF_INV_TPUT,
+        CUSTOM_ENL2_PERF_INV_TPUT,
+        CUSTOM_ENL2_PERF_INV_TPUT,
+        CUSTOM_ENL2_PERF_INV_TPUT,
+        NULL,
+        NULL,
+        KAL_FALSE},
+};
+#else /* if defined(__NR_RAT__) */
+const custom_enl2_perf_inspect_struct enl2_perf_inspect_list[] =
+{
+    /* {USER_ID, UL_THRES_H, UL_THRES_L, DL_THRES_H, DL_THRES_L, pf_actv_hndlr, pf_deactv_hndlr, valid} */
+    {CUSTOM_ENL2_PERF_INSPECT_USER_0,  /* MOD_ENPDCP */
+        USER_0_UL_THRES_H,
+        USER_0_UL_THRES_L,
+        USER_0_DL_THRES_H,
+        USER_0_DL_THRES_L,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_0_actv_hndlr,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_0_deactv_hndlr,
+        KAL_TRUE},
+    {CUSTOM_ENL2_PERF_INSPECT_USER_1,  /* MOD_NL1 */
+        USER_1_UL_THRES_H,
+        USER_1_UL_THRES_L,
+        USER_1_DL_THRES_H,
+        USER_1_DL_THRES_L,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_1_actv_hndlr,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_1_deactv_hndlr,
+        KAL_TRUE},
+    {CUSTOM_ENL2_PERF_INSPECT_USER_2, 
+        CUSTOM_ENL2_PERF_INV_TPUT,
+        CUSTOM_ENL2_PERF_INV_TPUT,
+        CUSTOM_ENL2_PERF_INV_TPUT,
+        CUSTOM_ENL2_PERF_INV_TPUT,
+        NULL,
+        NULL,
+        KAL_FALSE},
+    {CUSTOM_ENL2_PERF_INSPECT_USER_3,  
+        CUSTOM_ENL2_PERF_INV_TPUT,
+        CUSTOM_ENL2_PERF_INV_TPUT,
+        CUSTOM_ENL2_PERF_INV_TPUT,
+        CUSTOM_ENL2_PERF_INV_TPUT,
+        NULL,
+        NULL,
+        KAL_FALSE},
+    {CUSTOM_ENL2_PERF_INSPECT_USER_4,  /* MOD_NL1_MOB */
+        USER_4_UL_THRES_H,
+        USER_4_UL_THRES_L,
+        USER_4_DL_THRES_H,
+        USER_4_DL_THRES_L,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_4_actv_hndlr,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_4_deactv_hndlr,
+        KAL_TRUE},
+    {CUSTOM_ENL2_PERF_INSPECT_USER_5,  /* MOD_ERRC */
+        USER_5_UL_THRES_H,
+        USER_5_UL_THRES_L,
+        USER_5_DL_THRES_H,
+        USER_5_DL_THRES_L,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_5_actv_hndlr,
+        (custom_enl2_perf_inspect_hndlr_f)custom_enl2_perf_user_5_deactv_hndlr,
+        KAL_TRUE},
+    {CUSTOM_ENL2_PERF_INSPECT_USER_6,
+        CUSTOM_ENL2_PERF_INV_TPUT,
+        CUSTOM_ENL2_PERF_INV_TPUT,
+        CUSTOM_ENL2_PERF_INV_TPUT,
+        CUSTOM_ENL2_PERF_INV_TPUT,
+        NULL,
+        NULL,
+        KAL_FALSE},
+};	
+#endif /* if defined(__NR_RAT__) */
+
+const custom_enl2_perf_inspect_struct *p_enl2_perf_inspect_list = enl2_perf_inspect_list;
+
+kal_uint32  g_enpdcp_ggr_enabled_protocol_idx = CUSTOM_ENL2_PERF_INV_PIDX;
+kal_uint32  g_nl1_ctrl_suspend_evt_exec_protocol_idx = CUSTOM_ENL2_PERF_INV_PIDX;
+kal_uint32  g_nl1_mob_prefer_lte_enabled_protocol_idx = CUSTOM_ENL2_PERF_INV_PIDX;
+kal_uint32  g_errc_mob_prefer_lte_enabled_protocol_idx = CUSTOM_ENL2_PERF_INV_PIDX;
+#if defined(__NR_RAT__)
+kal_uint32  g_nrrc_user2_tput_control_protocol_idx = CUSTOM_ENL2_PERF_INV_PIDX;
+kal_uint32  g_nrrc_user3_tput_control_protocol_idx = CUSTOM_ENL2_PERF_INV_PIDX;
+#endif /* if defined(__NR_RAT__) */
+/********************************************************************
+ * CUSTOM_ENL2_PERF_INSPECT_USER_0: MOD_ENPDCP (example)
+ * Usage: Send notification to MOD_ENPDCP when threshold reached
+ *
+ * @brief  This function is used to send inject string to SIM_X when SIM_X
+ *         Tput exceed pre-defined threshold
+ * @return    KAL_TRUE if activated successfully. KAL_FALSE if nothing changed
+ * @param[in] protocol_idx, protocol_idx whose Tput exceed threshold
+ ********************************************************************/
+kal_bool custom_enl2_perf_user_0_actv_hndlr(kal_uint32 protocol_idx)
+{
+    if (g_enpdcp_ggr_enabled_protocol_idx != CUSTOM_ENL2_PERF_INV_PIDX)
+    {
+        return KAL_FALSE;
+    }
+
+    kal_char *inject = "customGGRNotify";
+    tst_module_string_inject_struct *tst_inject;
+    tst_inject = (tst_module_string_inject_struct *)construct_local_para(
+        (kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+    tst_inject->index = 1;  // activate
+    strncpy((kal_char *)tst_inject->string, inject, (strlen(inject) + 1));
+
+    CUSTOM_ENL2_PERF_MSG_SEND(
+        CUSTOM_ENL2_PERF_SOURCE_MOD + protocol_idx,
+        MOD_ENPDCP + protocol_idx,
+        0,
+        MSG_ID_TST_INJECT_STRING,
+        (local_para_struct*)tst_inject,
+		NULL);
+
+    g_enpdcp_ggr_enabled_protocol_idx = protocol_idx;
+
+    return KAL_TRUE;
+}
+
+kal_bool custom_enl2_perf_user_0_deactv_hndlr(kal_uint32 protocol_idx)
+{
+    if (g_enpdcp_ggr_enabled_protocol_idx != protocol_idx)
+    {
+        return KAL_FALSE;
+    }
+
+    kal_char *inject = "customGGRNotify";
+    tst_module_string_inject_struct *tst_inject;
+    tst_inject = (tst_module_string_inject_struct *)construct_local_para(
+        (kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+    tst_inject->index = 0;  // de-activate
+    strncpy((kal_char *)tst_inject->string, inject, (strlen(inject) + 1));
+
+    CUSTOM_ENL2_PERF_MSG_SEND(
+        CUSTOM_ENL2_PERF_SOURCE_MOD + protocol_idx,
+        MOD_ENPDCP + protocol_idx,
+        0,
+        MSG_ID_TST_INJECT_STRING,
+        (local_para_struct*)tst_inject,
+		NULL);
+    g_enpdcp_ggr_enabled_protocol_idx = CUSTOM_ENL2_PERF_INV_PIDX;
+
+    return KAL_TRUE;
+}
+
+/********************************************************************
+ * CUSTOM_ENL2_PERF_INSPECT_USER_1: MOD_NL1
+ * Usage: Send notification to MOD_NL1 when threshold reached
+ *
+ * @brief  This function is used to send inject string to SIM_Y when SIM_X
+ *         Tput exceed pre-defined threshold
+ * @return    KAL_TRUE if activated successfully. KAL_FALSE if nothing changed
+ * @param[in] protocol_idx, protocol_idx whose Tput exceed threshold
+ ********************************************************************/
+kal_bool custom_enl2_perf_user_1_actv_hndlr(kal_uint32 protocol_idx)
+{
+    if (g_nl1_ctrl_suspend_evt_exec_protocol_idx != CUSTOM_ENL2_PERF_INV_PIDX)
+    {
+        return KAL_FALSE;
+    }
+
+    kal_uint32 peer_pidx = CUSTOM_ENL2_PERF_GET_PEER_PROTOCOL_IDX(protocol_idx);
+
+    kal_char *inject = "NL1_CTRL_SUSPEND_EVT_EXEC_IND";
+    tst_module_string_inject_struct *tst_inject;
+    tst_inject = (tst_module_string_inject_struct *)construct_local_para(
+        (kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+    tst_inject->index = 35;  // suspend
+    strncpy((kal_char *)tst_inject->string, inject, (strlen(inject) + 1));
+
+    CUSTOM_ENL2_PERF_MSG_SEND(
+        CUSTOM_ENL2_PERF_SOURCE_MOD + protocol_idx,
+        MOD_NL1 + peer_pidx,
+        0,
+        MSG_ID_TST_INJECT_STRING,
+        (local_para_struct*)tst_inject,
+		NULL);
+    g_nl1_ctrl_suspend_evt_exec_protocol_idx = protocol_idx;
+
+    return KAL_TRUE;
+}
+
+kal_bool custom_enl2_perf_user_1_deactv_hndlr(kal_uint32 protocol_idx)
+{
+    if (g_nl1_ctrl_suspend_evt_exec_protocol_idx != protocol_idx)
+    {
+        return KAL_FALSE;
+    }
+
+    kal_uint32 peer_pidx = CUSTOM_ENL2_PERF_GET_PEER_PROTOCOL_IDX(protocol_idx);
+
+    kal_char *inject = "NL1_CTRL_SUSPEND_EVT_EXEC_IND";
+    tst_module_string_inject_struct *tst_inject;
+    tst_inject = (tst_module_string_inject_struct *)construct_local_para(
+        (kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+    tst_inject->index = 34;  // resume
+    strncpy((kal_char *)tst_inject->string, inject, (strlen(inject) + 1));
+
+    CUSTOM_ENL2_PERF_MSG_SEND(
+        CUSTOM_ENL2_PERF_SOURCE_MOD + protocol_idx,
+        MOD_NL1 + peer_pidx,
+        0,
+        MSG_ID_TST_INJECT_STRING,
+        (local_para_struct*)tst_inject,
+		NULL);
+    g_nl1_ctrl_suspend_evt_exec_protocol_idx = CUSTOM_ENL2_PERF_INV_PIDX;
+
+    return KAL_TRUE;
+}
+
+#if defined(__NR_RAT__)
+/********************************************************************
+ * CUSTOM_ENL2_PERF_INSPECT_USER_2: MOD_NRRC
+ * Usage:  Send notification to MOD_NRRC when measurement specific high Tput
+ * threshold reached
+ *
+ * @brief  This function is used to send inject string to SIM_Y when SIM_X
+ *         Tput exceed pre-defined threshold specific for Gemini measurement
+ *         sharing
+ * @return    KAL_TRUE if activated successfully. KAL_FALSE if nothing changed
+ * @param[in] protocol_idx, protocol_idx whose Tput exceed threshold
+ ********************************************************************/
+kal_bool custom_enl2_perf_user_2_actv_hndlr(kal_uint32 protocol_idx)
+{
+    if (g_nrrc_user2_tput_control_protocol_idx != CUSTOM_ENL2_PERF_INV_PIDX)
+    {
+        return KAL_FALSE;
+    }
+
+    kal_uint32 peer_pidx = CUSTOM_ENL2_PERF_GET_PEER_PROTOCOL_IDX(protocol_idx);
+
+    kal_char *inject = "NRRC_GEMINI_MEAS_SHARE_TPUT";
+    tst_module_string_inject_struct *tst_inject;
+    tst_inject = (tst_module_string_inject_struct *)construct_local_para(
+        (kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+    tst_inject->index = 1;
+    strncpy((kal_char *)tst_inject->string, inject, (strlen(inject) + 1));
+
+    CUSTOM_ENL2_PERF_MSG_SEND(
+        CUSTOM_ENL2_PERF_SOURCE_MOD + protocol_idx,
+        MOD_NRRC + peer_pidx,
+        0,
+        MSG_ID_TST_INJECT_STRING,
+        (local_para_struct*)tst_inject,
+        NULL);
+    g_nrrc_user2_tput_control_protocol_idx = protocol_idx;
+
+    return KAL_TRUE;
+}
+
+kal_bool custom_enl2_perf_user_2_deactv_hndlr(kal_uint32 protocol_idx)
+{
+    if (g_nrrc_user2_tput_control_protocol_idx != protocol_idx)
+    {
+        return KAL_FALSE;
+    }
+
+    kal_uint32 peer_pidx = CUSTOM_ENL2_PERF_GET_PEER_PROTOCOL_IDX(protocol_idx);
+
+    kal_char *inject = "NRRC_GEMINI_MEAS_SHARE_TPUT";
+    tst_module_string_inject_struct *tst_inject;
+    tst_inject = (tst_module_string_inject_struct *)construct_local_para(
+        (kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+    tst_inject->index = 0;
+    strncpy((kal_char *)tst_inject->string, inject, (strlen(inject) + 1));
+
+    CUSTOM_ENL2_PERF_MSG_SEND(
+        CUSTOM_ENL2_PERF_SOURCE_MOD + protocol_idx,
+        MOD_NRRC + peer_pidx,
+        0,
+        MSG_ID_TST_INJECT_STRING,
+        (local_para_struct*)tst_inject,
+        NULL);
+    g_nrrc_user2_tput_control_protocol_idx = CUSTOM_ENL2_PERF_INV_PIDX;
+
+    return KAL_TRUE;
+}
+
+/********************************************************************
+ * CUSTOM_ENL2_PERF_INSPECT_USER_3: MOD_NRRC
+ * Usage:  Send notification to MOD_NRRC when paging specific high Tput
+ * threshold reached
+ *
+ * @brief  This function is used to send inject string to SIM_Y when SIM_X
+ *         Tput exceed pre-defined threshold specific for Gemini paging
+ *         sharing
+ * @return    KAL_TRUE if activated successfully. KAL_FALSE if nothing changed
+ * @param[in] protocol_idx, protocol_idx whose Tput exceed threshold
+ ********************************************************************/
+kal_bool custom_enl2_perf_user_3_actv_hndlr(kal_uint32 protocol_idx)
+{
+    if (g_nrrc_user3_tput_control_protocol_idx != CUSTOM_ENL2_PERF_INV_PIDX)
+    {
+        return KAL_FALSE;
+    }
+
+    kal_uint32 peer_pidx = CUSTOM_ENL2_PERF_GET_PEER_PROTOCOL_IDX(protocol_idx);
+
+    kal_char *inject = "NRRC_GEMINI_PAGING_SHARE_TPUT";
+    tst_module_string_inject_struct *tst_inject;
+    tst_inject = (tst_module_string_inject_struct *)construct_local_para(
+        (kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+    tst_inject->index = 1;
+    strncpy((kal_char *)tst_inject->string, inject, (strlen(inject) + 1));
+	
+    CUSTOM_ENL2_PERF_MSG_SEND(
+        CUSTOM_ENL2_PERF_SOURCE_MOD + protocol_idx,
+        MOD_NRRC + peer_pidx,
+        0,
+        MSG_ID_TST_INJECT_STRING,
+        (local_para_struct*)tst_inject,
+        NULL);
+    g_nrrc_user3_tput_control_protocol_idx = protocol_idx;
+
+    return KAL_TRUE;
+}
+
+kal_bool custom_enl2_perf_user_3_deactv_hndlr(kal_uint32 protocol_idx)
+{
+    if (g_nrrc_user3_tput_control_protocol_idx != protocol_idx)
+    {
+        return KAL_FALSE;
+    }
+
+    kal_uint32 peer_pidx = CUSTOM_ENL2_PERF_GET_PEER_PROTOCOL_IDX(protocol_idx);
+
+    kal_char *inject = "NRRC_GEMINI_PAGING_SHARE_TPUT";
+    tst_module_string_inject_struct *tst_inject;
+    tst_inject = (tst_module_string_inject_struct *)construct_local_para(
+        (kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+    tst_inject->index = 0;
+    strncpy((kal_char *)tst_inject->string, inject, (strlen(inject) + 1));
+	
+    CUSTOM_ENL2_PERF_MSG_SEND(
+        CUSTOM_ENL2_PERF_SOURCE_MOD + protocol_idx,
+        MOD_NRRC + peer_pidx,
+        0,
+        MSG_ID_TST_INJECT_STRING,
+        (local_para_struct*)tst_inject,
+        NULL);
+    g_nrrc_user3_tput_control_protocol_idx = CUSTOM_ENL2_PERF_INV_PIDX;
+
+    return KAL_TRUE;
+}
+#endif /* if defined(__NR_RAT__) */
+
+/********************************************************************
+ * CUSTOM_ENL2_PERF_INSPECT_USER_4: MOD_NL1_MOB
+ * Usage:  Send notification to MOD_NL1_MOB when threshold reached
+ *
+ * @brief  This function is used to send inject string to SIM_Y when SIM_X
+ *         Tput exceed pre-defined threshold
+ * @return    KAL_TRUE if activated successfully. KAL_FALSE if nothing changed
+ * @param[in] protocol_idx, protocol_idx whose Tput exceed threshold
+ ********************************************************************/
+kal_bool custom_enl2_perf_user_4_actv_hndlr(kal_uint32 protocol_idx)
+{
+    if (g_nl1_mob_prefer_lte_enabled_protocol_idx != CUSTOM_ENL2_PERF_INV_PIDX)
+    {
+        return KAL_FALSE;
+    }
+
+    kal_uint32 peer_pidx = CUSTOM_ENL2_PERF_GET_PEER_PROTOCOL_IDX(protocol_idx);
+
+    tst_module_string_inject_struct *tst_inject;
+    tst_inject = (tst_module_string_inject_struct *)construct_local_para(
+        (kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+    tst_inject->index = 1;
+    strcpy((kal_char *)tst_inject->string, "SET_LTE_PREFER_FOR_VIDLE");
+
+    CUSTOM_ENL2_PERF_MSG_SEND(
+        CUSTOM_ENL2_PERF_SOURCE_MOD + protocol_idx,
+        MOD_NL1_MOB + peer_pidx,
+        0,
+        MSG_ID_TST_INJECT_STRING,
+        (local_para_struct*)tst_inject,
+		NULL);
+    g_nl1_mob_prefer_lte_enabled_protocol_idx = protocol_idx;
+
+    return KAL_TRUE;
+}
+
+kal_bool custom_enl2_perf_user_4_deactv_hndlr(kal_uint32 protocol_idx)
+{
+    if (g_nl1_mob_prefer_lte_enabled_protocol_idx != protocol_idx)
+    {
+        return KAL_FALSE;
+    }
+
+    kal_uint32 peer_pidx = CUSTOM_ENL2_PERF_GET_PEER_PROTOCOL_IDX(protocol_idx);
+
+    tst_module_string_inject_struct *tst_inject;
+    tst_inject = (tst_module_string_inject_struct *)construct_local_para(
+        (kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+    tst_inject->index = 0;
+    strcpy((kal_char *)tst_inject->string, "SET_LTE_PREFER_FOR_VIDLE");
+
+    CUSTOM_ENL2_PERF_MSG_SEND(
+        CUSTOM_ENL2_PERF_SOURCE_MOD + protocol_idx,
+        MOD_NL1_MOB + peer_pidx,
+        0,
+        MSG_ID_TST_INJECT_STRING,
+        (local_para_struct*)tst_inject,
+		NULL);
+    g_nl1_mob_prefer_lte_enabled_protocol_idx = CUSTOM_ENL2_PERF_INV_PIDX;
+
+    return KAL_TRUE;
+}
+ 
+/********************************************************************
+ * CUSTOM_ENL2_PERF_INSPECT_USER_5: MOD_ERRC_MOB
+ * Usage:  Send notification to MOD_NL1_MOB when threshold reached
+ *
+ * @brief  This function is used to send inject string to SIM_Y when SIM_X
+ *         Tput exceed pre-defined threshold
+ * @return    KAL_TRUE if activated successfully. KAL_FALSE if nothing changed
+ * @param[in] protocol_idx, protocol_idx whose Tput exceed threshold
+ ********************************************************************/
+kal_bool custom_enl2_perf_user_5_actv_hndlr(kal_uint32 protocol_idx)
+{
+    if (g_errc_mob_prefer_lte_enabled_protocol_idx != CUSTOM_ENL2_PERF_INV_PIDX)
+    {
+        return KAL_FALSE;
+    }
+
+    kal_uint32 peer_pidx = CUSTOM_ENL2_PERF_GET_PEER_PROTOCOL_IDX(protocol_idx);
+
+    tst_module_string_inject_struct *tst_inject;
+    tst_inject = (tst_module_string_inject_struct *)construct_local_para(
+        (kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+    tst_inject->index = 1;
+    strcpy((kal_char *)tst_inject->string, "SET_LTE_PREFER_FOR_VIDLE");
+
+    CUSTOM_ENL2_PERF_MSG_SEND(
+        CUSTOM_ENL2_PERF_SOURCE_MOD + protocol_idx,
+        MOD_ERRC + peer_pidx,
+        0,
+        MSG_ID_TST_INJECT_STRING,
+        (local_para_struct*)tst_inject,
+		NULL);
+    g_errc_mob_prefer_lte_enabled_protocol_idx = protocol_idx;
+
+    return KAL_TRUE;
+}
+
+kal_bool custom_enl2_perf_user_5_deactv_hndlr(kal_uint32 protocol_idx)
+{
+    if (g_errc_mob_prefer_lte_enabled_protocol_idx != protocol_idx)
+    {
+        return KAL_FALSE;
+    }
+
+    kal_uint32 peer_pidx = CUSTOM_ENL2_PERF_GET_PEER_PROTOCOL_IDX(protocol_idx);
+
+    tst_module_string_inject_struct *tst_inject;
+    tst_inject = (tst_module_string_inject_struct *)construct_local_para(
+        (kal_uint16)sizeof(tst_module_string_inject_struct), TD_RESET);
+
+    tst_inject->index = 0;
+    strcpy((kal_char *)tst_inject->string, "SET_LTE_PREFER_FOR_VIDLE");
+
+    CUSTOM_ENL2_PERF_MSG_SEND(
+        CUSTOM_ENL2_PERF_SOURCE_MOD + protocol_idx,
+        MOD_ERRC + peer_pidx,
+        0,
+        MSG_ID_TST_INJECT_STRING,
+        (local_para_struct*)tst_inject,
+		NULL);
+    g_errc_mob_prefer_lte_enabled_protocol_idx = CUSTOM_ENL2_PERF_INV_PIDX;
+
+    return KAL_TRUE;
+}
+/********************************************************************
+ * CUSTOM_ENL2_PERF_INSPECT_USER_6: MOD_XXX
+ * Usage:
+ ********************************************************************/
+
+/********************************************************************
+ * CUSTOM_ENL2_PERF_INSPECT_USER_7: MOD_XXX
+ * Usage:
+ ********************************************************************/
+
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_enl2_perf_inspect.h b/mcu/custom/protocol/common/ps/custom_enl2_perf_inspect.h
new file mode 100644
index 0000000..acef99b
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_enl2_perf_inspect.h
@@ -0,0 +1,179 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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:
+ * ---------
+ *   custom_enl2_perf_inspect.h
+ *
+ * Project:
+ * --------
+ *   VMOLY
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the ENL2 performance custom inspection function.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *******************************************************************************/
+#if defined(__LTE_RAT__)
+
+#ifndef _CUSTOM_ENL2_PERF_INSPECT_H
+#define _CUSTOM_ENL2_PERF_INSPECT_H
+
+#include "kal_general_types.h"
+
+/*************************************************************************
+* TYPE DEFINITIONS & ENUMS
+*************************************************************************/
+#define CUSTOM_ENL2_PERF_SOURCE_MOD (MOD_ENL2ICD)
+#define CUSTOM_ENL2_PERF_INV_TPUT   (0xFFFFFFFF)
+#define CUSTOM_ENL2_PERF_INV_PIDX   (~0x0)
+#if defined(__GEMINI_LTE__) || defined(__GEMINI_NR__)
+#define CUSTOM_ENL2_PERF_PROTOCOL_NUM  (2)
+#else
+#define CUSTOM_ENL2_PERF_PROTOCOL_NUM  (1)
+#endif /* #if defined(__GEMINI_LTE__) || defined(__GEMINI_NR__) */
+
+typedef enum
+{
+    CUSTOM_ENL2_PERF_INSPECT_USER_0 = 0,
+    CUSTOM_ENL2_PERF_INSPECT_USER_1,
+    CUSTOM_ENL2_PERF_INSPECT_USER_2,
+    CUSTOM_ENL2_PERF_INSPECT_USER_3,
+    CUSTOM_ENL2_PERF_INSPECT_USER_4,
+    CUSTOM_ENL2_PERF_INSPECT_USER_5,
+    CUSTOM_ENL2_PERF_INSPECT_USER_6,
+    CUSTOM_ENL2_PERF_INSPECT_USER_NUM
+} custom_enl2_perf_inspect_user;
+
+typedef kal_bool (*custom_enl2_perf_inspect_hndlr_f) (kal_uint32 protocol_idx);
+
+typedef struct
+{
+    custom_enl2_perf_inspect_user   user_id;
+    kal_uint32  ul_thres_h;
+    kal_uint32  ul_thres_l;
+    kal_uint32  dl_thres_h;
+    kal_uint32  dl_thres_l;
+    custom_enl2_perf_inspect_hndlr_f   fp_actv_hndlr;
+    custom_enl2_perf_inspect_hndlr_f   fp_deactv_hndlr;
+    kal_bool    valid;
+} custom_enl2_perf_inspect_struct;
+
+/* CUSTOM_ENL2_PERF_INSPECT_USER_0: MOD_ENPDCP */
+#define USER_0_UL_THRES_H (50) // Mbps
+#define USER_0_UL_THRES_L (50)
+#define USER_0_DL_THRES_H (400)
+#define USER_0_DL_THRES_L (400)
+/* CUSTOM_ENL2_PERF_INSPECT_USER_1: MOD_NL1 */
+#define USER_1_UL_THRES_H (10000) // Mbps
+#define USER_1_UL_THRES_L (10000)
+#define USER_1_DL_THRES_H (10000)
+#define USER_1_DL_THRES_L (10000)
+#if defined(__NR_RAT__)
+/* CUSTOM_ENL2_PERF_INSPECT_USER_2: MOD_NRRC */
+#define USER_2_UL_THRES_H (10) // Mbps
+#define USER_2_UL_THRES_L (10)
+#define USER_2_DL_THRES_H (100)
+#define USER_2_DL_THRES_L (100)
+/* CUSTOM_ENL2_PERF_INSPECT_USER_3: MOD_NRRC */
+#define USER_3_UL_THRES_H (10) // Mbps
+#define USER_3_UL_THRES_L (10)
+#define USER_3_DL_THRES_H (100)
+#define USER_3_DL_THRES_L (100)
+#endif /* #if defined(__NR_RAT__) */
+/* CUSTOM_ENL2_PERF_INSPECT_USER_4: MOD_NL1_MOB */
+#define USER_4_UL_THRES_H (50) // Mbps
+#define USER_4_UL_THRES_L (50)
+#define USER_4_DL_THRES_H (300)
+#define USER_4_DL_THRES_L (300)
+/* CUSTOM_ENL2_PERF_INSPECT_USER_5: MOD_ERRC */
+#define USER_5_UL_THRES_H (50) // Mbps
+#define USER_5_UL_THRES_L (50)
+#define USER_5_DL_THRES_H (300)
+#define USER_5_DL_THRES_L (300)
+
+/*************************************************************************
+* MACROS
+*************************************************************************/
+#define CUSTOM_ENL2_PERF_GET_PEER_PROTOCOL_IDX(_pidx)   ((_pidx+1) & 0x1)
+#define CUSTOM_ENL2_PERF_GET_MAX(_a, _b)    ((_a > _b) ? _a : _b)
+#define CUSTOM_ENL2_PERF_GET_MIN(_a, _b)    ((_a < _b) ? _a : _b)
+#define CUSTOM_ENL2_PERF_MSG_SEND(_src, _dst, _sap, _msg_id, _local, _peer) \
+do { \
+    ilm_struct ilm; \
+    ilm.src_mod_id = (_src); ilm.dest_mod_id = (_dst); \
+    ilm.sap_id = (_sap); ilm.msg_id = (_msg_id); \
+    ilm.local_para_ptr = (local_para_struct *)(_local); \
+    ilm.peer_buff_ptr = (_peer); \
+    msg_send_ext_queue(&ilm); \
+} while(0);
+
+/*************************************************************************
+* Variables
+*************************************************************************/
+extern const custom_enl2_perf_inspect_struct *p_enl2_perf_inspect_list;
+
+/*************************************************************************
+* Functions
+*************************************************************************/
+extern void custom_enl2_perf_init(kal_uint32*, kal_uint32*, kal_uint32*, kal_uint32*);
+extern kal_uint8 custom_enl2_perf_actv_check(kal_bool, kal_uint32, kal_uint32);
+extern kal_uint8 custom_enl2_perf_deactv_check(kal_uint32, kal_uint32, kal_uint32);
+extern kal_uint8 custom_enl2_perf_deactv_all_with_protocol_idx(kal_uint32);
+extern kal_uint8 custom_enl2_perf_get_actv_btmp(kal_uint32);
+
+extern kal_bool custom_enl2_perf_user_0_actv_hndlr(kal_uint32);
+extern kal_bool custom_enl2_perf_user_0_deactv_hndlr(kal_uint32);
+extern kal_bool custom_enl2_perf_user_1_actv_hndlr(kal_uint32);
+extern kal_bool custom_enl2_perf_user_1_deactv_hndlr(kal_uint32);
+#if defined(__NR_RAT__)
+extern kal_bool custom_enl2_perf_user_2_actv_hndlr(kal_uint32);
+extern kal_bool custom_enl2_perf_user_2_deactv_hndlr(kal_uint32);
+extern kal_bool custom_enl2_perf_user_3_actv_hndlr(kal_uint32);
+extern kal_bool custom_enl2_perf_user_3_deactv_hndlr(kal_uint32);
+#endif /* #if defined(__NR_RAT__) */
+extern kal_bool custom_enl2_perf_user_4_actv_hndlr(kal_uint32);
+extern kal_bool custom_enl2_perf_user_4_deactv_hndlr(kal_uint32);
+extern kal_bool custom_enl2_perf_user_5_actv_hndlr(kal_uint32);
+extern kal_bool custom_enl2_perf_user_5_deactv_hndlr(kal_uint32);
+
+#endif /* _CUSTOM_ENL2_PERF_INSPECT_H */
+#endif 
diff --git a/mcu/custom/protocol/common/ps/custom_enl2_perf_inspect_service.c b/mcu/custom/protocol/common/ps/custom_enl2_perf_inspect_service.c
new file mode 100644
index 0000000..ea386f6
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_enl2_perf_inspect_service.c
@@ -0,0 +1,228 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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:
+ * ---------
+ *   custom_enl2_perf_inspect_service.c
+ *
+ * Project:
+ * --------
+ *   VMOLY
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the ENL2 performance custom inspection service
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#include "custom_enl2_perf_inspect.h"
+#include "kal_public_api.h"
+
+#if defined(__LTE_RAT__)
+/********************************************************************
+ * Variables
+ ********************************************************************/
+kal_uint8 custom_enl2_perf_activate_btmp[CUSTOM_ENL2_PERF_PROTOCOL_NUM];
+
+/********************************************************************
+ * Framework service functions
+ ********************************************************************/
+/**
+ * @brief The function return loosest actv/de-actv threshold to ENL2ICD
+ *
+ * @param ul_thres_h pointer of loosest UL activation threshold
+ *        ul_thres_l pointer of loosest UL de-activation threshold
+ *        dl_thres_h pointer of loosest DL activation threshold
+ *        ul_thres_l pointer of loosest DL de-activation threshold
+ */
+void custom_enl2_perf_init(
+    kal_uint32 *ul_thres_h, kal_uint32 *ul_thres_l,
+    kal_uint32 *dl_thres_h, kal_uint32 *dl_thres_l)
+{
+    kal_uint32 i, tmp_ul_h, tmp_ul_l, tmp_dl_h, tmp_dl_l;
+
+    tmp_ul_h = tmp_dl_h = CUSTOM_ENL2_PERF_INV_TPUT;
+    tmp_ul_l = tmp_dl_l = 0;
+
+    for (i = 0; i < CUSTOM_ENL2_PERF_INSPECT_USER_NUM; ++i)
+    {
+        if (p_enl2_perf_inspect_list[i].valid)
+        {
+            tmp_ul_h =
+                CUSTOM_ENL2_PERF_GET_MIN(p_enl2_perf_inspect_list[i].ul_thres_h, tmp_ul_h);
+            tmp_ul_l =
+                CUSTOM_ENL2_PERF_GET_MAX(p_enl2_perf_inspect_list[i].ul_thres_l, tmp_ul_l);
+            tmp_dl_h =
+                CUSTOM_ENL2_PERF_GET_MIN(p_enl2_perf_inspect_list[i].dl_thres_h, tmp_dl_h);
+            tmp_dl_l =
+                CUSTOM_ENL2_PERF_GET_MAX(p_enl2_perf_inspect_list[i].dl_thres_l, tmp_dl_l);
+        }
+    }
+
+    *ul_thres_h = tmp_ul_h;
+    *ul_thres_l = tmp_ul_l;
+    *dl_thres_h = tmp_dl_h;
+    *dl_thres_l = tmp_dl_l;
+
+    for (i = 0; i < CUSTOM_ENL2_PERF_PROTOCOL_NUM; ++i) {
+        custom_enl2_perf_activate_btmp[i] = 0;
+    }
+
+    return;
+}
+
+/**
+ * @brief The function checks if activation threshold exceeded for each user
+ *
+ * @param is_dl         indicate NR DL throughput or not
+ *        min_tput      lowest throughput value among latest 3 samples
+ *        protocol_idx  protocol_idx of input throughput samples
+ */
+kal_uint8 custom_enl2_perf_actv_check(
+    kal_bool is_dl, kal_uint32 min_tput, kal_uint32 protocol_idx)
+{
+    kal_uint32 i, threshold;
+    kal_uint8 actv_btmp = 0;
+
+    for (i = 0; i < CUSTOM_ENL2_PERF_INSPECT_USER_NUM; ++i)
+    {
+        if (p_enl2_perf_inspect_list[i].valid)
+        {
+            threshold = is_dl ? p_enl2_perf_inspect_list[i].dl_thres_h :
+                                p_enl2_perf_inspect_list[i].ul_thres_h;
+            if (min_tput >= threshold)
+            {
+                if (p_enl2_perf_inspect_list[i].fp_actv_hndlr(protocol_idx)) {
+                    actv_btmp |= (0x1 << i);
+                }
+            }
+        }
+    }
+
+    // write back
+    custom_enl2_perf_activate_btmp[protocol_idx] |= actv_btmp;
+
+    return custom_enl2_perf_activate_btmp[protocol_idx];
+}
+
+/**
+ * @brief The function checks if de-activation threshold exceeded for each user
+ *
+ * @param max_tput_dl   highest DL throughput value among latest 3 samples
+ *        min_tput_ul   highest UL throughput value among latest 3 samples
+ *        protocol_idx  protocol_idx of input throughput samples
+ */
+kal_uint8 custom_enl2_perf_deactv_check(
+    kal_uint32 max_tput_dl, kal_uint32 max_tput_ul, kal_uint32 protocol_idx)
+{
+    kal_uint32 i, thres_dl, thres_ul;
+    kal_uint8 deactv_btmp = 0;
+
+    for (i = 0; i < CUSTOM_ENL2_PERF_INSPECT_USER_NUM; ++i)
+    {
+        if (p_enl2_perf_inspect_list[i].valid)
+        {
+            thres_dl = p_enl2_perf_inspect_list[i].dl_thres_l;
+            thres_ul = p_enl2_perf_inspect_list[i].ul_thres_l;
+            if (max_tput_dl < thres_dl && max_tput_ul < thres_ul)
+            {
+                if (p_enl2_perf_inspect_list[i].fp_deactv_hndlr(protocol_idx)) {
+                    deactv_btmp |= (0x1 << i);
+                }
+            }
+        }
+    }
+
+    // write back
+    custom_enl2_perf_activate_btmp[protocol_idx] &= ~deactv_btmp;
+
+    return custom_enl2_perf_activate_btmp[protocol_idx];
+}
+
+/**
+ * @brief The function will send de-activation to every of specific protocol_idx
+ *
+ * @param protocol_idx  protocol_idx to be de-activated
+ */
+kal_uint8 custom_enl2_perf_deactv_all_with_protocol_idx(kal_uint32 protocol_idx)
+{
+    kal_uint8 i, deactv_btmp = 0;
+    for (i = 0; i < CUSTOM_ENL2_PERF_INSPECT_USER_NUM; ++i)
+    {
+        if (p_enl2_perf_inspect_list[i].valid)
+        {
+            if(p_enl2_perf_inspect_list[i].fp_deactv_hndlr(protocol_idx)) {
+                deactv_btmp |= (0x1 << i);
+            }
+        }
+    }
+
+    // write back
+    custom_enl2_perf_activate_btmp[protocol_idx] &= ~deactv_btmp;
+
+    return custom_enl2_perf_activate_btmp[protocol_idx];
+}
+
+/**
+ * @brief The function will return activate bitmap of specific protocol_idx
+ *
+ * @param protocol_idx  protocol_idx to be queried
+ */
+kal_uint8 custom_enl2_perf_get_actv_btmp(kal_uint32 protocol_idx)
+{
+    return custom_enl2_perf_activate_btmp[protocol_idx];
+}
+
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_esm_config.c b/mcu/custom/protocol/common/ps/custom_esm_config.c
new file mode 100644
index 0000000..c10e8dd
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_esm_config.c
@@ -0,0 +1,161 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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:
+ * ---------
+ *   custom_esm_config.h
+ *
+ * Project:
+ * --------
+ *   MOLY
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the MM configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "ps_public_enum.h"
+#include "custom_esm_config.h"
+#include "l4_ps_api.h"
+#include "ps_em_exported_enum.h"
+
+/**
+ *  @brief  This function is used to decide whether to set Attach attempt
+ *          counter to max value when receive ATTACH REJECT #19
+ *
+ * @param[in]	esm_cause esm cause in ATTACH REJECT #19
+ *
+ * @return    kal_bool
+ * @retval    KAL_TRUE  Set attach attempt counter to max
+ * @retval    KAL_FALSE Not set attach attempt counter to max
+ */
+kal_bool esm_custom_is_set_attach_cnt_max(esm_cause_enum esm_cause)
+{
+    kal_bool result;
+
+    switch (esm_cause)
+    {
+    case ESM_CAUSE_REQ_SERVICE_NOT_SUBSCRIBED:
+        if (query_ps_conf_test_mode() == PS_CONF_TEST_IOT)
+        {
+            /* E/// test case validates UE reattach procedure */
+            result = KAL_FALSE;
+        }
+        else
+        {
+            result = KAL_TRUE;
+        }
+        break;
+
+    case ESM_CAUSE_UNKNOWN_PDN_TYPE:
+    //case ESM_CAUSE_USER_AUTH_FAILED:
+    case ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED:
+    case ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED:
+        result = KAL_TRUE;
+        break;
+
+    default:
+        result = KAL_FALSE;
+        break;
+    }
+
+    return result;
+}
+
+kal_bool esm_custom_is_arrearage_apn(kal_char *checked_apn)
+{
+    kal_bool  is_match = KAL_FALSE;
+    kal_uint32 idx     = 0;
+    kal_char* arrearage_apn_prefix[ARREARAGE_APN_PREFIX_NUM] = {0};
+
+    if(NULL == checked_apn || ARREARAGE_APN_PREFIX_NUM > 255)
+    {
+        return KAL_FALSE;
+    }
+
+    for(idx = 0; idx < ARREARAGE_APN_PREFIX_NUM; idx++)
+    {
+        if(NULL == arrearage_apn_prefix[idx])
+        {
+            continue;
+        }
+
+        if(NULL != strstr(checked_apn, arrearage_apn_prefix[idx]))
+        {
+            is_match = KAL_TRUE;
+            break;
+        }
+    }
+
+    return is_match;
+}
diff --git a/mcu/custom/protocol/common/ps/custom_esm_config.h b/mcu/custom/protocol/common/ps/custom_esm_config.h
new file mode 100644
index 0000000..e3b4903
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_esm_config.h
@@ -0,0 +1,94 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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:
+ * ---------
+ *   custom_esm_config.h
+ *
+ * Project:
+ * --------
+ *   MOLY
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the MM configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifndef _CUSTOM_ESM_CONFIG_H
+#define _CUSTOM_ESM_CONFIG_H
+
+#include "kal_general_types.h"
+#include "ps_public_utility.h"
+#include "ps_public_enum.h"
+
+#define ARREARAGE_APN_PREFIX_NUM 1
+
+/*************************************************************************
+* Function
+*************************************************************************/
+extern kal_bool esm_custom_is_set_attach_cnt_max(esm_cause_enum esm_cause);
+extern kal_bool esm_custom_is_arrearage_apn(kal_char *checked_apn);
+
+#endif /* _CUSTOM_ESM_CONFIG_H */
+
diff --git a/mcu/custom/protocol/common/ps/custom_flc_config.c b/mcu/custom/protocol/common/ps/custom_flc_config.c
new file mode 100644
index 0000000..8893253
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_flc_config.c
@@ -0,0 +1,279 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_flc_config.c
+ *
+ * Project:
+ * --------
+ *   MAUI Project
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the FLC2 configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#include "kal_general_types.h"
+#include "custom_flc_config.h"
+
+#if ( defined(__WIFI_SUPPORT__) || defined(__RLC_HSDPA_COPRO__)) && defined(__DYNAMIC_SWITCH_CACHEABILITY__)
+/* If this option is on, URLC will use L2-accelator for DL */
+//#pragma arm section zidata = "DYNAMICCACHEABLEZI_C", rwdata = "DYNAMICCACHEABLERW_C" 
+__attribute__ ((zero_init, section ("DYNAMICCACHEABLEZI_C"))) kal_uint32 flc2_mm_block_12_g[FLC2_MM_BLOCK_12_SIZE/4];
+
+#else
+kal_uint32 flc2_mm_block_12_g[FLC2_MM_BLOCK_12_SIZE/4];
+#endif
+
+#if ( defined(__WIFI_SUPPORT__) || (defined(__L2_HSUPA_COPRO__) && defined(__HSUPA_SUPPORT__))) && defined(__DYNAMIC_SWITCH_CACHEABILITY__)
+/* If these two options are on, URLC will use L2-accelator for UL */
+//#pragma arm section zidata = "DYNAMICCACHEABLEZI_C", rwdata = "DYNAMICCACHEABLERW_C" 
+__attribute__ ((zero_init, section ("DYNAMICCACHEABLEZI_C"))) kal_uint32 flc2_mm_block_11_g[FLC2_MM_BLOCK_11_SIZE/4];
+
+#else
+kal_uint32 flc2_mm_block_11_g[FLC2_MM_BLOCK_11_SIZE/4];
+#endif
+
+
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  flc_get_profile_info_spdu_ul
+ * DESCRIPTION
+ *  This function is used to define the FLC2_PROFILE_INDEX_SPDU_UL pool info for SPDU_UL
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  kal_uint32
+ *****************************************************************************/
+kal_uint32 flc_get_profile_info_spdu_ul(kal_uint32 *total_size_em_mode, kal_uint32 *max_grow_size)
+{
+    if(total_size_em_mode != NULL)
+        *total_size_em_mode = FLC2_SPDU_UL_SIZE_EM;
+
+    if(max_grow_size != NULL)
+        *max_grow_size = FLC2_SPDU_UL_MAX_GROW_SIZE;
+
+    return FLC2_SPDU_UL_SIZE;
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  flc_get_profile_info_spdu_dl
+ * DESCRIPTION
+ *  This function is used to define the FLC2_PROFILE_INDEX_SPDU_DL pool info for SPDU_DL
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  kal_uint32
+ *****************************************************************************/
+kal_uint32 flc_get_profile_info_spdu_dl(kal_uint32 *max_grow_size)
+{
+    if(max_grow_size != NULL)
+        *max_grow_size = 0;
+
+    return FLC2_SPDU_DL_POOL_SIZE;
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  flc_get_profile_info_tpdu
+ * DESCRIPTION
+ *  This function is used to define the FLC2_PROFILE_INDEX_TPDU pool info for TPDU
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  kal_uint32
+ *****************************************************************************/
+kal_uint32 flc_get_profile_info_tpdu(kal_uint32 *max_grow_size)
+{
+    if(max_grow_size != NULL)
+        *max_grow_size = 0;
+
+    return FLC2_TPDU_POOL_SIZE;
+}
+
+
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  flc_get_mb_info_index_11
+ * DESCRIPTION
+ *  This function is used to define the FLC2_MB_INDEX_11 info for SPDU_UL
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  kal_uint32*
+ *****************************************************************************/
+kal_uint32* flc_get_mb_info_index_11(kal_uint32 *total_size, kal_uint32 *max_grow_size)
+{
+    if(total_size != NULL)
+        *total_size = FLC2_MM_BLOCK_11_SIZE ;
+
+    if(max_grow_size != NULL)
+    {
+        *max_grow_size = FLC2_MAX(FLC2_SPDU_UL_GROW_POOL_SIZE, FLC2_HS_POOL_MAX_GROW_SIZE);
+    }
+
+    return flc2_mm_block_11_g;
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  flc_get_mb_info_index_12
+ * DESCRIPTION
+ *  This function is used to define the FLC2_MB_INDEX_12 info for SPDU_DL
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  kal_uint8
+ *****************************************************************************/
+kal_uint32* flc_get_mb_info_index_12(kal_uint32 *total_size, kal_uint32 *max_grow_size)
+{
+    if(total_size != NULL)
+        *total_size = FLC2_MM_BLOCK_12_SIZE ;
+
+    if(max_grow_size != NULL)
+        *max_grow_size = 0 ;
+
+    return flc2_mm_block_12_g;
+}
+
+kal_bool flc2_get_spdu_info(kal_uint8 dir,
+                            kal_uint32 *pdu_block_size,
+                            kal_uint32 *pdu_total_size)
+{
+
+#ifdef __TCPIP__
+   if(dir == GPRS_FLC_UL)
+   {
+       /* SSPDU */
+       if(pdu_block_size !=NULL)
+           *pdu_block_size = FLC2_SPDU_UL_SIZE;
+
+       if(pdu_total_size !=NULL)
+           *pdu_total_size = FLC2_SPDU_UL_GROW_POOL_SIZE ;
+
+       return KAL_TRUE;
+   }
+   else if(dir == GPRS_FLC_DL)
+   {
+       /* SRPDU */
+       if(pdu_block_size !=NULL)
+           *pdu_block_size = FLC2_SPDU_UL_SIZE;
+
+       if(pdu_total_size !=NULL)
+           *pdu_total_size = FLC2_SPDU_DL_POOL_SIZE;
+
+       return KAL_TRUE;
+   }
+#endif
+
+   return KAL_FALSE;
+}
+
diff --git a/mcu/custom/protocol/common/ps/custom_gas_config.c b/mcu/custom/protocol/common/ps/custom_gas_config.c
new file mode 100644
index 0000000..45c8777
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_gas_config.c
@@ -0,0 +1,1372 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_gas_config.c
+ *
+ * Project:
+ * --------
+ *   MONZA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the GAS configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#include "kal_general_types.h"
+
+#include "custom_gas_config.h"
+
+/* For customer define the improved call prefer setting, TRUE: enable, FALSE: disable */
+#define IMPROVED_CALL_PREFER_SETTING  KAL_TRUE
+
+/* For customer define the L2 fill bits randomization setting, TRUE: enable, FALSE: disable(default setting) */
+#define L2_FILL_BITS_RANDOMIZATION_SETTING  KAL_FALSE
+
+/* 20130902 James: at%campreq: search specific channels */
+/* The variable of the specific channel searching */
+kal_bool gas_custom_specific_channel_srch = KAL_FALSE;
+
+/* The number of specific channels */
+#define NUM_OF_SPECIFIC_CHANNELS    16 
+
+/* The specific channels */
+kal_uint16 specific_arfcn[NUM_OF_SPECIFIC_CHANNELS] = 
+{      1,    2,    3,    4, /* band value 1: gsm900 */
+     131,  132,  133,  134, /* band value 2: gsm850 */
+    1536, 1537, 1538, 1539, /* band value 3: pcs, need to add PCS tag (value 1024) */
+                            /* ex. arfcn 512 of pcs should be 512 + 1024 = 1536    */
+     512,  513,  514,  515  /* band value 4: dcs    */
+};
+
+/* Customer can set the total number of frequencies which are scanned for full band PLMN search/list. */
+kal_uint16 gas_custom_max_arfcn_to_try = 100;
+
+/* Customer can set the number of GSM cells of each GSM band to decode for PLMN search
+* or PLMN List procedure. The impact is that the larger the number, the result will be more
+* sensative under that environment, but it will spend longer time to finish the procedure.
+* Please do not assign each value more than 255.
+*/
+kal_uint8 gas_custom_max_decoded_cell_a_band[] =
+{
+    32, /* PGSM900 */
+    32, /* EGSM900 */
+    32, /* RGSM900 */
+    32, /* DCS1800 */
+    32, /* PCS1900 */
+    32, /* GSM450  */
+    32, /* GSM480  */
+    32  /* GSM850  */
+};
+
+/* customer can set whether enable avoid fake cell feature. */
+#define ENABLE_AVOID_FAKE_CELL_FEATURE KAL_TRUE
+#define DISABLE_AVOID_FAKE_CELL_FEATURE KAL_FALSE
+kal_bool gas_custom_fake_cell_feature = DISABLE_AVOID_FAKE_CELL_FEATURE;
+
+
+/* Offset from -108dbm */
+/* RRM is missing some PLMN with target cell RSSI -99dbm
+ * reduce the threshold value from -95dbm to -100dbm */
+kal_uint8 gas_custom_search_offset = 8;
+
+/* Customer can set MCC value to enable customize RXLEV_ACCESS_MIN feature, this feature can increase the C1 value    */
+/* when the SI 3 RXLEV_ACCESS_MIN measurement value more than customize RXLEV_ACCESS_MIN during GAS search procedure. */
+/* Please do not assign each value more than 999 or less than zero.                                                   */
+const gas_customize_mcc GAS_ENABLE_CUSTOMIZE_RXLEV_MIN_MCC_LIST[] = 
+{
+   {460} /* China MCC */
+         /* New MCC can be added by customer in this table to enable customize RXLEV_ACCESS_MIN feature */
+         /* {404}, India  MCC */
+         /* {405}  India  MCC */   
+};
+
+const kal_uint32 CUSTOMERIZE_NUM_OF_MCC_RXLEV_MIN = sizeof(GAS_ENABLE_CUSTOMIZE_RXLEV_MIN_MCC_LIST)/sizeof(gas_customize_mcc);
+
+/* the value of RXLEV_ACCESS_MIN */
+kal_int16 rxlev_access_min = -90;
+
+/* rlac threshold in CSFB procedure, when a specific cell's power is above the set value,
+ * MS will try to camp on this 2G cell
+ */
+kal_int16 gas_rlac_threshold_in_CSFB = -90;
+
+/* 2g call use RRM will put the serving into barred list if rach fail count more than this count.*/
+kal_uint16 max_rach_fail_count = 3;
+
+/* csfb call use this count RRM will put the serving into barred list if rach fail count more than this count.*/
+kal_uint16 max_rach_fail_count_csfb = 3;
+
+/* threshold of ARFCN number, MS will based on the threshold adjust barred timer length.*/
+kal_uint16 cell_count_threshold = 8;
+
+/* RACH fail barred timer length.the max value is 30min, min value is 15s */
+kal_uint16 max_bar_timer_period = 30;    /* unit: second */
+kal_uint16 min_bar_timer_period = 30;    /* unit: second */
+
+/* RACH fail barred timer default length.the value is 30s */
+kal_uint16 bar_timer_default_period = 30;    /* unit: second */
+
+/* Use to set the RACH bar service type under which service type we will bar the cell when RACH fail */
+//#define RACH_BAR_SERVICE_TYPE_NONE  0x00  /* NONE */
+//#define RACH_BAR_SERVICE_TYPE_CS    0x01  /* CS only */
+//#define RACH_BAR_SERVICE_TYPE_PS    0x02  /* PS only */
+//#define RACH_BAR_SERVICE_TYPE_CS_PS 0x03  /* CS+PS */
+kal_uint8 rach_bar_service_type = RACH_BAR_SERVICE_TYPE_CS_PS;
+
+/* the default value is true, means gaging low power switch is on */
+kal_bool gas_custom_paging_low_power_switch = KAL_TRUE;
+
+/* Titan Parameters for Call drop because of ACI - Abhinav 20170901 */
+
+/* When Scell.Rxqual is greater than or equal to Threshold ( defined as 6 ) Increment counter gas_custom_MR_RxQual_poor_counter*/
+kal_uint8 gas_custom_MR_RxQual_Threshold = 6;
+
+/* gas_custom_MR_RxQual_poor_counter?should be greater than or equal to (10) , to trigger the Measurement modification Algorithm*/
+kal_uint8 gas_custom_MR_RxQual_poor_counter = 10;
+
+/* For each neighbor cell (top six only) nc for serving cell, nc.rxlev should greater than or equal to 
+   sc.rxlev + gas_custom_MR_RxLev_Threshold ( 3 ) , to trigger the Measurement modification Algorithm */
+kal_uint8 gas_custom_MR_RxLev_Threshold = 3;
+
+/* During 2G to 3G high prio cell reselection, Reward UMTS RSCP to 60 dBm */
+kal_uint8 gas_custom_umts_rscp_reward_threshold = 60;
+
+kal_uint8 gas_custom_snr_threshold = 6;
+
+kal_uint8 gas_custom_paging_retry_timer_secs = 10;
+
+/* When serving C1 < 0 and No neighbor cell , Min rxlev below which Cell Selection
+ * will be triggered */
+kal_int16 c1_cell_selection_rxlev_min = -440;
+
+/* During 2G to 4G high prio cell reselection, Reward LTE RSRP to 10 dBm */
+kal_uint8 gas_custom_lte_rsrp_reward_threshold = 10;
+
+/* the default value is 5s, means if any LTE cell is satisfied cell resel criteria and UMTS T_resel reached to 3s or below then reset its time */
+kal_uint32 gas_custom_umts_cell_resel_penalty_time = 5; /* unit: second */
+
+/* Customer can set the BSIC reading time interval which is only used for full band         */
+/* plmn search procedure in virtual mode to avoid peer data SIM throughput degradation.     */
+/* Please use integer type value with unit "mili second" to configure reading interval time */
+/* The default value of interval time is 80 mili sec, the min value of interval time is     */
+/* 80 mili sec when interval time value less than 80(0 - 80 mili sec), the max value of     */
+/* interval time is limited to 3/3000 sec/mili second to avoid plmn search fail and UE OOS. */
+kal_uint16 gas_custom_BSIC_reading_time_interval = 80;     /* unit: mili second */
+
+/* customer can configure after how many number of times BSIC failed, RR should use the penalty count   */
+kal_uint8 gas_custom_bsic_decode_fail_thresh = 3;
+
+/* customer can configure the timer (count 1 = 5s) after max bsic decode failed */
+kal_uint8 gas_custom_wideband_signal_penalty_count = 30;
+
+/* During the period, the store si of GSM is valid, with unit min */
+kal_uint32 store_si_valid_period = 10;
+
+/* When serv cell rxlev and rxqual are above than threshold, 
+ * the neighbor cell power in MR will decrease by gas_custom_MR_Neighbor_offset whose snr is below than snr threshold. 
+ */
+kal_int16 gas_custom_serv_RSSI_threshold = -90;
+kal_int8 gas_custom_serv_rxquality_threshold = 2; 
+
+/* real_snr = 10*log10(snr/4) 
+ * when  gas_custom_ncell_snr_threshold_lev2 < snr < gas_custom_ncell_snr_threshold_lev1, RSSI reduce gas_custom_ncell_MR_RSSI_offset_lev1
+ * when  snr < gas_custom_ncell_snr_threshold_lev2, RSSI reduce is gas_custom_ncell_MR_RSSI_offset_lev1 
+ */
+
+kal_int16 gas_custom_ncell_snr_threshold_lev1 = 64; 
+kal_int16 gas_custom_ncell_snr_threshold_lev2 = 13;
+kal_int16 gas_custom_ncell_MR_RSSI_offset_lev1 = 5;
+kal_int16 gas_custom_ncell_MR_RSSI_offset_lev2 = 10;
+
+/* Customer can set the total number of frequencies which are tryed for stored list PLMN search.                    */
+/* The default value of GAS returnable MAX ARFCN to try for stored list plmn search is 8 cells.                       */
+/* The maximum number of returnable trying cell is 32 cells and the minimum number of returnable trying cell is 1 cell. */
+/* Please note that increasing number of tryed cell may be increas risk of DUT out of service. Because of poor RF   */
+/* level cell will be camped on when DUT camps to later ARFCN in order. The connection procedure maybe always fail. */
+kal_uint32 custom_max_arfcn_to_try_for_stored_search = 8;  /* unit: cell */
+
+
+/* Below is an array of structure of type gas_custom_a5gea_plmn */
+/* 1st member structure: the plmn which can be modified by customer in the form of uint32. Each nibble holds each part of plmn.
+    each nibble in plmn ID stands for: ex:- 0xPPPPPP===> P->mcc1, P->mcc2, P->mcc3, P->mnc1, P->mnc2, P->mnc3(least significant nibble) */
+/* 2nd member in structure:  a5 The value is filled bit wise and as per spec 24.008
+*           this element is used to set the a5 algo based on the plmn match. this indicates algo support in bit map format
+*             AAAA AAAA => spear bit(MSB), a5/1, a5/2, a5/3, a5/4, a5/5, a5/6,a5/7(LSB)
+*            For a51 bit  ==> bit value 0 ==> algo enabled
+*                         ==> bit value 1 ==> algo disabled
+*            for rest of the algo(a52 to a57)
+*             bit value 0 => algo disabled
+*             bit value 1 =>  algo enabled
+* 3rd member in structure: gea  This element is used to enable/disable the gea/X algo.
+*             GGGG GGGG => spear bit(MSB), gea/1, gea/2, gea/3, gea/4, gea/5, gea/6,gea/7(LSB)
+*             when bit value is set as 1, then corresponding gea algo is made enabled
+*             when bit value is set as 0, then corresponding gea algo is made disabled  
+* NOTE: the PLMN 0xFFFFFF should always be added at the end of ARRAY. If added in the center and camped PLMN is present after the 0xFFFFFF
+*         entry, then the default values of A5 and Gea will be used and camped PLMN setting would be ignored 
+* New MCCMNC can be added in this as below. But make sure that it is either 5 digit or 6 digit (decimal)  */
+const  gas_custom_a5gea_plmn GAS_CUSTOMIZE_A5GEA_PLMN_LIST[] = 
+{
+
+ // {0x40405f, 0x10, 0x70},   /* New MCCMNC can be added in this as below. But make sure that it is either 5 digit or 6 digit (decimal)  */
+    {0x23415f, 0x10, 0x30}, /* Vodafone UK  0x10 -> A5/1 and A5/3 enabled, 0x30 -> GEA1 disabled,GEA2 and GEA3 enabled  */
+    //{0xffffff, 0xff, 0xff}  /*  this value of PLMN being 0xFFFFFF mean the A5 and Gea Algorithms default values are used based on SBP  */
+};
+
+const kal_uint32 CUSTOM_NUM_OF_PLMN_A5GEA = sizeof(GAS_CUSTOMIZE_A5GEA_PLMN_LIST)/sizeof(gas_custom_a5gea_plmn);
+
+
+/*************************************************************************
+* Customize default sniffer period for OOS recovery in inactive mode
+* Default value is 30s.
+*************************************************************************/
+const kal_uint32 RRM_DEFAULT_INACTIVE_MODE_SNIFFER_PERIOD = 30;
+
+/*************************************************************************
+* Customize the sniffer period for OOS recovery in SCREEN OFF mode
+* Default value is 10s.
+*************************************************************************/
+const kal_uint32  RRM_SCREEN_OFF_SNIFFER_PERIOD = 10;
+
+/*  customer needs to set value of qrxlevmin within range of -110dBm to -105dbm. 
+    if set below -110dBm, ping pong can still happen. 
+    if set above -105dBm, it can be possible that reselection to LTE may not happen unless LTE cell becomes very strong.
+    the parameter eutra_qrxlevmin is used to calculate s_non_serving for LTE cells and is received from NW.
+    for this feature, this parameter is made customizable using the below custom variable*/
+kal_int16 gas_custom_eutra_qrxlevmin = -110;    /* unit: dbm */
+
+/* customer can configure Cell bar time while emergency call fail in same cell more than call_failure_max_count */
+/* The value should be in second */
+kal_uint32 gas_custom_emrgency_call_failure_cell_bar_time = 600;
+
+/* customer can configure maximum failure count while emergency call fail in same cell  */
+/* valid range of value is 2 -100 */
+kal_uint8 gas_custom_emrgency_call_failure_max_count = 2;
+/*************************************************************************
+* Define the CMCC operators
+*************************************************************************/
+const gas_customize_cmcc_plmn_id GAS_CUSTOMIZE_CMCC_PLMN_ID_LIST[] = 
+{
+   {0x46000f}, 
+   {0x46002f},     
+   {0x46007f}     
+};
+
+const kal_uint32 CUSTOMERIZE_NUM_OF_CMCC_PLMN_ID = sizeof(GAS_CUSTOMIZE_CMCC_PLMN_ID_LIST) /sizeof(gas_customize_cmcc_plmn_id);
+
+/* the default value is true, means elevator mode optimisation in PTM switch is on */
+kal_bool gas_custom_elevator_mode_optimisation_in_ptm = KAL_TRUE;
+
+/* cell on which rach fail occured for this count but not consicutively will be added to barred list */
+kal_uint16 max_rach_fail_count_prev_visited_cell = 5;
+
+
+/*****************************************************************************
+* FUNCTION
+*  rr_get_improved_call_prefer_setting
+* DESCRIPTION
+*   This function is used to define the improved call prefer setting
+*   TRUE: enable improved call prefer, FALSE: disable improved call prefer
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool rr_get_improved_call_prefer_setting (void)
+{
+   return (IMPROVED_CALL_PREFER_SETTING);
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  rr_get_l2_fill_bits_randomization_setting
+* DESCRIPTION
+*   This function is used to define the L2 fill bits randomization setting
+*   TRUE: enable L2 randomization, FALSE: disable L2 randomization
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool rr_get_l2_fill_bits_randomization_setting (void)
+{
+   return (L2_FILL_BITS_RANDOMIZATION_SETTING);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_is_specific_channel_srch
+* DESCRIPTION
+*   The function returns whether UE is in specific channel search mode.
+*
+* PARAMETERS
+*  Void
+* RETURNS
+*  kal_bool
+*  TRUE: specific channel search mode, FALSE: normal search mode
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool gas_custom_is_specific_channel_srch(void)
+{
+    return gas_custom_specific_channel_srch;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   gas_custom_get_num_of_specific_channels
+* DESCRIPTION
+*   The function returns the number of specific channels
+*
+* PARAMETERS
+*  Void
+* RETURNS
+*  kal_unit16 the number of specific channels 
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint8 gas_custom_get_num_of_specific_channels(void)
+{
+    if (gas_custom_specific_channel_srch == KAL_TRUE)
+    {
+        return NUM_OF_SPECIFIC_CHANNELS;
+    }
+    else
+    {
+        return 0;
+    }
+}
+
+/*****************************************************************************
+* FUNCTION
+*   gas_custom_get_specific_channels
+* DESCRIPTION
+*   The function returns the number of specific channels
+*
+* PARAMETERS
+*  Void
+* RETURNS
+*  kal_unit16 the number of specific channels 
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint16 * gas_custom_get_specific_channels(void)
+{
+    if (gas_custom_specific_channel_srch == KAL_TRUE)
+    {
+        return (&(specific_arfcn[0]));
+    }
+    else
+    {
+        return NULL;
+    }
+}
+
+/*****************************************************************************
+* FUNCTION
+*  as_custom_set_specific_channel_srch
+* DESCRIPTION
+*   The function set specific search mode.
+*
+* PARAMETERS
+*   kal_bool
+*   TRUE: set specific search mode, FALSE: disable specific search mode.
+* RETURNS
+*   Void
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+void gas_custom_set_specific_channel_srch( kal_bool set_value )
+{
+    gas_custom_specific_channel_srch = set_value;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_fake_cell_feature_mode
+* DESCRIPTION
+*   The function get fake cell feature mode.
+*
+* PARAMETERS
+*   Void
+* RETURNS
+*   kal_bool
+*   TRUE: enable fake cell feature, FALSE: disable fake cell feature.
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool gas_custom_get_fake_cell_feature_mode (void)
+{
+    return gas_custom_fake_cell_feature;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  as_custom_get_rxlev_access_min
+* DESCRIPTION
+*   get the value of rxlev access min
+*
+* PARAMETERS
+*   void
+* RETURNS
+*   the value of rxlev access min
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_int16 as_custom_get_rxlev_access_min (void)
+{
+	return rxlev_access_min;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  as_custom_get_rlac_threshold_in_csfb
+* DESCRIPTION
+*   The function get rlac threshold in csfb procedure.
+*
+* PARAMETERS
+*   kal_int16 rlac threshold in csfb procedure.
+* RETURNS
+*   Void
+* RETURNS
+*   kal_bool
+*   TRUE: enable fake cell feature, FALSE: disable fake cell feature.
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_int16 as_custom_get_rlac_threshold_in_csfb (void)
+{
+    return gas_rlac_threshold_in_CSFB * 4;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  as_custom_get_max_rach_fail_count
+* DESCRIPTION
+*   The function get max rach fail count, RRM will put the 
+*   serving into barred list if rach fail count more than this count.
+*
+* PARAMETERS
+*   kal_uint16 max rach fail count.
+* RETURNS
+*   Void
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint16 as_custom_get_max_rach_fail_count (void)
+{
+	return max_rach_fail_count;
+}
+/*****************************************************************************
+* FUNCTION
+*  as_custom_get_max_rach_fail_count_csfb
+* DESCRIPTION
+*   The function get max rach fail count csfb , RRM will put the 
+*   serving into barred list if rach fail count more than this count.
+*
+* PARAMETERS
+*   kal_uint16 max rach fail count csfb.
+* RETURNS
+*   Void
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint16 as_custom_get_max_rach_fail_count_csfb (void)
+{
+
+    return max_rach_fail_count_csfb;	
+}
+
+/*****************************************************************************
+* FUNCTION
+*  as_custom_get_bar_timer_period
+* DESCRIPTION
+*   RACH fail barred timer length
+*
+* PARAMETERS
+*   kal_uint16 RACH fail barred timer length.
+* RETURNS
+*   Void
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint16 as_custom_get_bar_timer_period (kal_uint8 arfcn_count)
+{
+	kal_uint16 bar_timer_period = 30;
+
+	if (arfcn_count >= cell_count_threshold)
+	{
+		bar_timer_period = max_bar_timer_period;
+	}
+	else
+{
+		bar_timer_period = min_bar_timer_period;
+	}
+
+	return bar_timer_period;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  as_custom_get_bar_timer_default_period
+* DESCRIPTION
+*   RACH fail barred timer default length
+*
+* PARAMETERS
+*   kal_uint16 RACH fail barred timer default length.
+* RETURNS
+*   Void
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint16 as_custom_get_bar_timer_default_period (void)
+{
+    return bar_timer_default_period;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_check_fake_cell
+* DESCRIPTION
+*   customized APC ALG
+* PARAMETERS
+*   kal_uint8  * para used for customized APC ALG
+*   kal_uint16 * cell information
+* RETURNS
+*   Void
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool gas_custom_check_fake_cell(kal_uint8 *apc_para,kal_uint16 *customer_cell_info)
+{
+    kal_bool result = KAL_FALSE;
+
+    return result;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_paging_low_power_switch
+* DESCRIPTION
+*   The function get paging low power switch.
+*
+* PARAMETERS
+*   Void
+* RETURNS
+*   kal_bool
+*   TRUE: low power switch is on, FALSE: low power switch is off.
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool gas_custom_get_paging_low_power_switch (void)
+{
+    return gas_custom_paging_low_power_switch;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  as_custom_get_mr_rxqual_threshold
+* DESCRIPTION
+*   The function get rxqual threshold used during MR.
+*
+* PARAMETERS
+*   none 
+* RETURNS
+*   RxQual Threshold
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint8 as_custom_get_mr_rxqual_threshold (void)
+{
+    return gas_custom_MR_RxQual_Threshold;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  as_custom_get_mr_rxqual_poor_counter
+* DESCRIPTION
+*   The function get rxqual poor max counter used during MR.
+*
+* PARAMETERS
+*   none 
+* RETURNS
+*   Rxqual poor counter
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint8 as_custom_get_mr_rxqual_poor_counter (void)
+{
+    return gas_custom_MR_RxQual_poor_counter;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  as_custom_get_mr_rxlev_threshold
+* DESCRIPTION
+*   The function get rxlev threshold used during MR.
+*
+* PARAMETERS
+*   None 
+* RETURNS
+*   Rxlev Threshold in qdbm
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint8 as_custom_get_mr_nc_power_better_than_sc_rxlev_threshold (void)
+{
+    return gas_custom_MR_RxLev_Threshold * 4;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_umts_rscp_reward_threshold
+* DESCRIPTION
+*   The function is used to get the UMTS RSCP reward theshold during high prio cell reselection.
+*
+* PARAMETERS
+*   Void
+* RETURNS
+*   kal_uint8
+*   
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint8 gas_custom_get_umts_rscp_reward_threshold (void)
+{
+    return gas_custom_umts_rscp_reward_threshold;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_snr_threshold
+* DESCRIPTION
+*   The function get snr_threshold.
+*
+* PARAMETERS
+*   Void
+* RETURNS
+*   kal_uint8 the valure of snr_threshold.
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 gas_custom_get_snr_threshold (void)
+{
+	return gas_custom_snr_threshold;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  as_custom_get_c1_cell_selection_rxlev_min
+* DESCRIPTION
+*   get the value of c1_cell_selection_rxlev_min
+*
+* PARAMETERS
+*   void
+* RETURNS
+*   the value of c1_cell_selection_rxlev_min
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_int16 as_custom_get_c1_cell_selection_rxlev_min (void)
+{
+    return c1_cell_selection_rxlev_min;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  as_custom_get_paging_retry_timer_ticks
+* DESCRIPTION
+*   The function get paging retry timer ticks
+*
+* PARAMETERS
+*   None 
+* RETURNS
+*   Rxlev Threshold in qdbm
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint8 as_custom_get_paging_retry_timer_ticks (void)
+{
+    return gas_custom_paging_retry_timer_secs;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_rach_bar_service_type
+* DESCRIPTION
+*   The function is used to get the RACH bar service type for the RACH fail bar cell feature.
+*
+* PARAMETERS
+*   Void
+* RETURNS
+*   kal_uint8
+*   
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint8 gas_custom_get_rach_bar_service_type(void)
+{
+    return rach_bar_service_type;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_is_MCC_rxlev_access_min_enable
+* DESCRIPTION
+*   The function is used to check if the input MCC exist in  the customize 
+     GAS_ENABLE_CUSTOMIZE_RXLEV_MIN_MCC_LIST[].
+*
+* PARAMETERS
+*   kal_uint32 measured_mcc
+* RETURNS
+*   kal_bool 
+*   TRUE: Customize rxlev_access_min scheme is on, FALSE: Customize rxlev_access_min scheme is off.
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool gas_custom_is_MCC_rxlev_access_min_enable(kal_uint32 measured_mcc)
+{
+    kal_uint32 i;
+            
+    for(i = 0; i < CUSTOMERIZE_NUM_OF_MCC_RXLEV_MIN; i++)
+    {        
+        if(GAS_ENABLE_CUSTOMIZE_RXLEV_MIN_MCC_LIST[i].CustomizeMCC == measured_mcc)
+        {   
+            /* This MCC exist in Customize_RxLEV_MIN list, the Customize_RxLEV_MIN schem is enabled  */
+            return KAL_TRUE;
+        }
+    }
+        
+    /* This MCC does not exist in Customize_RxLEV_MIN list, the Customize_RxLEV_MIN schem is disabled  */
+    return KAL_FALSE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_lte_rsrp_reward_threshold
+* DESCRIPTION
+*   The function is used to get the LTE RSRP reward theshold during high prio cell reselection.
+*
+* PARAMETERS
+*   Void
+* RETURNS
+*   kal_uint8
+*   
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint8 gas_custom_get_lte_rsrp_reward_threshold (void)
+{
+    return gas_custom_lte_rsrp_reward_threshold;
+}
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_umts_cell_resel_penalty_time
+* DESCRIPTION
+*   The function get time value of UMTS cell resel penalty.
+*
+* PARAMETERS
+*   Void
+* RETURNS
+*   kal_uint32: default time of umts penalty
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint32 gas_custom_get_umts_cell_resel_penalty_time (void)
+{
+    return gas_custom_umts_cell_resel_penalty_time;
+
+}
+
+
+
+#ifdef __VAMOS_CUSTOM_CONFIG__
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_check_plmn_for_vamos
+* DESCRIPTION
+*  This function is for customizing PLMN in the  list and VAMOS support for the added PLMN
+* 
+* PARAMETERS
+* plmn_id : the currently camped plmn/plmn in IMSI. the plmn is taken in the form of uint32. Each nibble holds each part of plmn.
+*           each nibble in plmn ID stands for: XXXX XXXX===> X->spare(most significant nibble), X->spare, X->mcc1, X->mcc2, X->mcc3, X->mnc1, X->mnc2, X->mnc3(least significant nibble)
+*
+* vamos: the value can be either 1 for vamos1 or 2 for vamos2 support
+*           
+* RETURNS
+* plmn_match : if true, then the camped plmn is matched in the list of customer specified plmn
+*              if false, then the camped plmn is not matched in the list of customer specified plmn       
+* 
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_bool gas_custom_check_plmn_for_vamos(kal_uint32 plmn_id, kal_uint8 *vamos)
+{
+    kal_bool plmn_match = KAL_FALSE;
+      
+
+    switch(plmn_id)
+    {
+    
+      /*Please add  plmn list (as format explained in description )below for setting the vamos values */
+        
+      /* example to set vamos for a specific plmn is given below */
+      /*   case 0x00722310:   *vamos = 0x01;                  
+                                           plmn_match = KAL_TRUE;
+                                           break;  */
+         
+          default: plmn_match = KAL_FALSE;
+                   break; 
+        }   
+        
+        return plmn_match ;
+    }
+
+
+#endif /* __VAMOS_CUSTOM_CONFIG__ */
+
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_bsic_decode_fail_thresh
+* DESCRIPTION
+*   The function returns the MAX number of BSIC failure count after which RR needs to set BSIC read timer max.
+*
+* PARAMETERS
+*   Void
+* RETURNS
+*   kal_uint8
+*   
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 gas_custom_get_bsic_decode_fail_thresh(void)
+{
+
+    return gas_custom_bsic_decode_fail_thresh;
+
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_bsic_decode_fail_thresh
+* DESCRIPTION
+*   The function returns the  BSIC read timer max when 
+*    RR encountered gas_custom_bsic_decode_fail_thresh number of BSIC decode failures.
+*
+* PARAMETERS
+*   Void
+* RETURNS
+*   kal_uint8
+*   
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint8 gas_custom_get_wideband_signal_penalty_count(void)
+{
+
+    return gas_custom_wideband_signal_penalty_count;
+
+}
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_store_si_valid_period
+* DESCRIPTION
+*   The function is used to get the valid period of store si.
+*
+* PARAMETERS
+*   void
+* RETURNS
+*   kal_uint32 store_si_valid_period 
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint32 gas_custom_get_store_si_valid_period()
+{
+    return store_si_valid_period;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_serv_RSSI_threshold
+* DESCRIPTION
+*   The function is used to get the serv cell RSSI threshold to check if neighbor RSSI in MR need to decrease by a offset.
+*
+* PARAMETERS
+*   Void
+* RETURNS
+*   kal_uint16
+*   
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_int16 gas_custom_get_serv_RSSI_threshold(void)
+{
+    return gas_custom_serv_RSSI_threshold;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_serv_rxquality_threshold
+* DESCRIPTION
+*   The function is used to get the serv cell quality threshold to check if neighbor power in MR need to decrease by a offset.
+*
+* PARAMETERS
+*   Void
+* RETURNS
+*   kal_uint8
+*   
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_int8 gas_custom_get_serv_rxquality_threshold(void)
+{
+    return gas_custom_serv_rxquality_threshold;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_ncell_snr_threshold
+* DESCRIPTION
+*   The function is used to get the neighbor cell snr threshold to check if neighbor power in MR need to decrease by a offset.
+*
+* PARAMETERS
+*   snr_threshold_num: there are two snr thresholds, and other value is considered as invalid. 
+* RETURNS
+*   kal_uint16
+*   
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_int16 gas_custom_get_ncell_snr_threshold(kal_int16 snr_threshold_num)
+{
+	kal_int16 snr_threshold = 0;
+	
+	if(snr_threshold_num == NEIGHBOR_FIRST_SNR_THRESHOLD)
+	{
+		snr_threshold = gas_custom_ncell_snr_threshold_lev1;
+	}   	
+	else if(snr_threshold_num == NEIGHBOR_SECOND_SNR_THRESHOLD)
+	{
+		snr_threshold = gas_custom_ncell_snr_threshold_lev2;
+	}
+	
+	return snr_threshold;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_ncell_MR_offset
+* DESCRIPTION
+*   The function is used to get the RSSI offset value used in neigbor cell measurement report.
+*
+* PARAMETERS
+*   mr_rssi_offet_num: there are two offsets, and other value is considered as invalid. 
+* RETURNS
+*   kal_uint16
+*   
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_int16 gas_custom_get_ncell_MR_RSSI_offset(kal_int16 mr_rssi_offet_num)
+{
+	kal_int16 mr_rssi_offset = 0;
+
+	if(mr_rssi_offet_num == NEIGHBOR_MR_RSSI_FIRST_OFFSET)
+	{
+		mr_rssi_offset = gas_custom_ncell_MR_RSSI_offset_lev1;
+	}   	
+	else if(mr_rssi_offet_num == NEIGHBOR_MR_RSSI_SECOND_OFFSET)
+	{
+		mr_rssi_offset = gas_custom_ncell_MR_RSSI_offset_lev2;
+	}
+
+	return mr_rssi_offset;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_qrxlevmin
+* DESCRIPTION
+*  This function returns the customer set value for Qrxlevmin in dbm.
+* 
+* PARAMETERS
+*  void
+*           
+* RETURNS
+* customer set value for Qrxlevmin in dbm
+* 
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_int16 gas_custom_get_eutra_qrxlevmin(void)
+{
+    return gas_custom_eutra_qrxlevmin;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_emrgency_call_failure_cell_bar_time
+* DESCRIPTION
+*   The function returns emrgency call failure cell bar time; 
+*  
+* PARAMETERS
+*   Void
+* RETURNS
+*   kal_uint32
+*   
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint32 gas_custom_get_emrgency_call_failure_cell_bar_time(void)
+{
+
+    return gas_custom_emrgency_call_failure_cell_bar_time ;
+
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_emrgency_call_failure_max_count
+* DESCRIPTION
+*   The function returns emrgency call failure maximum count; *  
+*
+* PARAMETERS
+*   Void
+* RETURNS
+*   kal_uint8
+*   
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 gas_custom_get_emrgency_call_failure_max_count(void)
+{
+
+    return gas_custom_emrgency_call_failure_max_count;
+
+}
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_check_is_cmcc_plmn
+* DESCRIPTION
+*   The function is used to check if the input PLMN ID exist in  the customize 
+     GAS_CUSTOMIZE_CMCC_PLMN_ID_LIST[].
+*
+* PARAMETERS
+*   kal_uint32 plmn_id
+* RETURNS
+*   kal_bool 
+*   TRUE: the current plmn is a CMCC PLMN
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool gas_custom_check_is_cmcc_plmn(kal_uint32 plmn_id)
+{
+    kal_uint32 i;
+            
+    for(i = 0; i < CUSTOMERIZE_NUM_OF_CMCC_PLMN_ID; i++)
+    {        
+        if(plmn_id == GAS_CUSTOMIZE_CMCC_PLMN_ID_LIST[i].CustomizeCMCC_PLMN)
+        {   
+            /* This PLMN ID exist in GAS_CUSTOMIZE_CMCC_PLMN_ID_LIST */
+            return KAL_TRUE;
+        }
+    }        
+    /* This PLMN ID does not exist in GAS_CUSTOMIZE_CMCC_PLMN_ID_LIST */
+    return KAL_FALSE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_is_elevator_mode_optimisation_in_ptm_enabled
+* DESCRIPTION
+*   The function returns TRUE if the elevator_mode_optimisation_in_ptm is enabled or else FALSE
+*
+*
+* PARAMETERS
+*   Void
+* RETURNS
+*   kal_bool
+*   
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_bool gas_custom_is_elevator_mode_optimisation_in_ptm_enabled(void)
+{
+
+    return gas_custom_elevator_mode_optimisation_in_ptm;
+
+}
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_max_arfcn_to_try_for_stored_list_search
+* DESCRIPTION
+*   The function to get the customer set max cell number for stored list plmn search.
+*
+* PARAMETERS
+*   Void
+* RETURNS
+*   kal_uint32: default number of max ARFCN to try for stored list search
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint32 gas_custom_max_arfcn_to_try_for_stored_list_search (void)
+{
+    return custom_max_arfcn_to_try_for_stored_search;
+
+}
+
+/*****************************************************************************
+* FUNCTION
+*  gas_custom_get_max_rach_fail_count_prev_visited_cell
+* DESCRIPTION
+*   The function get max rach fail count , RRM will put the 
+*   serving into barred list if rach fail count more than this count.
+*
+* PARAMETERS
+*   kal_uint16 max rach fail count.
+* RETURNS
+*   Void
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint16 gas_custom_get_max_rach_fail_count_prev_visited_cell (void)
+{
+	return max_rach_fail_count_prev_visited_cell;
+}
+
+
diff --git a/mcu/custom/protocol/common/ps/custom_gas_config.h b/mcu/custom/protocol/common/ps/custom_gas_config.h
new file mode 100644
index 0000000..b43a8cd
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_gas_config.h
@@ -0,0 +1,426 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_gas_config.c
+ *
+ * Project:
+ * --------
+ *   MONZA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the GAS configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifndef _CUSTOM_GAS_CONFIG_H
+#define _CUSTOM_GAS_CONFIG_H
+
+#include "kal_general_types.h"
+
+/* Use to set the RACH bar service type under which service type we will bar the cell when RACH fail */
+#define RACH_BAR_SERVICE_TYPE_NONE  0x00  /* NONE */
+#define RACH_BAR_SERVICE_TYPE_CS    0x01  /* CS only */
+#define RACH_BAR_SERVICE_TYPE_PS    0x02  /* PS only */
+#define RACH_BAR_SERVICE_TYPE_CS_PS 0x03  /* CS+PS */
+
+#define NEIGHBOR_FIRST_SNR_THRESHOLD   0x1
+#define NEIGHBOR_SECOND_SNR_THRESHOLD  0x2
+#define NEIGHBOR_MR_RSSI_FIRST_OFFSET  0xa
+#define NEIGHBOR_MR_RSSI_SECOND_OFFSET 0xb
+
+/*************************************************************************
+* Global Variable
+*************************************************************************/
+extern kal_uint16 gas_custom_max_arfcn_to_try;
+
+extern kal_uint8 gas_custom_max_decoded_cell_a_band[];
+
+extern kal_bool gas_custom_fake_cell_feature;
+
+extern kal_uint8 gas_custom_search_offset;
+
+extern kal_int16 rxlev_access_min;
+
+extern kal_int16 c1_cell_selection_rxlev_min;
+
+
+extern kal_int16 gas_rlac_threshold_in_CSFB;
+extern kal_uint16 max_rach_fail_count_csfb;
+extern kal_uint16 max_rach_fail_count;
+
+extern kal_uint16 cell_count_threshold;
+
+extern kal_uint16 max_bar_timer_period;
+
+extern kal_uint16 min_bar_timer_period;
+
+extern kal_uint16 bar_timer_default_period;
+
+extern kal_bool gas_custom_paging_low_power_switch;
+
+extern kal_uint8 gas_custom_MR_RxQual_Threshold ;
+
+extern kal_uint8 gas_custom_MR_RxQual_poor_counter;
+
+extern kal_uint8 gas_custom_MR_RxLev_Threshold ;
+
+extern kal_uint8 gas_custom_umts_rscp_reward_threshold;
+
+extern kal_uint8 gas_custom_snr_threshold;
+
+extern kal_uint8 rach_bar_service_type;
+
+extern kal_uint8 gas_custom_lte_rsrp_reward_threshold;
+
+extern kal_uint32 gas_custom_umts_cell_resel_penalty_time;
+
+extern kal_uint8 gas_custom_bsic_decode_fail_thresh;
+
+extern kal_uint8 gas_custom_wideband_signal_penalty_count;
+
+extern kal_uint32 store_si_valid_period;
+
+extern const kal_uint32 RRM_DEFAULT_INACTIVE_MODE_SNIFFER_PERIOD;
+
+extern const kal_uint32 RRM_SCREEN_OFF_SNIFFER_PERIOD;
+
+extern kal_int16 gas_custom_eutra_qrxlevmin;
+
+extern kal_uint32 custom_max_arfcn_to_try_for_stored_search;
+
+/*************************************************************************
+* Struct
+*************************************************************************/
+
+typedef struct gas_customize_mcc
+{
+    /* MCC: Mobile Country Code */
+    kal_uint32 CustomizeMCC;
+}gas_customize_mcc;
+
+typedef struct gas_custom_a5gea_plmn
+{
+    kal_uint32 CustomizePLMN;
+    kal_uint8 a5;
+    kal_uint8 gea;
+}gas_custom_a5gea_plmn;
+
+extern const  gas_custom_a5gea_plmn GAS_CUSTOMIZE_A5GEA_PLMN_LIST[];
+extern const kal_uint32 CUSTOM_NUM_OF_PLMN_A5GEA;
+
+typedef struct gas_customize_cmcc_plmn_id
+{
+    /*CMCC operator*/
+    kal_uint32 CustomizeCMCC_PLMN;
+}gas_customize_cmcc_plmn_id;
+
+extern kal_int16 gas_custom_serv_RSSI_threshold;
+
+extern kal_int8 gas_custom_serv_rxquality_threshold;
+
+extern kal_int16 gas_custom_ncell_snr_threshold_lev1;
+
+extern kal_int16 gas_custom_ncell_snr_threshold_lev2;
+
+extern kal_int16 gas_custom_ncell_MR_RSSI_offset_lev1;
+
+extern kal_int16 gas_custom_ncell_MR_RSSI_offset_lev2;
+
+extern const  gas_customize_cmcc_plmn_id GAS_CUSTOMIZE_CMCC_PLMN_ID_LIST[];
+
+extern const kal_uint32 CUSTOMERIZE_NUM_OF_CMCC_PLMN_ID;
+/*************************************************************************
+* Function
+*************************************************************************/
+extern kal_bool rr_get_improved_call_prefer_setting (void);
+
+extern kal_bool rr_get_l2_fill_bits_randomization_setting (void);
+
+extern kal_bool gas_custom_is_specific_channel_srch (void);
+
+extern kal_uint8 gas_custom_get_num_of_specific_channels (void);
+
+extern kal_uint16 * gas_custom_get_specific_channels (void);
+
+extern void gas_custom_set_specific_channel_srch (kal_bool set_value);
+
+extern kal_bool gas_custom_get_fake_cell_feature_mode (void);
+
+extern kal_int16 as_custom_get_rxlev_access_min (void);
+
+extern kal_int16 as_custom_get_rlac_threshold_in_csfb (void);
+
+extern kal_uint16 as_custom_get_max_rach_fail_count (void);
+
+extern kal_uint16 as_custom_get_max_rach_fail_count_csfb(void);
+
+extern kal_uint16 as_custom_get_bar_timer_period (kal_uint8 arfcn_count);
+
+extern kal_uint16 as_custom_get_bar_timer_default_period (void);
+
+extern kal_bool gas_custom_check_fake_cell(kal_uint8 *apc_para,kal_uint16 *customer_cell_info);
+
+extern kal_bool gas_custom_get_paging_low_power_switch (void);
+
+extern kal_uint8 as_custom_get_mr_rxqual_threshold (void);
+
+extern kal_uint8 as_custom_get_mr_rxqual_poor_counter (void);
+
+extern kal_uint8 as_custom_get_mr_nc_power_better_than_sc_rxlev_threshold (void);
+
+extern kal_uint8 gas_custom_get_umts_rscp_reward_threshold (void);
+
+extern kal_uint8 gas_custom_get_snr_threshold (void);
+
+extern kal_int16 as_custom_get_c1_cell_selection_rxlev_min (void);
+
+extern kal_uint8 as_custom_get_paging_retry_timer_ticks (void);
+
+extern kal_uint8 gas_custom_get_rach_bar_service_type(void);
+
+extern kal_bool gas_custom_is_MCC_rxlev_access_min_enable(kal_uint32 measured_mcc);
+
+extern kal_int16 gas_custom_get_serv_RSSI_threshold(void);
+
+extern kal_int8 gas_custom_get_serv_rxquality_threshold(void);
+
+extern kal_int16 gas_custom_get_ncell_snr_threshold(kal_int16 snr_threshold_num);
+
+extern kal_int16 gas_custom_get_ncell_MR_RSSI_offset(kal_int16 mr_rssi_offet_num);
+
+
+extern kal_uint8 gas_custom_get_lte_rsrp_reward_threshold (void);
+
+extern kal_uint32 gas_custom_get_umts_cell_resel_penalty_time (void);
+
+extern kal_uint16 gas_custom_BSIC_reading_time_interval;
+
+#ifdef __VAMOS_CUSTOM_CONFIG__
+
+extern kal_bool gas_custom_check_plmn_for_vamos(kal_uint32, kal_uint8*);
+
+#endif /* __VAMOS_CUSTOM_CONFIG__ */
+
+extern kal_uint8 gas_custom_get_bsic_decode_fail_thresh(void);
+
+extern kal_uint8 gas_custom_get_wideband_signal_penalty_count(void);
+
+extern kal_uint32 gas_custom_get_store_si_valid_period();
+
+extern kal_int16 gas_custom_get_eutra_qrxlevmin(void);
+
+extern kal_uint32 gas_custom_get_emrgency_call_failure_cell_bar_time(void);
+extern kal_uint8 gas_custom_get_emrgency_call_failure_max_count(void);
+
+extern kal_bool gas_custom_check_is_cmcc_plmn (kal_uint32 plmn_id);
+extern kal_bool gas_custom_is_elevator_mode_optimisation_in_ptm_enabled(void);
+extern kal_uint32 gas_custom_max_arfcn_to_try_for_stored_list_search (void);
+
+extern kal_uint16 gas_custom_get_max_rach_fail_count_prev_visited_cell (void);
+
+#endif /* _CUSTOM_GAS_CONFIG_H */
+
+
+
diff --git a/mcu/custom/protocol/common/ps/custom_gmss_config.c b/mcu/custom/protocol/common/ps/custom_gmss_config.c
new file mode 100644
index 0000000..eddfbb2
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_gmss_config.c
@@ -0,0 +1,620 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ *   custom_gmss_config.c
+ *
+ * Project:
+ * --------
+ *   Moly_Software
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the GMSS configuration that can be customized
+ *
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+#ifndef __L1_STANDALONE__
+
+#include "kal_general_types.h"
+#include "custom_gmss_config.h"
+#include "ps_public_enum.h"
+#include "l3_inc_enums.h"
+
+/*************************************************************************
+* Scan timer
+*
+*   while power-on or lost coverage, keep search network 
+*   until t_scan timer expiry 
+*
+* Note: This value should NOT be 0, minimum value is 1 min
+*************************************************************************/
+const kal_uint16 GMSS_CUSTOM_CT_SCAN_TIMER_VALUE_SECS  = 10*60;	// default 10 minutes
+const kal_uint16 GMSS_CUSTOM_VZW_SCAN_TIMER_VALUE_SECS  = 15*60;	// default 15 minutes
+const kal_uint16 GMSS_CUSTOM_SPRINT_SCAN_TIMER_VALUE_SECS  = 15*60;	// default 15 minutes
+
+
+/*************************************************************************
+* Sleep timer
+*
+*   while power-on or lost coverage, keep search network 
+*   until t_scan timer expiry 
+*
+* Note: This value should NOT be 0, minimum value is 1 min
+*************************************************************************/
+const kal_uint16 GMSS_CUSTOM_CT_SLEEP_TIMER_VALUE_SECS =  3*60;   // default 3 mintues
+const kal_uint16 GMSS_CUSTOM_VZW_SLEEP_TIMER_VALUE_SECS =  3*60;   // default 3 mintues
+const kal_uint16 GMSS_CUSTOM_SPRINT_SLEEP_TIMER_VALUE_SECS =  3*60;   // default 3 mintues
+
+
+/*************************************************************************
+* default MPSR timer value
+*
+*   if UE camp in a network without any MSPL record associated with it,
+*   UE will use start a default MPSR timer for high priority search
+*
+* Note: This value should NOT be 0, minimum value is 1 min
+*************************************************************************/
+const kal_uint16 GMSS_CUSTOM_CT_MPSR_TIMER_VALUE_SECS  = 2*60; // default 2 mintues
+const kal_uint16 GMSS_CUSTOM_VZW_MPSR_TIMER_VALUE_SECS  = 2*60; // default 2 mintues
+const kal_uint16 GMSS_CUSTOM_SPRINT_MPSR_TIMER_VALUE_SECS  = 1*60; // default 2 mintues
+const kal_uint16 GMSS_CUSTOM_USCC_MPSR_TIMER_VALUE_SECS  = 2*60; // default 2 mintues
+const kal_uint16 GMSS_CUSTOM_NON_SRLTE_MPSR_TIMER_VALUE_SECS[] = 
+{
+    //The unit is seconds
+    2*60, 15*60, 60*60
+}; 
+const kal_uint16 GMSS_CUSTOM_NON_SRLTE_MPSR_TIMER_NUM =  sizeof(GMSS_CUSTOM_NON_SRLTE_MPSR_TIMER_VALUE_SECS)/sizeof(kal_uint16);
+
+
+/****************************************************************************************************************************************************
+* Incremental MPSR timer
+*
+* This is a method to modify the MPSR timer value for an area where only 1xRTT can provide normal service.
+* 
+* If UE had never found normal service on LTE/NR, then use GMSS_CUSTOM_INCREMENTAL_MPSR_TIMER_VALUE_SECS[] irrespective of screen status
+* i.e MPSR timer will be started as per the custom setting -
+*     2 mins for 2 times, 4 mins for 4 times, 8 mins for 8 times, 16 mins for 16 times, 32 mins for 32 times, 64 mins till power-off/flight mode ON.
+*
+* If UE had found normal service on LTE/NR before, then 
+*    - On Screen OFF: MPSR timer will be started as per the custom setting -
+*                    2 mins for 2 times, 4 mins for 4 times, 8 mins for 8 times, 16 mins for 16 times, 32 mins for 32 times, 
+*                    64 mins till power-off/flight mode ON.
+*    - On Screen ON: MPSR timer will be reset to 2 mins and the below custom setting will not be used.
+*
+* NOTE: The last value of GMSS_CUSTOM_INCREMENTAL_MPSR_REPEAT_COUNTER[] is ignored
+*       
+****************************************************************************************************************************************************/
+const kal_uint16 GMSS_CUSTOM_INCREMENTAL_MPSR_TIMER_VALUE_SECS[] = 
+{
+    //The unit is seconds
+    2*60, 4*60, 8*60, 16*60, 32*60, 64*60
+}; 
+const kal_uint16 GMSS_CUSTOM_INCREMENTAL_MPSR_TIMER_VALUE_NUM =  sizeof(GMSS_CUSTOM_INCREMENTAL_MPSR_TIMER_VALUE_SECS)/sizeof(kal_uint16);
+
+
+const kal_uint16 GMSS_CUSTOM_INCREMENTAL_MPSR_REPEAT_COUNTER[] = 
+{
+    2, 4, 8, 16, 32, 64
+}; 
+const kal_uint16 GMSS_CUSTOM_INCREMENTAL_MPSR_REPEAT_COUNTER_NUM =  (sizeof(GMSS_CUSTOM_INCREMENTAL_MPSR_REPEAT_COUNTER)/sizeof(kal_uint16)) - 1;
+
+/*************************************************************************
+* search MSPL delay timer value
+*
+*   If search all MSPL and cannot camp on network, wait the timer expired to continued in case
+*   external queue is full if GMSS continuous PLMN search is triggered in a short time
+*
+* Note: This value should NOT be 0, minimum value is 1 sec 
+*************************************************************************/
+
+const kal_uint16 GMSS_CUSTOM_DELAY_MSPL_SEARCH_TIMER_VALUE_SECS = 1;	// default 1 seconds
+
+/*************************************************************************
+* search deep sleep mode timer value
+*
+*   If it is in deep sleep mode, modify deep sleep scan and sleep time
+*   
+*
+* Note: This value should NOT be 0, minimum value is 3 mins
+*************************************************************************/
+
+const kal_uint32 GMSS_CUSTOM_DEEP_SLEEP_SCAN_TIMER_VALUE_SECS  = 10*60; // default 10 mintues
+const kal_uint32 GMSS_CUSTOM_DEEP_SLEEP_SLEEP_TIMER_VALUE_SECS  = 3*60; // default 3mintues
+const kal_uint32 GMSS_CUSTOM_SleepTimeWhenExitInactive_VALUE_SECS = 3*60; // default 3mintues
+
+/*************************************************************************
+* search MCC delay timer value
+*
+*   If search all access table and cannot find current location, wait the timer expired to continued in case
+*   external queue is full if GMSS continuous MCC search is triggered in a short time
+*
+* Note: This value should NOT be 0, minimum value is 100 milliseconds 
+*************************************************************************/
+const kal_uint16 GMSS_CUSTOM_DELAY_MCC_SEARCH_TIMER_VALUE_100_MSECS = 1;	// default 100 milliseconds
+
+/*************************************************************************/
+const kal_uint8 GMSS_CUSTOM_VZW_TELE_MPSR_REPEAT_COUNTER = 3;
+const kal_uint8 GMSS_CUSTOM_VZW_TELE_MPSR_MULTIPILER = 2;
+const kal_uint8 GMSS_CUSTOM_VZW_TELE_MPSR_MAX_STAGE = 3;
+
+const kal_uint8 GMSS_CUSTOM_SPRINT_TELE_MPSR_REPEAT_COUNTER = 1;
+const kal_uint8 GMSS_CUSTOM_SPRINT_TELE_MPSR_MULTIPILER = 2;
+const kal_uint8 GMSS_CUSTOM_SPRINT_TELE_MPSR_MAX_STAGE = 3;
+
+const kal_uint8 GMSS_CUSTOM_OTHER_TELE_MPSR_REPEAT_COUNTER = 1;
+const kal_uint8 GMSS_CUSTOM_OTHER_TELE_MPSR_MULTIPILER = 1;
+const kal_uint8 GMSS_CUSTOM_OTHER_TELE_MPSR_MAX_STAGE = 1;
+
+const kal_uint32 GMSS_CUSTOM_SPRINT_LONG_MPSR_DURATION = 5*60;
+const kal_uint8 GMSS_CUSTOM_SPRINT_LTE_UNAVAIL_MIN_THRESHOLD = 2;
+const kal_uint8 GMSS_CUSTOM_SPRINT_LTE_UNAVAIL_RATE_THRESHOLD = 0;
+
+/*************************************************************************
+* Duplex mode OOS timer interval
+*
+*   UE may switch between different duplex modes (TD-LTE/LTE-FDD or WCDMA/TD-SCDMA)
+*   on the basis of operators' requirement in different countries.
+*   
+*   Once the UE is out-of-service and location information is not available,
+*   UE will start timer and switch duplex mode after timer expiry.
+*
+*************************************************************************/
+
+const kal_uint16 CUSTOM_DUPLEX_MODE_OOS_TIMER_INTERVAL[] =
+{
+    /* The unit is second */
+    40, 40, 40, 60, 60, 60, 120, 120, 120, 240
+};
+const kal_uint16 GMSS_CUSTOM_DUPLEX_MODE_OOS_TIMER_NUM = sizeof(CUSTOM_DUPLEX_MODE_OOS_TIMER_INTERVAL)/sizeof(kal_uint16);
+
+
+/*************************************************************************
+* Duplex mode delay timer
+*
+*   If SBP_GEMINI_LG_WG_MODE is turned on, UE may apply FDD mode for CMCC+CU combination.
+*
+*   To avoid changing duplex mode frequently while doing SIM hot swap, this delay timer is 
+*   used to wait for SIM status becoming stable.
+*
+* Note: This value should NOT be 0, minimum value is 8 sec 
+*************************************************************************/
+const kal_uint16 CUSTOM_DUPLEX_MODE_DELAY_TIMER_VALUE_SECS = 20;
+
+
+/*************************************************************************
+* Duplex mode CSFB timer
+*
+*   If CMCC 4G3 MT CSFB happens in FDD mode (e.g. UE in LG+WG mode for CMCC+CU combination),
+*   UE will switch to TDD mode to answer MT call.
+* 
+*   UE will switch to FDD mode after this timer expiry.
+*
+* Note: This value should NOT be 0, minimum value is 2 mins
+*************************************************************************/
+const kal_uint16 CUSTOM_DUPLEX_MODE_CSFB_TIMER_VALUE_SECS = 5*60;
+
+/*************************************************************************
+* Duplex mode RF status timer
+*
+*   To avoid changing duplex mode frequently while RF status changes rapidly,
+*   this timer is used to wait for RF status becoming stable.
+*
+* Note: This value should NOT be 0, minimum value is 10 secs 
+*************************************************************************/
+const kal_uint16 GMSS_CUSTOM_DUPLEX_MODE_RF_STATUS_TIMER_VALUE_SECS = 10;
+
+/*************************************************************************
+* vzw reduce 3G idle mpsr timer interval
+*
+*   per VZ_REQ_LTEMMO_38691, it request device to gradually return to a scanning frequency governed by t_mpsr: 2min
+*
+*************************************************************************/
+
+const kal_uint16 CUSTOM_VZW_REDUCE_3G_IDLE_MPSR_TIMER_INTERVAL[] =
+{
+    /* The unit is second */
+    120, 10, 20, 20, 20, 40, 40, 80, 80, 120
+};
+
+/*************************************************************************
+* recovery_limited_service_timer interval
+*
+*
+*************************************************************************/
+
+
+const kal_uint32 CUSTOM_RECOVERY_LIMITED_SERVICE_TIMER_INTERVAL[MAX_RECOVERY_TIMER_NUM] =
+{
+    #ifdef __NWSEL_QUICK_SEARCH_FOR_ROAMING__ 
+    0x14, 0x14, 0x14, 0x14, 0x14, 
+    0x14, 0x1E, 0x1E, 0x1E, 0x1E, 
+    0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 
+    0x3C, 0x3C, 0x3C, 0x3C,
+    0x3C, 0x3C, 0x3C, 0x3C
+    #else
+    0x14, 0x14, 0x3C, 0x3C, 0x3C, 
+    0x3C, 0x5A, 0x5A, 0x5A, 0x5A, 
+    0x5A, 0x5A, 0xB4, 0xB4, 0xB4, 
+    0xB4, 0xB4, 0xB4, 0x168,
+    0x168, 0x168, 0x168, 0x168
+    #endif
+};
+
+/*************************************************************************
+* World Phone User Type (defined by OP01)
+* - Users are classified according to HPLMN derived from IMSI 
+*   - CUSTOM_WORLD_PHONE_TYPE1_PLMN
+*   - CUSTOM_WORLD_PHONE_TYPE2_PLMN (neither type1 nor type3)
+*   - CUSTOM_WORLD_PHONE_TYPE3_PLMN
+*************************************************************************/
+const char *CUSTOM_WORLD_PHONE_TYPE1_PLMN[] =
+    {"00101F", "00211F", "00321F", "00431F", "00541F",
+     "00651F", "00761F", "00871F", "00902F", "01012F",
+     "01122F", "01232F", "46000F", "46002F", "46003F",
+     "46004F", "46007F", "46008F", "46602F", "50270F",
+     "45412F", "45413F",
+     CUSTOM_PLMN_SET_END};
+
+const char *CUSTOM_WORLD_PHONE_TYPE3_PLMN[] = 
+    {"46001F", "46005F", "46006F", "46009F", "46011F", "45407F", "45502F", CUSTOM_PLMN_SET_END};
+
+
+/*************************************************************************
+* EHPLMNs Defined by Operatoers
+*************************************************************************/
+const char *CUSTOM_CT_HPLMN[] = {"46011F", "46003F", "45502F", "45507F", "45431F", CUSTOM_PLMN_SET_END};
+const char *CUSTOM_VZW_HPLMN[] = {"311480","310028", "311390", CUSTOM_PLMN_SET_END}; // 310028/311390 are added for NSN/Ericsson IOT
+const char *CUSTOM_SPRINT_HPLMN[] = {"310120", "311490", "312530", CUSTOM_PLMN_SET_END};
+const char *CUSTOM_CMCC_HPLMN[] = {"46000F", "46002F", "46004F", "46007F", "46008F", CUSTOM_PLMN_SET_END};
+const char *CUSTOM_CU_HPLMN[] = {"46001F", CUSTOM_PLMN_SET_END};
+const char *CUSTOM_SMARTFREN_HPLMN[] = {"51009F", "51028F", CUSTOM_PLMN_SET_END};
+const char *CUSTOM_RJIO_HPLMN[] = {"405840","405854","405855","405856","405857","405858","405859","405860",
+                                    "405861","405862","405863","405864","405865","405866","405867","405868",
+                                    "405869","405870","405871","405872","405873","405874",CUSTOM_PLMN_SET_END};
+const char *CUSTOM_LGUPLUS_HPLMN[] = {"45006F", CUSTOM_PLMN_SET_END};
+const char *CUSTOM_KDDI_TEST_HPLMN[] = {"44054F", CUSTOM_PLMN_SET_END};
+
+/* ALPS05352058 to remove others PLMN except 44051 */
+const char *CUSTOM_KDDI_HPLMN[]={"44051F",CUSTOM_PLMN_SET_END};
+
+const char *CUSTOM_USCC_HPLMN[] = {"311580","311581","311582","311583","311584","311585","311586","311587",
+                                    "311588","311589","311220","311221","311222","311223","311224","311225",
+                                    "311226","311227","311228","311229","310332","262800",CUSTOM_PLMN_SET_END};//310332/262800 are add for Ericsson NVIOT
+
+const char *CUSTOM_LRA_HPLMN[] = {"311840","311850", CUSTOM_PLMN_SET_END}; //Some LRA operaotr change EHPLMN but should also be considered as VzW
+
+/*************************************************************************
+* SPECIFIED SRLTE PLMN Defined by Operatoers
+*************************************************************************/
+const char *CUSTOM_LRA_SPECIFIED_SRLTE_PLMN[] = {"311480", CUSTOM_PLMN_SET_END};//LRA request UE should be able to work as SRLTE no matter 311480 is Roaming or Home
+
+
+/*************************************************************************
+* Border MCC Prefer List
+* - When modem founds multiple PLMNs belong to different countries (MCCs) at the same time,
+*   we'll choose MCCs defined in CUSTOM_BORDER_MCC_PREFER_LIST to determine location
+*************************************************************************/
+const kal_uint16 CUSTOM_BORDER_MCC_PREFER_LIST_CHINA[] = {460, CUSTOM_MCC_SET_END};
+
+
+/*************************************************************************
+* SRLTE Mode MCC List
+* - UE will operate in LTE+CDMA mode while UE moves into countries of following MCCs for C2K projects
+*************************************************************************/
+const kal_uint16 CUSTOM_CT_SRLTE_MCC_LIST[] = {460, 455, CUSTOM_MCC_SET_END};
+const kal_uint16 CUSTOM_US_SRLTE_MCC_LIST[] = {310, 311, 312, 313, 314, 315, 316, 330, CUSTOM_MCC_SET_END};
+const kal_uint16 CUSTOM_FRG_SRLTE_MCC_LIST[] = {262, CUSTOM_MCC_SET_END}; //262 is for NVIOT ericsson test USCC
+const kal_uint16 CUSTOM_SMARTFREN_SRLTE_MCC_LIST[] = {510, CUSTOM_MCC_SET_END};
+const kal_uint16 CUSTOM_KDDI_SRLTE_MCC_LIST[] = {440, 441, CUSTOM_MCC_SET_END};
+
+
+
+/*************************************************************************
+* Access table (Technology table)
+*
+* A table containing access technologies in order that is used for MCC search.
+*
+*************************************************************************/
+
+const gmss_rat_enum CUSTOM_ACCESS_TABLE[] = 
+{
+    GMSS_RAT_CDMA2000_1xRTT,
+    GMSS_RAT_3GPP_ALL,                   // Group 3GPP RAT to improve MCC search performance
+    GMSS_RAT_CDMA2000_HRPD
+};
+
+const kal_uint8 CUSTOM_ACCESS_TABLE_SIZE = sizeof(CUSTOM_ACCESS_TABLE)/sizeof(gmss_rat_enum);
+
+
+/*************************************************************************
+* TD duplex switch MCC List
+* - CMCC card inserted, start a longer timer for duplex mode switch in case of temporary OOS.
+* - Target on China geometric neighbor area
+*************************************************************************/
+const kal_uint16 CUSTOM_LONGER_TDSW_TIMER_MCC_LIST[] = {466, 440, CUSTOM_MCC_SET_END};
+
+
+const rat_enum CUSTOM_ECC_FULL_BAND_SEARCH_RAT_ORDER_TABLE[][ECC_FULL_BAND_SEARCH_RAT_ORDER_TABLE_LEN] = {
+   /* 0: CNLWG*/
+   {RAT_C2K, RAT_NR, RAT_LTE, RAT_UMTS, RAT_GSM},
+
+   /* 1: CLWGN */
+   {RAT_C2K, RAT_LTE, RAT_UMTS, RAT_GSM, RAT_NR},
+
+   /* 2: CWGNL */
+   {RAT_C2K, RAT_UMTS, RAT_GSM, RAT_NR, RAT_LTE},   
+
+   /* 3: CWGLN */
+   {RAT_C2K, RAT_UMTS, RAT_GSM, RAT_LTE, RAT_NR}, 
+
+   /* 4: NLWGC */
+   {RAT_NR, RAT_LTE, RAT_UMTS, RAT_GSM, RAT_C2K},
+
+   /* 5: LWGNC */
+   {RAT_LTE, RAT_UMTS, RAT_GSM, RAT_NR, RAT_C2K},
+   
+   /* 6: WGLNC */
+   {RAT_UMTS, RAT_GSM, RAT_LTE, RAT_NR, RAT_C2K},
+
+   /* 7: WGLCN */
+   {RAT_UMTS, RAT_GSM, RAT_LTE, RAT_C2K, RAT_NR},
+
+   /* 8: WGCLN */
+   {RAT_UMTS, RAT_GSM, RAT_C2K, RAT_LTE, RAT_NR}
+   
+   };
+
+/*************************************************************************
+* GPS valid timer
+* - default value is 60 seconds
+*************************************************************************/
+
+const kal_uint16 GMSS_CUSTOM_GPS_VALID_TIMER_VALUE_SECS  = 60;
+
+#endif /* #ifndef __L1_STANDALONE__ */
+
diff --git a/mcu/custom/protocol/common/ps/custom_gmss_config.h b/mcu/custom/protocol/common/ps/custom_gmss_config.h
new file mode 100644
index 0000000..9b1957a
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_gmss_config.h
@@ -0,0 +1,353 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   custom_gmss_config.h
+ *
+ * Project:
+ * --------
+ *   MONZA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the configurations of Selection customization feature
+ *
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef _CUSTOM_GMSS_CONFIG_H
+#define _CUSTOM_GMSS_CONFIG_H
+
+#include "kal_general_types.h"
+#include "ps_public_enum.h"
+
+#if defined(__TC10_IPC_CDMA_SUPPORT__) && defined(__FEATURE_SS_LOG__)
+#include "ss_log_util_api.h"
+#endif
+
+#define ECC_FULL_BAND_SEARCH_RAT_ORDER_TABLE_LEN 5
+
+/*************************************************************************
+* Constant
+*************************************************************************/
+/* Do not modify the following default values */
+
+extern const kal_uint16 GMSS_CUSTOM_CT_SCAN_TIMER_VALUE_SECS;
+extern const kal_uint16 GMSS_CUSTOM_VZW_SCAN_TIMER_VALUE_SECS;
+extern const kal_uint16 GMSS_CUSTOM_SPRINT_SCAN_TIMER_VALUE_SECS;
+extern const kal_uint16 GMSS_CUSTOM_CT_SLEEP_TIMER_VALUE_SECS;
+extern const kal_uint16 GMSS_CUSTOM_VZW_SLEEP_TIMER_VALUE_SECS;
+extern const kal_uint16 GMSS_CUSTOM_SPRINT_SLEEP_TIMER_VALUE_SECS;
+extern const kal_uint16 GMSS_CUSTOM_CT_MPSR_TIMER_VALUE_SECS;
+extern const kal_uint16 GMSS_CUSTOM_VZW_MPSR_TIMER_VALUE_SECS;
+extern const kal_uint16 GMSS_CUSTOM_SPRINT_MPSR_TIMER_VALUE_SECS;
+extern const kal_uint16 GMSS_CUSTOM_USCC_MPSR_TIMER_VALUE_SECS;
+extern const kal_uint16 GMSS_CUSTOM_NON_SRLTE_MPSR_TIMER_NUM; 
+extern const kal_uint16 GMSS_CUSTOM_NON_SRLTE_MPSR_TIMER_VALUE_SECS[];
+extern const kal_uint16 GMSS_CUSTOM_INCREMENTAL_MPSR_TIMER_VALUE_SECS[];
+extern const kal_uint16 GMSS_CUSTOM_INCREMENTAL_MPSR_TIMER_VALUE_NUM;
+extern const kal_uint16 GMSS_CUSTOM_INCREMENTAL_MPSR_REPEAT_COUNTER[];
+extern const kal_uint16 GMSS_CUSTOM_INCREMENTAL_MPSR_REPEAT_COUNTER_NUM;
+extern const kal_uint16 GMSS_CUSTOM_DELAY_MSPL_SEARCH_TIMER_VALUE_SECS;
+extern const kal_uint16 GMSS_CUSTOM_DELAY_MCC_SEARCH_TIMER_VALUE_100_MSECS;
+extern const kal_uint32 GMSS_CUSTOM_DEEP_SLEEP_SCAN_TIMER_VALUE_SECS;
+extern const kal_uint32 GMSS_CUSTOM_DEEP_SLEEP_SLEEP_TIMER_VALUE_SECS;
+extern const kal_uint32 GMSS_CUSTOM_SleepTimeWhenExitInactive_VALUE_SECS;
+
+extern const kal_uint8 GMSS_CUSTOM_VZW_TELE_MPSR_REPEAT_COUNTER;
+extern const kal_uint8 GMSS_CUSTOM_VZW_TELE_MPSR_MULTIPILER;
+extern const kal_uint8 GMSS_CUSTOM_VZW_TELE_MPSR_MAX_STAGE;
+
+extern const kal_uint8 GMSS_CUSTOM_SPRINT_TELE_MPSR_REPEAT_COUNTER;
+extern const kal_uint8 GMSS_CUSTOM_SPRINT_TELE_MPSR_MULTIPILER;
+extern const kal_uint8 GMSS_CUSTOM_SPRINT_TELE_MPSR_MAX_STAGE;
+
+extern const kal_uint8 GMSS_CUSTOM_OTHER_TELE_MPSR_REPEAT_COUNTER;
+extern const kal_uint8 GMSS_CUSTOM_OTHER_TELE_MPSR_MULTIPILER;
+extern const kal_uint8 GMSS_CUSTOM_OTHER_TELE_MPSR_MAX_STAGE;
+
+extern const kal_uint32 GMSS_CUSTOM_SPRINT_LONG_MPSR_DURATION;
+extern const kal_uint8 GMSS_CUSTOM_SPRINT_LTE_UNAVAIL_MIN_THRESHOLD;
+extern const kal_uint8 GMSS_CUSTOM_SPRINT_LTE_UNAVAIL_RATE_THRESHOLD;
+
+#define CUSTOM_PLMN_SET_END "FFFFFF" //SHALL NOT MODIFY!
+
+extern const char *CUSTOM_WORLD_PHONE_TYPE1_PLMN[];
+extern const char *CUSTOM_WORLD_PHONE_TYPE3_PLMN[];
+
+extern const char *CUSTOM_LRA_SPECIFIED_SRLTE_PLMN[];
+
+extern const char *CUSTOM_CT_HPLMN[];
+extern const char *CUSTOM_VZW_HPLMN[];
+extern const char *CUSTOM_SPRINT_HPLMN[];
+extern const char *CUSTOM_CMCC_HPLMN[];
+extern const char *CUSTOM_CU_HPLMN[];
+extern const char *CUSTOM_SMARTFREN_HPLMN[];
+extern const char *CUSTOM_RJIO_HPLMN[];
+extern const char *CUSTOM_LGUPLUS_HPLMN[];
+extern const char *CUSTOM_KDDI_TEST_HPLMN[];
+
+extern const char *CUSTOM_KDDI_TEST_HPLMN[];
+extern const char *CUSTOM_KDDI_HPLMN[];
+
+extern const char *CUSTOM_USCC_HPLMN[];
+
+extern const char *CUSTOM_LRA_HPLMN[];
+
+#define CUSTOM_MCC_SET_END 0xFFFF //SHALL NOT MODIFY!
+
+extern const kal_uint16 CUSTOM_BORDER_MCC_PREFER_LIST_CHINA[];
+extern const kal_uint16 CUSTOM_CT_SRLTE_MCC_LIST[];
+extern const kal_uint16 CUSTOM_US_SRLTE_MCC_LIST[];
+extern const kal_uint16 CUSTOM_FRG_SRLTE_MCC_LIST[];
+extern const kal_uint16 CUSTOM_SMARTFREN_SRLTE_MCC_LIST[];
+extern const kal_uint16 CUSTOM_KDDI_SRLTE_MCC_LIST[];
+
+extern const kal_uint16 GMSS_CUSTOM_DUPLEX_MODE_OOS_TIMER_NUM;  /* shall be 1 ~ 255 */
+extern const kal_uint16 CUSTOM_DUPLEX_MODE_OOS_TIMER_INTERVAL[];
+extern const kal_uint16 CUSTOM_DUPLEX_MODE_DELAY_TIMER_VALUE_SECS;
+extern const kal_uint16 CUSTOM_DUPLEX_MODE_CSFB_TIMER_VALUE_SECS;
+extern const kal_uint16 GMSS_CUSTOM_DUPLEX_MODE_RF_STATUS_TIMER_VALUE_SECS;
+
+extern const kal_uint16 CUSTOM_VZW_REDUCE_3G_IDLE_MPSR_TIMER_INTERVAL[];
+
+extern const kal_uint32 CUSTOM_RECOVERY_LIMITED_SERVICE_TIMER_INTERVAL[];
+
+extern const gmss_rat_enum CUSTOM_ACCESS_TABLE[];
+extern const kal_uint8 CUSTOM_ACCESS_TABLE_SIZE;
+extern const gmss_rat_enum CUSTOM_CT_ACCESS_TABLE[];
+extern const kal_uint8 CUSTOM_CT_ACCESS_TABLE_SIZE;
+extern const kal_uint16 CUSTOM_LONGER_TDSW_TIMER_MCC_LIST[];
+
+extern const rat_enum CUSTOM_ECC_FULL_BAND_SEARCH_RAT_ORDER_TABLE[][ECC_FULL_BAND_SEARCH_RAT_ORDER_TABLE_LEN];
+
+extern const kal_uint16 GMSS_CUSTOM_GPS_VALID_TIMER_VALUE_SECS;
+
+/*************************************************************************
+* Enum
+*************************************************************************/
+
+/*************************************************************************
+* Function
+*************************************************************************/
+
+#if defined(__TC10_IPC_CDMA_SUPPORT__) && defined(__FEATURE_SS_LOG__)
+
+#ifdef UNIT_TEST
+#define GMSS_CUST_TRACE(s, ...) dhl_print(TRACE_INFO, DHL_USER_FLAG_NONE, kal_get_active_module_id(), s, ##__VA_ARGS__)
+#else
+#define GMSS_CUST_TRACE(s, ...) SLOG_MAC_EXT(&ss_dbg_Protocol, s, ##__VA_ARGS__)
+#endif
+
+#else
+
+#define GMSS_CUST_TRACE(s, ...)
+
+#endif
+
+
+#endif /* _CUSTOM_GMSS_CONFIG_H */
+
diff --git a/mcu/custom/protocol/common/ps/custom_gprs_pdp_config.c b/mcu/custom/protocol/common/ps/custom_gprs_pdp_config.c
new file mode 100644
index 0000000..b4cfd34
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_gprs_pdp_config.c
@@ -0,0 +1,462 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_gprs_pdp_config.c
+ *
+ * Project:
+ * --------
+ *   MAUI Project
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the FLC2 configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *******************************************************************************/
+
+#ifdef __MOD_TCM__
+
+//#include "kal_release.h"
+//#include "kal_non_specific_general_types.h"
+//#include "l3_inc_enums.h"
+//#include "mmi_l3_enums.h"
+//#include "custom_mmi_default_value.h"
+//#include "mcd_l3_inc_gprs_struct.h"
+
+//#include "common_nvram_editor_data_item.h"
+//#include "custom_data_account.h"
+
+//#include "l4c2abm_struct.h"
+
+//#include "mmi_sm_enums.h"
+
+//#include "ppp_l4_enums.h"
+
+//#include "tcm_common_enums.h"
+
+//#include "tcm_common.h"
+
+//#include "custom_gprs_pdp_default_qos_config.h"
+
+#include "custom_gprs_pdp_config.h"
+#include "l4_ps_api.h"
+#include "ps_public_enum.h"
+//#include "tcm_common.h"
+
+/****************************************************************************
+* PDP Activation retry is 30sec as per 24.008 section 11.2.3.
+* Use SM_CUSTOM_PDP_ACTIVATION_RETRY_T3380_TIMER_VALUE to increase or decrease 
+* T3380 Timer(value in seconds). 
+* When SM_CUSTOM_PDP_ACTIVATION_RETRY_T3380_TIMER_VALUE is 0, MTK shall use default T3380 timer value,i.e 30 secs.
+* Example: say if PDP Activation retry Timer needs to be customized to 15 secs then set SM_CUSTOM_PDP_ACTIVATION_RETRY_T3380_TIMER_VALUE = 15.
+****************************************************************************/
+const kal_uint32 SM_CUSTOM_PDP_ACTIVATION_RETRY_T3380_TIMER_VALUE = 0;
+
+
+#ifdef __APP_SECONDARY_PDP_SUPPORT__
+
+#include "custom_data_account.h"        /* Poying: Should not be removed. */
+#include "l4c2abm_struct.h"             /* Poying: Should be added. */
+#include "custom_mmi_default_value.h"   /* Poying: Should not be removed. */
+
+//#include "tcm_common.h"                 /* poying: Should be added. */
+#include "mmi_l3_enums.h"
+
+
+//------------------------------ suggest Add ------------------------------    
+#include "kal_general_types.h"    
+#include "kal_public_api.h"    
+#include "kal_trace.h"
+
+#include "tcm_trc.h"
+#include "tcm_api.h"
+
+
+// this enum means that the PDP requested mamimum bit rate == 6 times of guarantee bit rate
+#define STREAMING_REQUESTED_MAXIMUM_BITRATE_SCALE_NUMBER 6
+
+extern ps_conf_test_mode_enum test_mode_consider_sim(kal_uint8 simInterface);
+
+
+/*****************************************************************************
+* FUNCTION
+*   custom_gprs_pdp_secondary_qos_encode
+* DESCRIPTION
+*   This function implements the 3GPP spec  26.234 Annex J
+*   Call by Applications 
+*   This function is owned by Carlson Lin / Howard Yeh
+*   The 3GPP spec 26.234 is owned by Howard Yeh
+* 
+* PARAMETERS
+*    IN   
+*    IN       
+* RETURNS
+*   kal_bool,
+*        true if found a valid app_type and fill the QoS values
+*        fail if cannot found a valid app_type
+*
+* GLOBALS AFFECTED
+*   N/A
+*****************************************************************************/
+kal_bool custom_gprs_pdp_secondary_qos_encode(custom_app_qos_type_enum app_qos_type, void * param, tcm_ps_qos_profile_struct * qos_info)
+{
+	/* for streaming application, 
+	    the param is used for bandwidth(kal_uint16) described in spec 26.234.
+	    The application should pass a kal_uint16 pointer to this function */    
+	    
+	/* for other QoS parameters, please refer to spec 26.234. Annex J
+	     "Mapping of SDP parameters to UMTS QoS parameters" 
+	     This function provide the SPEC recommendation QoS value to streaming application */
+	    
+	if (app_qos_type == CUSTOM_APP_QOS_STREAMING)
+	{
+		kal_bool    ret;
+		kal_uint32 guarantee_downlink_rate;
+		kal_uint32 maximum_downlink_rate;
+		kal_uint32 guarantee_uplink_rate;
+		kal_uint32 maximum_uplink_rate;
+
+		kal_uint32 bandwidth = (*(kal_uint16*)param);;
+		
+		kal_mem_set(&(qos_info->req_qos), 0, sizeof(nvram_editor_qos_struct));
+		kal_mem_set(&(qos_info->min_qos), 0, sizeof(nvram_editor_qos_struct));
+		qos_info->req_qos.qos_length = SM_QOS_LEN_20;
+		qos_info->min_qos.qos_length = SM_QOS_LEN_20;        
+		
+		qos_info->req_qos.delivery_of_err_sdu = DELIVERY_OF_ERR_NO; // encode into 24.008 Table 10.5.156 format
+		qos_info->req_qos.delivery_order = WITHOUT_DELIVERY_ORDER; // encode into 24.008 Table 10.5.156 format
+		qos_info->req_qos.traffic_class = STREAMING_CLASS; // encode into 24.008 Table 10.5.156 format
+		qos_info->req_qos.max_sdu_size = 0x8C; //1400 bytes (encode into 24.008 Table 10.5.156 format)
+
+		ret = l4ctcm_encode_bit_rate( 
+                                                              #ifndef __REL6__
+                                                              (kal_uint16)(bandwidth * 1.025), 
+                                                              #else // #ifndef __REL6__
+                                                              (kal_uint32)(bandwidth * 1.025), 
+                                                              #endif // ~ #ifndef __REL6__
+                                                              &guarantee_downlink_rate); // encode the decimal format of downlink rate into 24.008 Table 10.5.156 format
+		if (ret == KAL_FALSE)
+		{
+                        #ifndef __REL6__
+			guarantee_downlink_rate = 0xFE; //maximum value 
+                        #else // ~ #ifndef __REL6__
+			guarantee_downlink_rate = 250<<8; //maximum value 
+                        #endif // ~ #ifndef __REL6__
+		}
+
+		ret = l4ctcm_encode_bit_rate( 
+                                                              #ifndef __REL6__
+                                                              (kal_uint16)(bandwidth * 1.025 * STREAMING_REQUESTED_MAXIMUM_BITRATE_SCALE_NUMBER), 
+                                                              #else // #ifndef __REL6__
+                                                              (kal_uint32)(bandwidth * 1.025 * STREAMING_REQUESTED_MAXIMUM_BITRATE_SCALE_NUMBER), 
+                                                              #endif // ~ #ifndef __REL6__
+                                                              &maximum_downlink_rate); // encode the decimal format of downlink rate into 24.008 Table 10.5.156 format
+		if (ret == KAL_FALSE)
+		{
+                        #ifndef __REL6__
+			maximum_downlink_rate = 0xFE; //maximum value 
+                        #else // ~ #ifndef __REL6__
+			maximum_downlink_rate = 250<<8; //maximum value 
+                        #endif // ~ #ifndef __REL6__
+		}
+
+		ret = l4ctcm_encode_bit_rate( 
+                                                              #ifndef __REL6__
+                                                              (kal_uint16)(bandwidth * 0.025), 
+                                                              #else // #ifndef __REL6__
+                                                              (kal_uint32)(bandwidth * 0.025), 
+                                                              #endif // ~ #ifndef __REL6__
+                                                              &guarantee_uplink_rate); // encode the decimal format of uplink rate into 24.008 Table 10.5.156 format
+		if (ret == KAL_FALSE)
+		{
+                        #ifndef __REL6__
+			guarantee_uplink_rate = 0xFE; //maximum value 
+                        #else // ~ #ifndef __REL6__
+			guarantee_uplink_rate = 250<<8; //maximum value 
+                        #endif // ~ #ifndef __REL6__
+		}		
+
+		ret = l4ctcm_encode_bit_rate( 
+                                                              #ifndef __REL6__
+                                                              (kal_uint16)(bandwidth * 0.025 * STREAMING_REQUESTED_MAXIMUM_BITRATE_SCALE_NUMBER), 
+                                                              #else // #ifndef __REL6__
+                                                              (kal_uint32)(bandwidth * 0.025 * STREAMING_REQUESTED_MAXIMUM_BITRATE_SCALE_NUMBER), 
+                                                              #endif // ~ #ifndef __REL6__
+                                                              &maximum_uplink_rate); // encode the decimal format of uplink rate into 24.008 Table 10.5.156 format
+		if (ret == KAL_FALSE)
+		{
+                        #ifndef __REL6__
+			maximum_uplink_rate = 0xFE; //maximum value 
+                        #else // ~ #ifndef __REL6__
+			maximum_uplink_rate = 250<<8; //maximum value 
+                        #endif // ~ #ifndef __REL6__
+		}		
+
+		qos_info->req_qos.guarntd_bit_rate_down_lnk = (kal_uint8)guarantee_downlink_rate;
+		qos_info->req_qos.guarntd_bit_rate_up_lnk = (kal_uint8)guarantee_uplink_rate;
+		qos_info->req_qos.ext_guarntd_bit_rate_down_lnk = (kal_uint8)(guarantee_downlink_rate>>8);
+		qos_info->req_qos.ext_guarntd_bit_rate_up_lnk = (kal_uint8)(guarantee_uplink_rate>>8);        
+		qos_info->req_qos.ext2_guarntd_bit_rate_down_lnk = (kal_uint8)(guarantee_downlink_rate>>16);
+		qos_info->req_qos.ext2_guarntd_bit_rate_up_lnk = (kal_uint8)(guarantee_uplink_rate>>16);        		
+		qos_info->req_qos.max_bitrate_down_lnk = (kal_uint8)maximum_downlink_rate; // refer to 24.008 Table 10.5.156
+		qos_info->req_qos.max_bitrate_up_lnk 	 = (kal_uint8)maximum_uplink_rate; // refer to 24.008 Table 10.5.156
+		qos_info->req_qos.ext_max_bitrate_down_lnk = (kal_uint8)(maximum_downlink_rate>>8); // refer to 24.008 Table 10.5.156
+		qos_info->req_qos.ext_max_bitrate_up_lnk 	 = (kal_uint8)(maximum_uplink_rate>>8); // refer to 24.008 Table 10.5.156
+		qos_info->req_qos.ext2_max_bitrate_down_lnk = (kal_uint8)(maximum_downlink_rate>>16); // refer to 24.008 Table 10.5.156
+		qos_info->req_qos.ext2_max_bitrate_up_lnk 	 = (kal_uint8)(maximum_uplink_rate>>16); // refer to 24.008 Table 10.5.156
+
+
+		qos_info->req_qos.residual_bit_err_rate = BIT_ERROR_RATE7; //7: 10-5 (refer to 24.008 Table 10.5.156)
+		qos_info->req_qos.sdu_err_ratio = SDU_ERR_RATIO4; //4: 10-4 (refer to 24.008 Table 10.5.156)
+		qos_info->req_qos.traffic_hndl_priority = SUBSCRIBED_TRAFFIC_HNDL_PRIORITY; // encode into 24.008 Table 10.5.156 format
+		qos_info->req_qos.transfer_delay = 0x2A; // 101010 : 2000 ms (refer to 24.008 Table 10.5.156)
+
+                tcm_qos_R99_to_R98((qos_struct *)(&(qos_info->req_qos)), TCM_REQ_QOS); // fill R98 QoS field according to R99 values
+
+
+             kal_trace(TCM_CONTROL_PLANE_TRACE_GROUP, TCM_STREAMING_REQUEST_SECONDARY_BITRATE_BEFORE_ENCODE);
+             #ifndef __REL6__
+             kal_trace(TCM_CONTROL_PLANE_TRACE_GROUP, TCM_STREAMING_REQUEST_BITRATE_VALUE_BEFORE_ENCODE, 
+                                                     (kal_uint16)(bandwidth * 1.025), 
+                                                     (kal_uint16)(bandwidth * 1.025 * STREAMING_REQUESTED_MAXIMUM_BITRATE_SCALE_NUMBER),
+                                                     (kal_uint16)(bandwidth * 0.025), 
+                                                     (kal_uint16)(bandwidth * 0.025 * STREAMING_REQUESTED_MAXIMUM_BITRATE_SCALE_NUMBER));
+             #else // #ifndef __REL6__
+             kal_trace(TCM_CONTROL_PLANE_TRACE_GROUP, TCM_STREAMING_REQUEST_BITRATE_VALUE_BEFORE_ENCODE, 
+                                                     (kal_uint32)(bandwidth * 1.025), 
+                                                     (kal_uint32)(bandwidth * 1.025 * STREAMING_REQUESTED_MAXIMUM_BITRATE_SCALE_NUMBER),
+                                                     (kal_uint32)(bandwidth * 0.025), 
+                                                     (kal_uint32)(bandwidth * 0.025 * STREAMING_REQUESTED_MAXIMUM_BITRATE_SCALE_NUMBER));
+             #endif // ~ #ifndef __REL6__
+
+             kal_trace(TCM_CONTROL_PLANE_TRACE_GROUP, TCM_STREAMING_REQUEST_SECONDARY_BITRATE_AFTER_ENCODE);
+             kal_trace(TCM_CONTROL_PLANE_TRACE_GROUP, TCM_STREAMING_GUARANTEE_BIT_RATE_AFTER_ENCODE,(kal_uint8)guarantee_downlink_rate, (kal_uint8)guarantee_uplink_rate);
+             kal_trace(TCM_CONTROL_PLANE_TRACE_GROUP, TCM_STREAMING_EXT_GUARANTEE_BIT_RATE_AFTER_ENCODE, (kal_uint8)(guarantee_downlink_rate>>8), (kal_uint8)(guarantee_uplink_rate>>8));
+             kal_trace(TCM_CONTROL_PLANE_TRACE_GROUP, TCM_STREAMING_MAX_BIT_RATE_AFTER_ENCODE, (kal_uint8)maximum_downlink_rate, (kal_uint8)maximum_uplink_rate);
+             kal_trace(TCM_CONTROL_PLANE_TRACE_GROUP, TCM_STREAMING_EXT_MAX_BIT_RATE_AFTER_ENCODE, (kal_uint8)(maximum_downlink_rate>>8), (kal_uint8)(maximum_uplink_rate>>8));
+
+
+                return KAL_TRUE;
+	}
+
+        return KAL_FALSE;
+}
+#endif // ~ #ifdef __APP_SECONDARY_PDP_SUPPORT__
+
+/*************************************************************************
+ * This custom array can be used by our customers to enable Subscribed QOS for PDP 
+    when UE is camped on the below HPLMN.
+ * 
+ *   Ex: CUSTOM_USE_SM_QOS_SUBSCRIBED_FOR_PLMN[] = 
+ *           {"26006F","46689F",CUSTOM_PLMN_END}         
+ *************************************************************************/
+
+const char *CUSTOM_USE_SM_QOS_SUBSCRIBED_FOR_PLMN[] = {"26006F", CUSTOM_PLMN_END};
+
+/*************************************************************************
+ * * SM shall take MSPM_SM_ACT_PDP_TOP priority for first PDP activation session 
+      in 3G if the PLMN is listed in the below custom PLMN array list
+
+ * 
+ *   Ex:  CUSTOM_USE_SM_FIRST_PDP_SESSION_ACTIVATION_TOP_IN_3G_FOR_PLMN[] = 
+          {"46001F", CUSTOM_PLMN_END}       
+ *************************************************************************/
+
+const char *CUSTOM_USE_SM_FIRST_PDP_SESSION_ACTIVATION_TOP_IN_3G_FOR_PLMN[] = {"46001F", CUSTOM_PLMN_END};
+
+#ifdef __TC10__
+/*************************************************************************
+ * This custom array can be used by our customers to add mcc-mnc of sim which is not
+    required to be checked for FDN Restriction
+ *   Ex: CUSTOM_FDN_CHECK_NOT_NEEDED_IN_SIM_PLMNS[] =
+ *           {"21407",CUSTOM_PLMN_END}         
+ *************************************************************************/
+
+const kal_char *CUSTOM_FDN_CHECK_NOT_NEEDED_IN_SIM_PLMNS[] = { 
+    "21407",
+    /* Add new sim plmn before this line. */
+    CUSTOM_PLMN_END
+} ;
+#endif
+
+kal_bool custom_need_to_modify_user_configured_qos_delivery_order_value(pdp_addr_type_enum pdp_type, kal_bool is_use_test_sim, kal_uint8 * suggested_value, protocol_id_enum sim_idx, kal_bool is_qos_subscribed)
+{
+    /*
+     * According to TS 23.107 v5.13.0 Clause 6.4.3.1
+     * Delivery order should be set to "no" for PDP Type = "IPv4" or "IPv6". The SGSN should ensure that the appropriate value is set
+     */
+    if((KAL_TRUE == sbp_query_md_feature_by_ps(SBP_USE_SM_QOS_SUBSCRIBED, sim_idx)) ||(KAL_TRUE == is_qos_subscribed))
+	{
+        return KAL_FALSE; // we do not suggest to modify user configured delivery_order
+    }
+    
+    if((PPP_ADDR_TYPE != pdp_type) && (KAL_FALSE == is_use_test_sim ) && 
+        (query_ps_conf_test_mode() != PS_CONF_TEST_IOT ) )
+    {
+        *suggested_value = WITHOUT_DELIVERY_ORDER;        
+        return KAL_TRUE; // we suggest to modify user configured delivery_order
+    }
+    else
+    {
+        return KAL_FALSE; // we do not suggest to modify user configured delivery_order
+    }
+}
+
+kal_bool custom_need_to_regard_realtime_qos_as_non_realtime_qos(void) {
+
+#ifndef __SM_REGARD_REALTIME_QOS_AS_NON_REALTIME_QOS__ // need to turn on this option to pass AT&T ADAPT [GSM-BTR-1-5160][GSM-BTR-1-5162][GSM-BTR-1-5154] test case
+    if (  ( query_ps_conf_test_mode() == PS_CONF_TEST_OPERATOR ) &&
+          ( query_ps_conf_test_profile_setting() & OPERATOR_TEST_ATNT) )  {
+        return KAL_TRUE;
+    } else {
+        return KAL_FALSE;
+    }
+#else // #ifndef __SM_REGARD_REALTIME_QOS_AS_NON_REALTIME_QOS__
+    return KAL_TRUE;
+#endif // ~ #ifndef __SM_REGARD_REALTIME_QOS_AS_NON_REALTIME_QOS__
+
+}
+
+kal_uint32 sm_get_custom_T3380_activation_timer(kal_uint8 sim_idx)
+{
+   return SM_CUSTOM_PDP_ACTIVATION_RETRY_T3380_TIMER_VALUE;
+}
+
+kal_bool custom_allow_pdp_activation_trigger_23g_gmm_attach(kal_uint8 sim_idx) {
+    /*  if SBP turn on force allow -> return KAL_TRUE
+     *  else if FTA mode or Test Sim -> return KAL_TRUE
+     *  
+     */
+
+    if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_ALLOW_PDP_ACTIVATION_TRIGGER_23G_GMM_ATTACH, (protocol_id_enum)sim_idx))
+    {
+        return KAL_TRUE; 
+    } 
+    else if(PS_CONF_TEST_FTA == test_mode_consider_sim(sim_idx))
+    {
+        return KAL_TRUE; 
+    }
+
+    return KAL_FALSE;
+}
+
+/**********************************************************************************************************************
+* FUNCTION
+*   custom_enable_signalling_indication_in_pdp_activation_for_specific_operator
+* DESCRIPTION
+*   If customer wants to enable signalling_indication flag in PDP activation request
+*   for specific operator, then customer should add the operator id in this function and ensure KAL_TRUE is returned.
+* 
+* PARAMETERS
+*    Operator ID.         
+* RETURNS
+*   kal_bool,
+*        KAL_TRUE, if signalling indication is enabled for specific operator.
+*        KAL_FALSE, if signalling indication is not enabled for specific operator.
+*
+* GLOBALS AFFECTED
+*   N/A 
+*************************************************************************************************************************/
+kal_bool custom_enable_signalling_indication_in_pdp_activation_for_specific_operator(kal_uint32 cur_operator) {
+
+    kal_bool ret = KAL_FALSE;
+    switch(cur_operator)
+	{
+        case CUSTOM_SIGNALLING_INDICATION_FLAG_FOR_BOUYGUES_OPERATOR_ID:{
+            ret = KAL_TRUE;
+            break;
+        }
+		
+        default:{
+            ret = KAL_FALSE;
+            break;
+        }	
+	}
+    return ret;
+}
+
+#if 0 /* Move to custom_tcm_bcm_is_testing() */
+/* under construction !*/
+/* under construction !*/
+#ifdef __NRSPCA__
+/* under construction !*/
+/* under construction !*/
+#else // #ifdef __NRSPCA__
+    #ifdef __REL7__
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+    #endif // ~ #ifdef __REL7__
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif // ~ #ifdef __NRSPCA__
+/* under construction !*/
+/* under construction !*/
+#endif 
+
+#if 0 /* Move to custom_tcm_etft_is_testing */
+/* under construction !*/
+/* under construction !*/
+    #if 1//def __REL7__
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+    #endif // ~ #ifdef __REL7__
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif 
+
+#endif // ~ #ifdef __MOD_TCM__
diff --git a/mcu/custom/protocol/common/ps/custom_gprs_pdp_config.h b/mcu/custom/protocol/common/ps/custom_gprs_pdp_config.h
new file mode 100644
index 0000000..f64b5fe
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_gprs_pdp_config.h
@@ -0,0 +1,106 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_gprs_pdp_config.h
+ *
+ * Project:
+ * --------
+ *   MAUI Project
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the GPRS PDP context related configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *******************************************************************************/
+#ifndef _CUSTOM_GPRS_PDP_CONFIG_H
+#define _CUSTOM_GPRS_PDP_CONFIG_H
+
+
+
+#include "ps_public_enum.h"
+
+//------------------------------ suggest Add ------------------------------    
+#include "kal_general_types.h"    
+#include "kal_public_api.h"    
+#include "kal_trace.h"
+
+#ifdef __APP_SECONDARY_PDP_SUPPORT__
+//------------------------------ suggest Add ------------------------------    
+#include "custom_data_account.h"    
+#include "kal_general_types.h"    
+#include "l4c2abm_struct.h"
+
+#include "tcm_api.h"
+
+/* Note: l4c_gprs_qos_info_struct has been modified to tcm_ps_qos_profile_struct */
+extern kal_bool custom_gprs_pdp_secondary_qos_encode(custom_app_qos_type_enum app_qos_type, void * param, tcm_ps_qos_profile_struct * qos_info);
+#endif // ~ #ifdef __APP_SECONDARY_PDP_SUPPORT__
+
+/****************************************************************************
+Operator ID for BOUYGUES Operator is 139. 
+*****************************************************************************/
+#define CUSTOM_SIGNALLING_INDICATION_FLAG_FOR_BOUYGUES_OPERATOR_ID 139
+
+#define CUSTOM_PLMN_END "FFFFFF"
+
+extern const char *CUSTOM_USE_SM_QOS_SUBSCRIBED_FOR_PLMN[];
+extern const char *CUSTOM_USE_SM_FIRST_PDP_SESSION_ACTIVATION_TOP_IN_3G_FOR_PLMN[];
+
+#ifdef __TC10__
+extern const char *CUSTOM_FDN_CHECK_NOT_NEEDED_IN_SIM_PLMNS[];
+#endif //__TC10__
+
+extern kal_bool custom_need_to_modify_user_configured_qos_delivery_order_value(pdp_addr_type_enum pdp_type, kal_bool is_use_test_sim, kal_uint8 * suggested_value, protocol_id_enum sim_idx, kal_bool is_qos_subscribed);
+extern kal_bool custom_need_to_regard_realtime_qos_as_non_realtime_qos(void);
+extern kal_bool custom_allow_pdp_activation_trigger_23g_gmm_attach(kal_uint8 sim_idx);
+extern kal_uint32 sm_get_custom_T3380_activation_timer(kal_uint8 sim_idx);
+extern kal_bool custom_enable_signalling_indication_in_pdp_activation_for_specific_operator(kal_uint32 cur_operator);
+
+// extern kal_bool custom_check_if_support_nrspca(void);
+// extern kal_bool custom_check_if_support_etft(void);
+
+//extern kal_uint8 custom_query_qos_reliability_class(void);
+//extern kal_uint8 custom_query_qos_sdu_error_ratio(void);    
+
+#endif /* _CUSTOM_GPRS_PDP_CONFIG_H */ 
+
diff --git a/mcu/custom/protocol/common/ps/custom_gprs_pdp_default_qos_config.h b/mcu/custom/protocol/common/ps/custom_gprs_pdp_default_qos_config.h
new file mode 100644
index 0000000..b46b9e9
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_gprs_pdp_default_qos_config.h
@@ -0,0 +1,191 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_gprs_pdp_default_qos_config.h
+ *
+ * Project:
+ * --------
+ *   MAUI Project
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the GPRS default PDP context qos setting
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+#ifndef _CUSTOM_GPRS_PDP_DEFAULT_QOS_CONFIG_H
+#define _CUSTOM_GPRS_PDP_DEFAULT_QOS_CONFIG_H
+
+#define PS_QOS_PROFILE_DEFAULT_REQ_LENGTH (16) // please do not modify this before consulting with MTK
+#define PS_QOS_PROFILE_DEFAULT_REQ_UNUSED_1 (0) // please do not modify this
+#define PS_QOS_PROFILE_DEFAULT_REQ_DELAY_CLASS (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_PEAK_THROUGHPUT (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_UNUSED_2 (0) // please do not modify this
+#define PS_QOS_PROFILE_DEFAULT_REQ_PRECEDENCE_CLASS (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_UNUSED_3 (0) // please do not modify this
+
+#define PS_QOS_PROFILE_DEFAULT_REQ_TRAFFIC_CLASS (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_DELIVERY_ORDER (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_DELIVERY_OF_ERR_SDU (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_MAX_SDU_SIZE (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_MAX_BIT_RATE_UPLINK (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_MAX_BIT_RATE_DOWNLINK (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_RESIDUAL_BIT_ERROR_RATE (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_TRANSFER_DELAY (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_TRAFFIC_HNDL_PRIORITY (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_GUARANTEED_BIT_RATE_UPLINK (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_GUARANTEED_BIT_RATE_DOWNLINK (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_UNUSED_4 (0) // please do not modify this
+#define PS_QOS_PROFILE_DEFAULT_REQ_SIGNALING_INDICATION (0) // please do not modify this before consulting with MTK
+#define PS_QOS_PROFILE_DEFAULT_REQ_SOURCE_STAT_DESCPTOR (0) // please do not modify this before consulting with MTK
+#define PS_QOS_PROFILE_DEFAULT_REQ_EXT_MAX_BIT_RATE_DONW_LINK (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_EXT_GUARANTEED_BIT_RATE_DONW_LINK (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_EXT_MAX_BIT_RATE_UP_LINK (0)
+#define PS_QOS_PROFILE_DEFAULT_REQ_EXT_GUARANTEED_BIT_RATE_UP_LINK (0)
+
+//mtk04121
+#define PS_QOS_PROFILE_DEFAULT_REQ_QCI (9) //please do not modify this
+#define PS_QOS_PROFILE_DEFAULT_REQ_EXT2_MAX_BIT_RATE_UP_LINK (0) //please do not modify this
+#define PS_QOS_PROFILE_DEFAULT_REQ_EXT2_MAX_BIT_RATE_DONW_LINK (0) //please do not modify this
+#define PS_QOS_PROFILE_DEFAULT_REQ_EXT2_GUARANTEED_BIT_RATE_UP_LINK (0) //please do not modify this
+#define PS_QOS_PROFILE_DEFAULT_REQ_EXT2_GUARANTEED_BIT_RATE_DONW_LINK (0) //please do not modify this
+
+#define PS_QOS_PROFILE_DEFAULT_MIN_LENGTH (16) // please do not modify this before consulting with MTK
+#define PS_QOS_PROFILE_DEFAULT_MIN_UNUSED_1 (0) // please do not modify this
+#define PS_QOS_PROFILE_DEFAULT_MIN_DELAY_CLASS (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_RELIABILITY_CLASS (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_PEAK_THROUGHPUT (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_UNUSED_2 (0) // please do not modify this
+#define PS_QOS_PROFILE_DEFAULT_MIN_PRECEDENCE_CLASS (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_UNUSED_3 (0) // please do not modify this
+#define PS_QOS_PROFILE_DEFAULT_MIN_MEAN_THROUGHPUT (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_TRAFFIC_CLASS (4)
+#define PS_QOS_PROFILE_DEFAULT_MIN_DELIVERY_ORDER (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_DELIVERY_OF_ERR_SDU (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_MAX_SDU_SIZE (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_MAX_BIT_RATE_UPLINK (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_MAX_BIT_RATE_DOWNLINK (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_RESIDUAL_BIT_ERROR_RATE (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_SDU_ERROR_RATIO (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_TRANSFER_DELAY (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_TRAFFIC_HNDL_PRIORITY (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_GUARANTEED_BIT_RATE_UPLINK (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_GUARANTEED_BIT_RATE_DOWNLINK (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_UNUSED_4 (0) // please do not modify this
+#define PS_QOS_PROFILE_DEFAULT_MIN_SIGNALING_INDICATION (0) // please do not modify this before consulting with MTK
+#define PS_QOS_PROFILE_DEFAULT_MIN_SOURCE_STAT_DESCPTOR (0) // please do not modify this before consulting with MTK
+#define PS_QOS_PROFILE_DEFAULT_MIN_EXT_MAX_BIT_RATE_DONW_LINK (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_EXT_GUARANTEED_BIT_RATE_DONW_LINK (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_EXT_MAX_BIT_RATE_UP_LINK (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_EXT_GUARANTEED_BIT_RATE_UP_LINK (0)
+#define PS_QOS_PROFILE_DEFAULT_MIN_EXT2_MAX_BIT_RATE_UP_LINK (0) //please do not modify this
+#define PS_QOS_PROFILE_DEFAULT_MIN_EXT2_MAX_BIT_RATE_DONW_LINK (0) //please do not modify this
+#define PS_QOS_PROFILE_DEFAULT_MIN_EXT2_GUARANTEED_BIT_RATE_UP_LINK (0) //please do not modify this
+#define PS_QOS_PROFILE_DEFAULT_MIN_EXT2_GUARANTEED_BIT_RATE_DONW_LINK (0) //please do not modify this
+
+#endif /* _CUSTOM_GPRS_PDP_DEFAULT_QOS_CONFIG_H */ 
+
diff --git a/mcu/custom/protocol/common/ps/custom_gprs_pdp_value_check.c b/mcu/custom/protocol/common/ps/custom_gprs_pdp_value_check.c
new file mode 100644
index 0000000..9dc4d72
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_gprs_pdp_value_check.c
@@ -0,0 +1,544 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_gprs_pdp_config.c
+ *
+ * Project:
+ * --------
+ *   MAUI Project
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the FLC2 configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifdef __MOD_TCM__
+
+#include "custom_gprs_pdp_value_check.h"
+
+//#include "kal_release.h"
+//#include "kal_non_specific_general_types.h"
+//#include "l3_inc_enums.h"
+//#include "mmi_l3_enums.h"
+//#include "custom_mmi_default_value.h"
+#include "mcd_l3_inc_gprs_struct.h"
+//mtk04121 
+#include "ps_public_struct.h" //path: mcu/interface/modem/ps_public_struct.h
+
+//#include "common_nvram_editor_data_item.h"
+//#include "custom_data_account.h"
+
+//#include "l4c2abm_struct.h"
+
+//#include "mmi_sm_enums.h"
+
+//#include "ppp_l4_enums.h"
+
+//#include "tcm_common_enums.h"
+//#include "tcm_common.h"
+
+#include "custom_gprs_pdp_default_qos_config.h"
+
+//#include "custom_gprs_pdp_config.h"
+#include "kal_public_defs.h"
+#include "l4_ps_api.h"
+
+
+//------------------------------ suggest Add ------------------------------    
+#include "kal_general_types.h"    
+#include "kal_public_api.h"
+
+#include "ps_public_utility.h"
+#include "gmss_public.h" //for gmss_is_tdscdma_mode_activated(kal_uint8 sim_index)
+#include "event_info_utility.h"
+
+kal_uint8 custom_gprs_get_ps_qos_profile_default_req_sdu_error_ratio(kal_uint8 sim_interface)
+{
+    kal_uint8   ps_qos_profile_default_req_sdu_error_ratio;
+    //#ifndef __UMTS_TDD128_MODE__
+    if (gmss_is_tdscdma_mode_activated(sim_interface) == KAL_FALSE) {
+        if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_USE_SM_QOS_SUBSCRIBED, (protocol_id_enum)sim_interface)) {
+            ps_qos_profile_default_req_sdu_error_ratio = 0;     // please do not modify this before consulting with MTK (This is to avoid LLC ACK mode)
+        } else {
+            ps_qos_profile_default_req_sdu_error_ratio = 4;     // please do not modify this before consulting with MTK (This is to avoid LLC ACK mode)
+        }
+    } else {
+        ps_qos_profile_default_req_sdu_error_ratio = 0;     // please do not modify this before consulting with MTK (This is to avoid LLC ACK mode)
+    }
+    return ps_qos_profile_default_req_sdu_error_ratio;
+}
+
+kal_uint8 custom_gprs_get_ps_qos_profile_default_req_reliability_class(kal_uint8 sim_interface)
+{
+    kal_uint8   ps_qos_profile_default_req_reliability_class;
+    
+    if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_USE_SM_QOS_SUBSCRIBED, (protocol_id_enum)sim_interface))
+    {
+        ps_qos_profile_default_req_reliability_class = 0;   // please do not modify this before consulting with MTK (This is to avoid LLC ACK mode)
+    } 
+    else
+    {
+        ps_qos_profile_default_req_reliability_class = 3;   // please do not modify this before consulting with MTK (This is to avoid LLC ACK mode)
+    }
+    return ps_qos_profile_default_req_reliability_class;
+}
+
+//PS_QOS_PROFILE_DEFAULT_REQ_MEAN_THROUGHPUT
+//#ifdef  __UMTS_TDD128_MODE__
+//#define PS_QOS_PROFILE_DEFAULT_REQ_MEAN_THROUGHPUT (31)
+//#else
+//#define PS_QOS_PROFILE_DEFAULT_REQ_MEAN_THROUGHPUT (0)
+//#endif
+
+kal_uint8 custom_gprs_get_ps_qos_profile_default_req_mean_throughput(kal_uint8 sim_interface)
+{
+    kal_uint8   ps_qos_profile_default_req_mean_throughput;
+    
+    if (gmss_is_tdscdma_mode_activated(sim_interface) == KAL_TRUE)
+    {
+        ps_qos_profile_default_req_mean_throughput = 31;
+    } 
+    else
+    {
+        ps_qos_profile_default_req_mean_throughput = 0;
+    }
+    return ps_qos_profile_default_req_mean_throughput;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   custom_gprs_pdp_check_if_req_eqos_is_default_value
+* DESCRIPTION
+*   This function check if the EQOS fields are default values
+* 
+* GLOBALS AFFECTED
+*   N/A
+*****************************************************************************/
+kal_bool custom_gprs_pdp_check_if_eqos_is_default_value(qos_struct * s,tcm_qos_type_enum type, kal_uint8 sim_interface)
+{
+    kal_bool    is_default_value = KAL_FALSE ;
+
+    if ( (TCM_MIN_QOS == type) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_TRAFFIC_CLASS == s->traffic_class) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_DELIVERY_ORDER == s->delivery_order) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_DELIVERY_OF_ERR_SDU == s->delivery_of_err_sdu) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_MAX_SDU_SIZE == s->max_sdu_size) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_MAX_BIT_RATE_UPLINK == s->max_bitrate_up_lnk) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_MAX_BIT_RATE_DOWNLINK == s->max_bitrate_down_lnk) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_RESIDUAL_BIT_ERROR_RATE == s->residual_bit_err_rate) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_SDU_ERROR_RATIO == s->sdu_err_ratio) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_TRANSFER_DELAY == s->transfer_delay) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_TRAFFIC_HNDL_PRIORITY == s->traffic_hndl_priority) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_GUARANTEED_BIT_RATE_UPLINK == s->guarntd_bit_rate_up_lnk) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_GUARANTEED_BIT_RATE_DOWNLINK == s->guarntd_bit_rate_down_lnk) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_SIGNALING_INDICATION == s->signalling_indication) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_SOURCE_STAT_DESCPTOR == s->source_statistics_descriptor) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_EXT_MAX_BIT_RATE_DONW_LINK == s->ext_max_bitrate_down_lnk) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_EXT_GUARANTEED_BIT_RATE_DONW_LINK == s->ext_guarntd_bit_rate_down_lnk) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_EXT_MAX_BIT_RATE_UP_LINK == s->ext_max_bitrate_up_lnk) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_EXT_GUARANTEED_BIT_RATE_UP_LINK == s->ext_guarntd_bit_rate_up_lnk) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_EXT2_MAX_BIT_RATE_DONW_LINK == s->ext2_max_bitrate_down_lnk) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_EXT2_GUARANTEED_BIT_RATE_DONW_LINK == s->ext2_guarntd_bit_rate_down_lnk) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_EXT2_MAX_BIT_RATE_UP_LINK == s->ext2_max_bitrate_up_lnk) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_EXT2_GUARANTEED_BIT_RATE_UP_LINK == s->ext2_guarntd_bit_rate_up_lnk)   
+    )
+    {
+        is_default_value = KAL_TRUE ;
+    }
+    else if ( (TCM_REQ_QOS == type) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_TRAFFIC_CLASS == s->traffic_class) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_DELIVERY_ORDER == s->delivery_order) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_DELIVERY_OF_ERR_SDU == s->delivery_of_err_sdu) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_MAX_SDU_SIZE == s->max_sdu_size) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_MAX_BIT_RATE_UPLINK == s->max_bitrate_up_lnk) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_MAX_BIT_RATE_DOWNLINK == s->max_bitrate_down_lnk) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_RESIDUAL_BIT_ERROR_RATE == s->residual_bit_err_rate) 
+               && (custom_gprs_get_ps_qos_profile_default_req_sdu_error_ratio(sim_interface) == s->sdu_err_ratio) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_TRANSFER_DELAY == s->transfer_delay) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_TRAFFIC_HNDL_PRIORITY == s->traffic_hndl_priority) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_GUARANTEED_BIT_RATE_UPLINK == s->guarntd_bit_rate_up_lnk) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_GUARANTEED_BIT_RATE_DOWNLINK == s->guarntd_bit_rate_down_lnk) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_SIGNALING_INDICATION == s->signalling_indication) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_SOURCE_STAT_DESCPTOR == s->source_statistics_descriptor) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_EXT_MAX_BIT_RATE_DONW_LINK == s->ext_max_bitrate_down_lnk) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_EXT_GUARANTEED_BIT_RATE_DONW_LINK == s->ext_guarntd_bit_rate_down_lnk) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_EXT_MAX_BIT_RATE_UP_LINK == s->ext_max_bitrate_up_lnk) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_EXT_GUARANTEED_BIT_RATE_UP_LINK == s->ext_guarntd_bit_rate_up_lnk) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_EXT2_MAX_BIT_RATE_DONW_LINK == s->ext2_max_bitrate_down_lnk) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_EXT2_GUARANTEED_BIT_RATE_DONW_LINK == s->ext2_guarntd_bit_rate_down_lnk) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_EXT2_MAX_BIT_RATE_UP_LINK == s->ext2_max_bitrate_up_lnk) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_EXT2_GUARANTEED_BIT_RATE_UP_LINK == s->ext2_guarntd_bit_rate_up_lnk)
+    )
+    {
+        is_default_value = KAL_TRUE ;
+    }
+
+    return is_default_value ; 
+}
+
+/*****************************************************************************
+* FUNCTION
+*   custom_gprs_pdp_check_if_req_qos_is_default_value
+* DESCRIPTION
+*   This function check if the QOS fields are default values
+* 
+* GLOBALS AFFECTED
+*   N/A
+*****************************************************************************/
+kal_bool custom_gprs_pdp_check_if_qos_is_default_value(qos_struct * s, tcm_qos_type_enum type, kal_uint8 sim_interface)
+{
+    kal_bool    is_default_value = KAL_FALSE ;
+    
+    if ( (TCM_MIN_QOS == type) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_DELAY_CLASS == s->delay_class)
+          && (PS_QOS_PROFILE_DEFAULT_MIN_RELIABILITY_CLASS == s->reliability_class) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_PEAK_THROUGHPUT == s->peak_throughput) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_PRECEDENCE_CLASS == s->precedence_class) 
+          && (PS_QOS_PROFILE_DEFAULT_MIN_MEAN_THROUGHPUT == s->mean_throughput) )
+    {
+        is_default_value = KAL_TRUE ;
+    }
+    else if ( (TCM_REQ_QOS == type) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_DELAY_CLASS == s->delay_class)
+               && (custom_gprs_get_ps_qos_profile_default_req_reliability_class(sim_interface) == s->reliability_class) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_PEAK_THROUGHPUT == s->peak_throughput) 
+               && (PS_QOS_PROFILE_DEFAULT_REQ_PRECEDENCE_CLASS == s->precedence_class) 
+               && (custom_gprs_get_ps_qos_profile_default_req_mean_throughput(sim_interface) == s->mean_throughput) )
+    {
+        is_default_value = KAL_TRUE ;
+    }
+    
+	return is_default_value ;
+}
+
+void custom_gprs_pdp_reset_qos_values_to_default_values(qos_struct * qos_p, tcm_qos_type_enum type, kal_uint8 sim_interface)
+{
+	if(TCM_MIN_QOS == type)
+	{
+        qos_p->qos_length =                     PS_QOS_PROFILE_DEFAULT_MIN_LENGTH;
+        qos_p->unused1 =                        PS_QOS_PROFILE_DEFAULT_MIN_UNUSED_1;
+        qos_p->delay_class =                    PS_QOS_PROFILE_DEFAULT_MIN_DELAY_CLASS;
+        qos_p->reliability_class =              PS_QOS_PROFILE_DEFAULT_MIN_RELIABILITY_CLASS;
+        qos_p->peak_throughput =                PS_QOS_PROFILE_DEFAULT_MIN_PEAK_THROUGHPUT;
+        qos_p->unused2 =                        PS_QOS_PROFILE_DEFAULT_MIN_UNUSED_2;
+        qos_p->precedence_class =               PS_QOS_PROFILE_DEFAULT_MIN_PRECEDENCE_CLASS;
+        qos_p->unused3 =                        PS_QOS_PROFILE_DEFAULT_MIN_UNUSED_3;
+        qos_p->mean_throughput =                PS_QOS_PROFILE_DEFAULT_MIN_MEAN_THROUGHPUT;
+        qos_p->traffic_class =                  PS_QOS_PROFILE_DEFAULT_MIN_TRAFFIC_CLASS;
+        qos_p->delivery_order =                 PS_QOS_PROFILE_DEFAULT_MIN_DELIVERY_ORDER;
+        qos_p->delivery_of_err_sdu =            PS_QOS_PROFILE_DEFAULT_MIN_DELIVERY_OF_ERR_SDU;
+        qos_p->max_sdu_size =                   PS_QOS_PROFILE_DEFAULT_MIN_MAX_SDU_SIZE;
+        qos_p->max_bitrate_up_lnk =             PS_QOS_PROFILE_DEFAULT_MIN_MAX_BIT_RATE_UPLINK;
+        qos_p->max_bitrate_down_lnk =           PS_QOS_PROFILE_DEFAULT_MIN_MAX_BIT_RATE_DOWNLINK;
+        qos_p->residual_bit_err_rate =          PS_QOS_PROFILE_DEFAULT_MIN_RESIDUAL_BIT_ERROR_RATE;
+        qos_p->sdu_err_ratio =                  PS_QOS_PROFILE_DEFAULT_MIN_SDU_ERROR_RATIO;
+        qos_p->transfer_delay =                 PS_QOS_PROFILE_DEFAULT_MIN_TRANSFER_DELAY;
+        qos_p->traffic_hndl_priority =          PS_QOS_PROFILE_DEFAULT_MIN_TRAFFIC_HNDL_PRIORITY;
+        qos_p->guarntd_bit_rate_up_lnk =        PS_QOS_PROFILE_DEFAULT_MIN_GUARANTEED_BIT_RATE_UPLINK;
+        qos_p->guarntd_bit_rate_down_lnk =      PS_QOS_PROFILE_DEFAULT_MIN_GUARANTEED_BIT_RATE_DOWNLINK;
+        qos_p->unused4 =                        PS_QOS_PROFILE_DEFAULT_MIN_UNUSED_4;
+        qos_p->signalling_indication =          PS_QOS_PROFILE_DEFAULT_MIN_SIGNALING_INDICATION;
+        qos_p->source_statistics_descriptor =   PS_QOS_PROFILE_DEFAULT_MIN_SOURCE_STAT_DESCPTOR;
+        qos_p->ext_max_bitrate_down_lnk =       PS_QOS_PROFILE_DEFAULT_MIN_EXT_MAX_BIT_RATE_DONW_LINK;
+        qos_p->ext_guarntd_bit_rate_down_lnk =  PS_QOS_PROFILE_DEFAULT_MIN_EXT_GUARANTEED_BIT_RATE_DONW_LINK;
+        qos_p->ext_max_bitrate_up_lnk =         PS_QOS_PROFILE_DEFAULT_MIN_EXT_MAX_BIT_RATE_UP_LINK;
+        qos_p->ext_guarntd_bit_rate_up_lnk =    PS_QOS_PROFILE_DEFAULT_MIN_EXT_GUARANTEED_BIT_RATE_UP_LINK;
+        qos_p->ext2_max_bitrate_down_lnk =      PS_QOS_PROFILE_DEFAULT_MIN_EXT2_MAX_BIT_RATE_DONW_LINK;
+        qos_p->ext2_guarntd_bit_rate_down_lnk = PS_QOS_PROFILE_DEFAULT_MIN_EXT2_GUARANTEED_BIT_RATE_DONW_LINK;
+        qos_p->ext2_max_bitrate_up_lnk =        PS_QOS_PROFILE_DEFAULT_MIN_EXT2_MAX_BIT_RATE_UP_LINK;
+        qos_p->ext2_guarntd_bit_rate_up_lnk =   PS_QOS_PROFILE_DEFAULT_MIN_EXT2_GUARANTEED_BIT_RATE_UP_LINK;                
+	}
+	else if(TCM_REQ_QOS == type)
+	{
+        qos_p->qos_length =                     PS_QOS_PROFILE_DEFAULT_REQ_LENGTH;
+        qos_p->unused1 =                        PS_QOS_PROFILE_DEFAULT_REQ_UNUSED_1;
+        qos_p->delay_class =                    PS_QOS_PROFILE_DEFAULT_REQ_DELAY_CLASS;
+        qos_p->reliability_class =              custom_gprs_get_ps_qos_profile_default_req_reliability_class(sim_interface);
+        qos_p->peak_throughput =                PS_QOS_PROFILE_DEFAULT_REQ_PEAK_THROUGHPUT;
+        qos_p->unused2 =                        PS_QOS_PROFILE_DEFAULT_REQ_UNUSED_2;
+        qos_p->precedence_class =               PS_QOS_PROFILE_DEFAULT_REQ_PRECEDENCE_CLASS;
+        qos_p->unused3 =                        PS_QOS_PROFILE_DEFAULT_REQ_UNUSED_3;
+        qos_p->mean_throughput =                custom_gprs_get_ps_qos_profile_default_req_mean_throughput(sim_interface);
+        qos_p->traffic_class =                  PS_QOS_PROFILE_DEFAULT_REQ_TRAFFIC_CLASS;
+        qos_p->delivery_order =                 PS_QOS_PROFILE_DEFAULT_REQ_DELIVERY_ORDER;
+        qos_p->delivery_of_err_sdu =            PS_QOS_PROFILE_DEFAULT_REQ_DELIVERY_OF_ERR_SDU;
+        qos_p->max_sdu_size =                   PS_QOS_PROFILE_DEFAULT_REQ_MAX_SDU_SIZE;
+        qos_p->max_bitrate_up_lnk =             PS_QOS_PROFILE_DEFAULT_REQ_MAX_BIT_RATE_UPLINK;
+        qos_p->max_bitrate_down_lnk =           PS_QOS_PROFILE_DEFAULT_REQ_MAX_BIT_RATE_DOWNLINK;
+        qos_p->residual_bit_err_rate =          PS_QOS_PROFILE_DEFAULT_REQ_RESIDUAL_BIT_ERROR_RATE;
+        qos_p->sdu_err_ratio =                  custom_gprs_get_ps_qos_profile_default_req_sdu_error_ratio(sim_interface);
+        qos_p->transfer_delay =                 PS_QOS_PROFILE_DEFAULT_REQ_TRANSFER_DELAY;
+        qos_p->traffic_hndl_priority =          PS_QOS_PROFILE_DEFAULT_REQ_TRAFFIC_HNDL_PRIORITY;
+        qos_p->guarntd_bit_rate_up_lnk =        PS_QOS_PROFILE_DEFAULT_REQ_GUARANTEED_BIT_RATE_UPLINK;
+        qos_p->guarntd_bit_rate_down_lnk =      PS_QOS_PROFILE_DEFAULT_REQ_GUARANTEED_BIT_RATE_DOWNLINK;
+        qos_p->unused4 =                        PS_QOS_PROFILE_DEFAULT_REQ_UNUSED_4;
+        qos_p->signalling_indication =          PS_QOS_PROFILE_DEFAULT_REQ_SIGNALING_INDICATION;
+        qos_p->source_statistics_descriptor =   PS_QOS_PROFILE_DEFAULT_REQ_SOURCE_STAT_DESCPTOR;
+        qos_p->ext_max_bitrate_down_lnk =       PS_QOS_PROFILE_DEFAULT_REQ_EXT_MAX_BIT_RATE_DONW_LINK;
+        qos_p->ext_guarntd_bit_rate_down_lnk =  PS_QOS_PROFILE_DEFAULT_REQ_EXT_GUARANTEED_BIT_RATE_DONW_LINK;
+        qos_p->ext_max_bitrate_up_lnk =         PS_QOS_PROFILE_DEFAULT_REQ_EXT_MAX_BIT_RATE_UP_LINK;
+        qos_p->ext_guarntd_bit_rate_up_lnk =    PS_QOS_PROFILE_DEFAULT_REQ_EXT_GUARANTEED_BIT_RATE_UP_LINK;
+        qos_p->ext2_max_bitrate_down_lnk =      PS_QOS_PROFILE_DEFAULT_REQ_EXT2_MAX_BIT_RATE_DONW_LINK;
+        qos_p->ext2_guarntd_bit_rate_down_lnk = PS_QOS_PROFILE_DEFAULT_REQ_EXT2_GUARANTEED_BIT_RATE_DONW_LINK;
+        qos_p->ext2_max_bitrate_up_lnk =        PS_QOS_PROFILE_DEFAULT_REQ_EXT2_MAX_BIT_RATE_UP_LINK;
+        qos_p->ext2_guarntd_bit_rate_up_lnk =   PS_QOS_PROFILE_DEFAULT_REQ_EXT2_GUARANTEED_BIT_RATE_UP_LINK;            
+	}
+	else
+	{
+		MODEM_WARNING_MESSAGE(KAL_FALSE, "[WARNING] Received Invalid QOS Type!");
+		return;
+		
+	}
+
+    
+}
+
+//mtk04121
+/*****************************************************************************
+* FUNCTION
+*   custom_gprs_pdp_reset_eps_qos_values_to_default_values
+* DESCRIPTION
+*   This function reset EPS QOS fields
+* 
+* GLOBALS AFFECTED
+*   N/A
+*****************************************************************************/
+void custom_gprs_pdp_reset_eps_qos_values_to_default_values(tcm_eps_qos_struct *eps_req_qos)
+{
+        eps_req_qos->qci =                                PS_QOS_PROFILE_DEFAULT_REQ_QCI;
+        eps_req_qos->unused1 =                            PS_QOS_PROFILE_DEFAULT_REQ_UNUSED_1;
+        eps_req_qos->unused2 =                                    PS_QOS_PROFILE_DEFAULT_REQ_UNUSED_2;
+        eps_req_qos->unused3 =                                    PS_QOS_PROFILE_DEFAULT_REQ_UNUSED_3;
+        eps_req_qos->max_bitrate_up_lnk =                   PS_QOS_PROFILE_DEFAULT_REQ_MAX_BIT_RATE_UPLINK;
+        eps_req_qos->max_bitrate_down_lnk =              PS_QOS_PROFILE_DEFAULT_REQ_MAX_BIT_RATE_DOWNLINK;
+        eps_req_qos->guarntd_bit_rate_up_lnk =            PS_QOS_PROFILE_DEFAULT_REQ_GUARANTEED_BIT_RATE_UPLINK;
+        eps_req_qos->guarntd_bit_rate_down_lnk =       PS_QOS_PROFILE_DEFAULT_REQ_GUARANTEED_BIT_RATE_DOWNLINK;
+        eps_req_qos->ext_max_bitrate_up_lnk =              PS_QOS_PROFILE_DEFAULT_REQ_EXT_MAX_BIT_RATE_UP_LINK;
+        eps_req_qos->ext_max_bitrate_down_lnk =         PS_QOS_PROFILE_DEFAULT_REQ_EXT_MAX_BIT_RATE_DONW_LINK;
+        eps_req_qos->ext_guarntd_bit_rate_up_lnk =      PS_QOS_PROFILE_DEFAULT_REQ_EXT_GUARANTEED_BIT_RATE_UP_LINK;
+        eps_req_qos->ext_guarntd_bit_rate_down_lnk = PS_QOS_PROFILE_DEFAULT_REQ_EXT_GUARANTEED_BIT_RATE_DONW_LINK;
+        eps_req_qos->ext2_max_bitrate_up_lnk =              PS_QOS_PROFILE_DEFAULT_REQ_EXT2_MAX_BIT_RATE_UP_LINK;
+        eps_req_qos->ext2_max_bitrate_down_lnk =         PS_QOS_PROFILE_DEFAULT_REQ_EXT2_MAX_BIT_RATE_DONW_LINK;
+        eps_req_qos->ext2_guarntd_bit_rate_up_lnk =      PS_QOS_PROFILE_DEFAULT_REQ_EXT2_GUARANTEED_BIT_RATE_UP_LINK;
+        eps_req_qos->ext2_guarntd_bit_rate_down_lnk = PS_QOS_PROFILE_DEFAULT_REQ_EXT2_GUARANTEED_BIT_RATE_DONW_LINK;
+}
+
+kal_bool custom_gprs_pdp_check_if_neg_qos_is_not_set(qos_struct * s)
+{
+    kal_bool    is_not_set = KAL_FALSE ;
+
+    if ( (0 == s->delay_class)
+          && (0 == s->reliability_class) 
+          && (0 == s->peak_throughput) 
+          && (0 == s->precedence_class) 
+          && (0 == s->mean_throughput)
+          && (0 == s->traffic_class) 
+          && (0 == s->delivery_order) 
+          && (0 == s->delivery_of_err_sdu) 
+          && (0 == s->max_sdu_size) 
+          && (0 == s->max_bitrate_up_lnk) 
+          && (0 == s->max_bitrate_down_lnk) 
+          && (0 == s->residual_bit_err_rate) 
+          && (0 == s->sdu_err_ratio) 
+          && (0 == s->transfer_delay) 
+          && (0 == s->traffic_hndl_priority) 
+          && (0 == s->guarntd_bit_rate_up_lnk) 
+          && (0 == s->guarntd_bit_rate_down_lnk) 
+          && (0 == s->signalling_indication) 
+          && (0 == s->source_statistics_descriptor) 
+          && (0 == s->ext_max_bitrate_down_lnk) 
+          && (0 == s->ext_guarntd_bit_rate_down_lnk) 
+          && (0 == s->ext_max_bitrate_up_lnk) 
+          && (0 == s->ext_guarntd_bit_rate_up_lnk)
+          && (0 == s->ext2_max_bitrate_up_lnk)
+          && (0 == s->ext2_max_bitrate_down_lnk)
+          && (0 == s->ext2_guarntd_bit_rate_up_lnk)
+          && (0 == s->ext2_guarntd_bit_rate_down_lnk)          
+    ) {
+        is_not_set = KAL_TRUE ;
+    }
+
+    return is_not_set;
+}
+
+kal_bool custom_gprs_pdp_check_if_neg_eps_qos_is_set(tcm_eps_qos_struct *eps_req_qos)
+{
+    kal_bool    is_set = KAL_TRUE;
+    
+    if ( (0 == eps_req_qos->qci)
+          && (0 == eps_req_qos->unused1)
+          && (0 == eps_req_qos->unused2)
+          && (0 == eps_req_qos->unused3)
+          && (0 == eps_req_qos->max_bitrate_up_lnk)
+          && (0 == eps_req_qos->max_bitrate_down_lnk)
+          && (0 == eps_req_qos->guarntd_bit_rate_up_lnk)
+          && (0 == eps_req_qos->guarntd_bit_rate_down_lnk)
+          && (0 == eps_req_qos->ext_max_bitrate_up_lnk)              
+          && (0 == eps_req_qos->ext_max_bitrate_down_lnk)
+          && (0 == eps_req_qos->ext_guarntd_bit_rate_up_lnk)
+          && (0 == eps_req_qos->ext_guarntd_bit_rate_down_lnk)
+          && (0 == eps_req_qos->ext2_max_bitrate_up_lnk)
+          && (0 == eps_req_qos->ext2_max_bitrate_down_lnk)
+          && (0 == eps_req_qos->ext2_guarntd_bit_rate_up_lnk)
+          && (0 == eps_req_qos->ext2_guarntd_bit_rate_down_lnk)
+    ) {
+        is_set = KAL_FALSE;        
+    }
+    return is_set;        
+}
+
+
+#endif // ~ #ifdef __MOD_TCM__
diff --git a/mcu/custom/protocol/common/ps/custom_gprs_pdp_value_check.h b/mcu/custom/protocol/common/ps/custom_gprs_pdp_value_check.h
new file mode 100644
index 0000000..dfc5652
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_gprs_pdp_value_check.h
@@ -0,0 +1,151 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_gprs_pdp_value_check.h
+ *
+ * Project:
+ * --------
+ *   MAUI Project
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the GPRS PDP context related configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+#ifndef _CUSTOM_GPRS_PDP_VALUE_CHECK_H
+#define _CUSTOM_GPRS_PDP_VALUE_CHECK_H
+
+//------------------------------ suggest Add ------------------------------
+//#include "kal_non_specific_general_types.h"
+#include "mcd_l3_inc_gprs_struct.h"
+//#include "tcm_common_enums.h"
+#include "tcm_api.h"
+
+#include "ps_public_enum.h"
+
+
+//------------------------------ suggest Add ------------------------------    
+#include "kal_general_types.h"
+
+//mtk04121 
+#include "ps_public_struct.h" //path: mcu/interface/modem/ps_public_struct.h
+
+extern kal_bool custom_gprs_pdp_check_if_eqos_is_default_value(qos_struct * s,tcm_qos_type_enum type, kal_uint8 sim_interface);
+extern kal_bool custom_gprs_pdp_check_if_qos_is_default_value(qos_struct * s,tcm_qos_type_enum type, kal_uint8 sim_interface);
+extern void custom_gprs_pdp_reset_qos_values_to_default_values(qos_struct * qos_p, tcm_qos_type_enum type, kal_uint8 sim_interface);
+
+//mtk04121
+extern void custom_gprs_pdp_reset_eps_qos_values_to_default_values(tcm_eps_qos_struct *eps_req_qos);
+extern kal_bool custom_gprs_pdp_check_if_neg_qos_is_not_set(qos_struct * s);
+extern kal_bool custom_gprs_pdp_check_if_neg_eps_qos_is_set(tcm_eps_qos_struct *eps_req_qos);
+
+
+#endif /* _CUSTOM_GPRS_PDP_VALUE_CHECK_H */ 
+
diff --git a/mcu/custom/protocol/common/ps/custom_idc_config.c b/mcu/custom/protocol/common/ps/custom_idc_config.c
new file mode 100644
index 0000000..c3bba64
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_idc_config.c
@@ -0,0 +1,1399 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *   custom_idc_config.c
+ *
+ * Project:
+ * --------
+ *   UMOLYA
+ *
+ * Description:
+ * ------------
+ *   Custom file for IDC solution table
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ * ===========================================================
+ * $Log$
+ *
+ * 04 01 2021 kiwi.zhang
+ * [MOLY00646546] [MT6890][Colgin][CPE][IDC][SH] during customized de-sense table verification, ul/dl unsafe bitmap value is same
+ * 	
+ * 	.
+ *
+ * 03 05 2020 alice.tsai
+ * [MOLY00503391] [MT6873][Margaux][SQC][MP2][HQ][IDC] Custom idc solution is not applied
+ * 	
+ * 	[MOLY00503391]sync custom table[EWSP0000089042]
+ *
+ * 12 09 2019 louis-tw.huang
+ * [MOLY00464640] [RF]??¦£´£¨Ñ¤@¤U5G IDC¬Û?ªº°t¸m¤å?©M?§U¡]wifi ¦@¦s¡^
+ * .
+ *
+ * 12 05 2019 louis-tw.huang
+ * [MOLY00462891] LTE B26 DLCH.6275«H¹D±¼?
+ * .
+ *
+ * 10 25 2019 louis-tw.huang
+ * [MOLY00453978] 5G NR n78/79©MWIFI 5G¦@¦sµ¦²¤
+ * .
+ *
+ * 04 02 2018 alex.chung
+ * [MOLY00316776] [MT6762] Add handling of harmonic between LTE and BT
+ * Add harmonic handling between LTE and BT
+ *
+ * 02 02 2018 alex.chung
+ * [MOLY00303487] Wifi/LTE¦@¦sÀu¤Æ¤è®×
+ * 1. Customer request to switch on/off IDC dynamically.
+ * 2. Customer request to separate WiFi and BT for IDC customization.
+ *
+ *
+ ****************************************************************************/
+
+#include "custom_idc_config.h"
+#include "custom_idc_table.h"
+
+/*******************************************************************************************************************************
+* Set to 1 when user wants to load customized IDC sidelobe LTE-WiFi solution table, default value is 0 to use table of internal phone.
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_SIDELOBE_TABLE_LTE_WIFI                 0
+
+/*******************************************************************************************************************************
+* Set to 1 when user wants to load customized IDC sidelobe NR-WiFi solution table, default value is 0 to use table of internal phone.
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_SIDELOBE_TABLE_NR_WIFI_24G              0
+
+/*******************************************************************************************************************************
+* Set to 1 when user wants to load customized IDC sidelobe NR-WiFi solution table, default value is 0 to use table of internal phone.
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_SIDELOBE_TABLE_NR_WIFI_5G               0
+
+/*******************************************************************************************************************************
+* Set to 1 when user wants to load customized IDC sidelobe LTE-BT solution table, default value is 0 to use table of internal phone.
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_SIDELOBE_TABLE_LTE_BT                   0
+
+/*******************************************************************************************************************************
+* Set to 1 when user wants to load customized IDC sidelobe NR-BT solution table, default value is 0 to use table of internal phone.
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_SIDELOBE_TABLE_NR_BT                   0
+
+/*******************************************************************************************************************************
+* Set to 1 when user wants to load customized IDC LTE and WiFi harmonic solution table, default value is 0 to use table of internal phone.
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_HARMONIC_TABLE_LTE_WIFI                 0
+
+/*******************************************************************************************************************************
+* Set to 1 when user wants to load customized IDC NR and WiFi harmonic solution table, default value is 0 to use table of internal phone.
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_HARMONIC_TABLE_NR_WIFI                 0
+
+/*******************************************************************************************************************************
+* Set to 1 when user wants to load customized IDC LTE and WiFi intermodulation solution table, default value is 0 to use table of internal phone.
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_INTERMOD_TABLE_LTE_WIFI                 0
+
+/*******************************************************************************************************************************
+* Set to 1 when user wants to load customized IDC NR and WiFi intermodulation solution table, default value is 0 to use table of internal phone.
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_INTERMOD_TABLE_NR_WIFI                 0
+
+/*******************************************************************************************************************************
+* Set to 1 when user wants to load customized IDC LTE and BT harmonic solution table, default value is 0 to use table of internal phone.
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_HARMONIC_TABLE_LTE_BT                   0
+
+/*******************************************************************************************************************************
+* Set to 1 when user wants to load customized IDC NR and BT harmonic solution table, default value is 0 to use table of internal phone.
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_HARMONIC_TABLE_NR_BT                   0
+
+/*******************************************************************************************************************************
+* Set to 1 when user wants to load customized IDC LTE and BT intermodulation solution table, default value is 0 to use table of internal phone.
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_INTERMOD_TABLE_LTE_BT                   0
+
+/*******************************************************************************************************************************
+* Set to 1 when user wants to load customized IDC NR and BT intermodulation solution table, default value is 0 to use table of internal phone.
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_INTERMOD_TABLE_NR_BT                   0
+
+/*
+ *******************************************************************************************************************************
+ * @brief      Get the flag that indicates whether users wants to load customied IDC table or not.
+ * @note      Customer should modify the model id and corresponding table acordingly.
+ * @param   index                [in]   0/1/2 indicates to read sidelobe/harmonic/intermodulation customization flag, respectively.
+ * @param   isCustomTable   [out] KAL_FALSE indicates to lod the table of internal phone. KAL_TRUE indicates to load customized table.
+ *******************************************************************************************************************************
+*/
+kal_bool el1_idc_custom_table(kal_uint8 index)
+{
+    kal_bool isCustomTable = KAL_FALSE;
+    switch (index)
+    {
+        case 0:
+        {
+            switch(md_product_model_id)
+            {
+                case 0x0F0F0F0F: // model 252645135
+                {
+                    if(CUSTOM_IDC_SIDELOBE_TABLE_LTE_WIFI == 1)
+                    {
+                        isCustomTable = KAL_TRUE;
+                    }
+                    break;
+                }
+                default:
+                {
+                    break;
+                }
+            }
+            break;
+        }
+        case 1:
+        {
+            switch(md_product_model_id)
+            {
+                case 0x0F0F0F0F: // model 252645135
+                {
+                    if(CUSTOM_IDC_SIDELOBE_TABLE_LTE_BT == 1)
+                    {
+                        isCustomTable = KAL_TRUE;
+                    }
+                    break;
+                }
+                default:
+                {
+                    break;
+                }
+            }
+            break;
+        }
+        case 2:
+        {
+            switch(md_product_model_id)
+            {
+                case 0x0F0F0F0F: // model 252645135
+                {
+                    if(CUSTOM_IDC_HARMONIC_TABLE_LTE_WIFI == 1)
+                    {
+                        isCustomTable = KAL_TRUE;
+                    }
+                    break;
+                }
+                default:
+                {
+                    break;
+                }
+            }
+            break;
+        }
+        case 3:
+        {
+            switch(md_product_model_id)
+            {
+                case 0x0F0F0F0F: // model 252645135
+                {
+                    if(CUSTOM_IDC_INTERMOD_TABLE_LTE_WIFI == 1)
+                    {
+                        isCustomTable = KAL_TRUE;
+                    }
+                    break;
+                }
+                default:
+                {
+                    break;
+                }
+            }
+            break;
+        }
+        case 4:
+        {
+            switch(md_product_model_id)
+            {
+                case 0x0F0F0F0F: // model 252645135
+                {
+                    if(CUSTOM_IDC_HARMONIC_TABLE_LTE_BT == 1)
+                    {
+                        isCustomTable = KAL_TRUE;
+                    }
+                    break;
+                }
+                default:
+                {
+                    break;
+                }
+            }
+            break;
+        }
+        case 5:
+        {
+            switch(md_product_model_id)
+            {
+                case 0x0F0F0F0F: // model 252645135
+                {
+                    if(CUSTOM_IDC_INTERMOD_TABLE_LTE_BT == 1)
+                    {
+                        isCustomTable = KAL_TRUE;
+                    }
+                    break;
+                }
+                default:
+                {
+                    break;
+                }
+            }
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return isCustomTable;
+}
+
+kal_bool nl1_idc_custom_table(kal_uint8 index)
+{
+    kal_bool isCustomTable = KAL_FALSE;
+    switch (index)
+    {
+        case 0:
+        {
+            switch(md_product_model_id)
+            {
+                case 0x0F0F0F0F: // model 252645135
+                {
+                    if(CUSTOM_IDC_SIDELOBE_TABLE_NR_WIFI_24G == 1)
+                    {
+                        isCustomTable = KAL_TRUE;
+                    }
+                    break;
+                }
+                default:
+                {
+                    break;
+                }
+            }
+            break;
+        }
+        case 1:
+        {
+            switch(md_product_model_id)
+            {
+                case 0x0F0F0F0F: // model 252645135
+                {
+                    if(CUSTOM_IDC_SIDELOBE_TABLE_NR_WIFI_5G == 1)
+                    {
+                        isCustomTable = KAL_TRUE;
+                    }
+                    break;
+                }
+                default:
+                {
+                    break;
+                }
+            }
+            break;
+        }
+        case 2:
+        {
+            switch(md_product_model_id)
+            {
+                case 0x0F0F0F0F: // model 252645135
+                {
+                    if(CUSTOM_IDC_SIDELOBE_TABLE_NR_BT == 1)
+                    {
+                        isCustomTable = KAL_TRUE;
+                    }
+                    break;
+                }
+                default:
+                {
+                    break;
+                }
+            }
+            break;
+        }
+        case 3:
+        {
+            switch(md_product_model_id)
+            {
+                case 0x0F0F0F0F: // model 252645135
+                {
+                    if(CUSTOM_IDC_HARMONIC_TABLE_NR_WIFI == 1)
+                    {
+                        isCustomTable = KAL_TRUE;
+                    }
+                    break;
+                }
+                default:
+                {
+                    break;
+                }
+            }
+            break;
+        }
+        case 4:
+        {
+            switch(md_product_model_id)
+            {
+                case 0x0F0F0F0F: // model 252645135
+                {
+                    if(CUSTOM_IDC_INTERMOD_TABLE_NR_WIFI == 1)
+                    {
+                        isCustomTable = KAL_TRUE;
+                    }
+                    break;
+                }
+                default:
+                {
+                    break;
+                }
+            }
+            break;
+        }
+        case 5:
+        {
+            switch(md_product_model_id)
+            {
+                case 0x0F0F0F0F: // model 252645135
+                {
+                    if(CUSTOM_IDC_HARMONIC_TABLE_NR_BT == 1)
+                    {
+                        isCustomTable = KAL_TRUE;
+                    }
+                    break;
+                }
+                default:
+                {
+                    break;
+                }
+            }
+            break;
+        }
+        case 6:
+        {
+            switch(md_product_model_id)
+            {
+                case 0x0F0F0F0F: // model 252645135
+                {
+                    if(CUSTOM_IDC_INTERMOD_TABLE_NR_BT == 1)
+                    {
+                        isCustomTable = KAL_TRUE;
+                    }
+                    break;
+                }
+                default:
+                {
+                    break;
+                }
+            }
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return isCustomTable;
+}
+
+/*
+ *******************************************************************************************************************************
+ * @brief     Determine if GPS need to apply Rx blanking when LTE/NR UL CC is in specific band.
+ * @param     band      [in] input target band
+ * @param     rlt        [out] whether need to apply GPS blanking
+ *******************************************************************************************************************************
+*/
+kal_bool idc_gps_blank_lte_band_determine(kal_uint16 band)
+{
+
+    if ((CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_33 == 1) && (band == 33))
+    {
+        return KAL_TRUE;
+    }
+    else if ((CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_34 == 1) && (band == 34))
+    {
+        return KAL_TRUE;
+    }
+    else if ((CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_35 == 1) && (band == 35))
+    {
+        return KAL_TRUE;
+    }
+    else if ((CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_36 == 1) && (band == 36))
+    {
+        return KAL_TRUE;
+    }
+    else if ((CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_37 == 1) && (band == 37))
+    {
+        return KAL_TRUE;
+    }
+    else if ((CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_39 == 1) && (band == 39))
+    {
+        return KAL_TRUE;
+    }
+    else if ((CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_42 == 1) && (band == 42))
+    {
+        return KAL_TRUE;
+    }
+    else if ((CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_43 == 1) && (band == 43))
+    {
+        return KAL_TRUE;
+    }
+    else if ((CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_44 == 1) && (band == 44))
+    {
+        return KAL_TRUE;
+    }
+    else if ((CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_46 == 1) && (band == 46))
+    {
+        return KAL_TRUE;
+    }
+    else
+    {
+        return KAL_FALSE;
+    }
+}
+
+kal_bool idc_gps_blank_nr_band_determine(kal_uint16 band)
+{
+
+    if ((CUSTOM_IDC_GPS_BLANK_EN_NR_BAND_41 == 1) && (band == 41))
+    {
+        return KAL_TRUE;
+    }
+    else if ((CUSTOM_IDC_GPS_BLANK_EN_NR_BAND_77 == 1) && (band == 77))
+    {
+        return KAL_TRUE;
+    }
+    else if ((CUSTOM_IDC_GPS_BLANK_EN_NR_BAND_78 == 1) && (band == 78))
+    {
+        return KAL_TRUE;
+    }
+    else if ((CUSTOM_IDC_GPS_BLANK_EN_NR_BAND_79 == 1) && (band == 79))
+    {
+        return KAL_TRUE;
+    }
+    else
+    {
+        return KAL_FALSE;
+    }
+}
+
+/*
+ *******************************************************************************************************************************
+ * @brief     Get the row size of the customized IDC table.
+ * @note      Customer should modify the model id and corresponding table acordingly.
+ * @param     consysRadio    [in]  IDC_RADIO_WIFI and IDC_RADIO_BT indicates to get table size of WiFi and BT, respectively.
+ * @param     index          [in]  0/1/2 indicates to read sidelobe/harmonic/intermodulation customization flag, respectively.
+ * @param     isDL           [in]  DL table, means (Consys is aggressor, modem is victim);UL table, means (Consys is vctim, modem is aggressor)
+ * @param     tableSize      [out] row size of correponding dl customized IDC table.
+ *******************************************************************************************************************************
+*/
+kal_uint8 el1_idc_get_custom_table_size(kal_uint8 index, kal_bool isDL)
+{
+    kal_uint8 tableSize = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(index == 0) //Get table size fo WiFi sidelobe interference type
+            {
+                if(isDL == KAL_TRUE)
+                {
+                    tableSize = CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_WIFI_DL;
+                }
+                else
+                {
+                    tableSize = CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_WIFI_UL;
+                }
+            }
+            else if(index == 1) //Get table size fo BT sidelobe interference type
+            {
+                if(isDL == KAL_TRUE)
+                {
+                    tableSize = CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_BT_DL;
+                }
+                else
+                {
+                    tableSize = CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_BT_UL;
+                }
+            }
+            else if(index == 2) //Get table size fo harmonic interference type
+            {
+                tableSize = CUSTOM_IDC_BAND_IDX_NUM_HARMONIC_LTE_WIFI;
+            }
+            else if(index == 3) //Get table size fo intermodulation interference type
+            {
+                tableSize = CUSTOM_IDC_BAND_IDX_NUM_INTERMOD_LTE_WIFI;
+            }
+            else if(index == 4) //Get table size fo harmonic interference type
+            {
+                tableSize = CUSTOM_IDC_BAND_IDX_NUM_HARMONIC_LTE_BT;
+            }
+            else if(index == 5) //Get table size fo intermodulation interference type
+            {
+                tableSize = CUSTOM_IDC_BAND_IDX_NUM_INTERMOD_LTE_BT;
+            }
+            break;
+        }
+        default:
+        {
+            tableSize = 0xFE;
+            break;
+        }
+    }
+        
+    return tableSize;
+}
+
+
+kal_uint8 nl1_idc_get_custom_table_size(kal_uint8 index,kal_bool isDL)
+{
+    kal_uint8 tableSize = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(index == 0) //Get table size fo WiFi sidelobe interference type
+            {
+                if(isDL == KAL_TRUE)
+                {
+                    tableSize = CUSTOM_IDC_BAND_IDX_NUM_24G_NR_WIFI_DL;
+                }
+                else
+                {
+                    tableSize = CUSTOM_IDC_BAND_IDX_NUM_24G_NR_WIFI_UL;
+                }
+            }
+            else if(index == 1) //Get table size fo WiFi sidelobe interference type
+            {
+                if(isDL == KAL_TRUE)
+                {
+                    tableSize = CUSTOM_IDC_BAND_IDX_NUM_5G_NR_WIFI_DL;
+                }
+                else
+                {
+                    tableSize = CUSTOM_IDC_BAND_IDX_NUM_5G_NR_WIFI_UL;
+                }
+            }
+            else if(index == 2) //Get table size fo BT sidelobe interference type
+            {
+                if(isDL == KAL_TRUE)
+                {
+                    tableSize = CUSTOM_IDC_BAND_IDX_NUM_24G_NR_BT_DL;
+                }
+                else
+                {
+                    tableSize = CUSTOM_IDC_BAND_IDX_NUM_24G_NR_BT_UL;
+                }
+            }
+            else if(index == 3) //Get table size fo harmonic interference type
+            {
+                tableSize = CUSTOM_IDC_BAND_IDX_NUM_HARMONIC_NR_WIFI;
+            }
+            else if(index == 4) //Get table size fo intermodulation interference type
+            {
+                tableSize = CUSTOM_IDC_BAND_IDX_NUM_INTERMOD_NR_WIFI;
+            }
+            else if(index == 5) //Get table size fo harmonic interference type
+            {
+                tableSize = CUSTOM_IDC_BAND_IDX_NUM_HARMONIC_NR_BT;
+            }
+            else if(index == 6) //Get table size fo intermodulation interference type
+            {
+                tableSize = CUSTOM_IDC_BAND_IDX_NUM_INTERMOD_NR_BT;
+            }
+            break;
+        }
+        default:
+        {
+            tableSize = 0xFE;
+            break;
+        }
+    }
+        
+    return tableSize;
+}
+
+
+/*
+ *******************************************************************************************************************************
+ * @brief     Get the LTE/NR frequency boundary that will have interference with WiFi.
+ * @note      Customer should modify the model id and corresponding table acordingly.
+ * @param     consysIndex      [in]   row index of CUSTOM_(LTE/NR)_(DL/UL)_FREQ_INDEX_RANGE_(24G/5G)_WIFI.
+ * @param     boundIndex       [in]   0/1 indicates to get lower/upper bound of LTE/NR frequency that will have interference with WiFi.
+ * @param     isDL             [in]  DL table, means (Consys is aggressor, modem is victim);UL table, means (Consys is vctim, modem is aggressor)
+ * @param     freqIndex        [out] LTE/NR frequency boundary that will have interference with WiFi.
+ *******************************************************************************************************************************
+*/
+kal_uint16 el1_idc_get_custom_wifi_frequency_index(kal_uint8 consysIndex, kal_uint8 boundIndex,kal_bool isDL)
+{
+    kal_uint16 freqIndex = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL ==  KAL_TRUE)
+            {
+                freqIndex = CUSTOM_LTE_DL_FREQ_INDEX_RANGE_24G_WIFI[consysIndex][boundIndex];
+            }
+            else
+            {
+                freqIndex = CUSTOM_LTE_UL_FREQ_INDEX_RANGE_24G_WIFI[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            freqIndex = 0xFE;
+            break;
+        }
+    }
+    return freqIndex;
+}
+
+kal_uint16 nl1_idc_get_custom_wifi_frequency_index(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isFiveG, kal_bool isDL)
+{
+    kal_uint16 freqIndex = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL == KAL_TRUE)
+            {
+                freqIndex = (isFiveG == KAL_FALSE) ? CUSTOM_NR_DL_FREQ_INDEX_RANGE_24G_WIFI[consysIndex][boundIndex] : CUSTOM_NR_DL_FREQ_INDEX_RANGE_5G_WIFI[consysIndex][boundIndex];
+            }
+            else
+            {
+                freqIndex = (isFiveG == KAL_FALSE) ? CUSTOM_NR_UL_FREQ_INDEX_RANGE_24G_WIFI[consysIndex][boundIndex] : CUSTOM_NR_UL_FREQ_INDEX_RANGE_5G_WIFI[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            freqIndex = 0xFE;
+            break;
+        }
+    }
+    return freqIndex;
+}
+
+/*
+ *******************************************************************************************************************************
+ * @brief     Get the WiFi frequency boundary that will have interference with LTE/NR. And either FDM, TDM or power backoff should be applied.
+ * @note      Customer should modify the model id and corresponding table acordingly.
+ * @param     consysIndex      [in]   row index of CUSTOM_(LTE/NR)_(DL/UL)_UNSAFE_FREQ_RANGE_(24G/5G)_WIFI.
+ * @param     boundIndex       [in]   0/1 indicates to get lower/upper bound of WiFi frequency that will have interference with LTE.
+ * @param     isDL             [in]   DL table, means (Consys is aggressor, modem is victim);UL table, means (Consys is vctim, modem is aggressor)
+ * @param     unsafeRange      [out]  LTE/NR frequency boundary that will have interference with WiFi.
+ *******************************************************************************************************************************
+*/
+kal_uint16 el1_idc_get_custom_wifi_all_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL)
+{
+    kal_uint16 unsafeRange = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL == KAL_TRUE)
+            {
+                unsafeRange = CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_WIFI[consysIndex][boundIndex];
+            }
+            else
+            {
+                unsafeRange = CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_WIFI[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            unsafeRange = 0xFE;
+            break;
+        }
+    }
+    return unsafeRange;
+}
+
+kal_uint16 nl1_idc_get_custom_wifi_all_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isFiveG, kal_bool isDL)
+{
+    kal_uint16 unsafeRange = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL == KAL_TRUE)
+            {
+                unsafeRange = (isFiveG == KAL_FALSE) ? CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI[consysIndex][boundIndex] : CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_5G_WIFI[consysIndex][boundIndex];
+            }
+            else
+            {
+                unsafeRange = (isFiveG == KAL_FALSE) ? CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI[consysIndex][boundIndex] : CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_5G_WIFI[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            unsafeRange = 0xFE;
+            break;
+        }
+    }
+    return unsafeRange;
+}
+
+
+/*
+ *******************************************************************************************************************************
+ * @brief     Get the WiFi frequency boundary that will have interference with LTE/NR. And FDM should be applied.
+ * @note      Customer should modify the model id and corresponding table acordingly.
+ * @param     consysIndex      [in]   row index of CUSTOM_(LTE/NR)_(DL/UL)_UNSAFE_FREQ_RANGE_(24G/5G)_WIFI_FDM.
+ * @param     boundIndex       [in]   0/1 indicates to get lower/upper bound of WiFi frequency that will have interference with LTE/NR.
+ * @param     isDL             [in]   DL table, means (Consys is aggressor, modem is victim);UL table, means (Consys is vctim, modem is aggressor)
+ * @param     unsafeRange      [out]  LTE/NR frequency boundary that will have interference with WiFi.
+ *******************************************************************************************************************************
+*/
+kal_uint16 el1_idc_get_custom_wifi_fdm_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL)
+{
+    kal_uint16 unsafeRange = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL ==  KAL_TRUE)
+            {
+                unsafeRange = CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_WIFI_FDM[consysIndex][boundIndex];
+            }
+            else
+            {
+                unsafeRange = CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_WIFI_FDM[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            unsafeRange = 0xFE;
+            break;
+        }
+    }
+    return unsafeRange;
+}
+
+kal_uint16 nl1_idc_get_custom_wifi_fdm_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isFiveG, kal_bool isDL)
+{
+    kal_uint16 unsafeRange = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL == KAL_TRUE)
+            {
+                unsafeRange = (isFiveG == KAL_FALSE) ? CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI_FDM[consysIndex][boundIndex] : CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_5G_WIFI_FDM[consysIndex][boundIndex];
+            }
+            else
+            {
+                unsafeRange = (isFiveG == KAL_FALSE) ? CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI_FDM[consysIndex][boundIndex] : CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_5G_WIFI_FDM[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            unsafeRange = 0xFE;
+            break;
+        }
+    }
+    return unsafeRange;
+}
+
+/*
+ *******************************************************************************************************************************
+ * @brief     Get the WiFi frequency boundary that will have interference with LTE/NR. And power backoff should be applied.
+ * @note      Customer should modify the model id and corresponding table acordingly.
+ * @param     consysIndex      [in]   row index of CUSTOM_(LTE/NR)_(DL/UL)_UNSAFE_FREQ_RANGE_(24G/5G)_WIFI_PWR.
+ * @param     boundIndex       [in]   0/1 indicates to get lower/upper bound of WiFi frequency that will have interference with LTE/NR.
+ * @param     isDL             [in]   DL table, means (Consys is aggressor, modem is victim);UL table, means (Consys is vctim, modem is aggressor)
+ * @param     unsafeRange      [out]  LTE/NR frequency boundary that will have interference with WiFi.
+ *******************************************************************************************************************************
+*/
+kal_uint16 el1_idc_get_custom_wifi_pwr_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL)
+{
+    kal_uint16 unsafeRange = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL)
+            {
+                unsafeRange = CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_WIFI_PWR[consysIndex][boundIndex];
+            }
+            else
+            {
+                unsafeRange = CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_WIFI_PWR[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            unsafeRange = 0xFE;
+            break;
+        }
+    }
+    return unsafeRange;
+}
+
+kal_uint16 nl1_idc_get_custom_wifi_pwr_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isFiveG, kal_bool isDL)
+{
+    kal_uint16 unsafeRange = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL == KAL_TRUE)
+            {
+                unsafeRange = (isFiveG == KAL_FALSE) ? CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI_PWR[consysIndex][boundIndex] : CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_5G_WIFI_PWR[consysIndex][boundIndex];
+            }
+            else
+            {
+                unsafeRange = (isFiveG == KAL_FALSE) ? CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI_PWR[consysIndex][boundIndex] : CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_5G_WIFI_PWR[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            unsafeRange = 0xFE;
+            break;
+        }
+    }
+    return unsafeRange;
+}
+
+/*
+ *******************************************************************************************************************************
+ * @brief      Get the WiFi frequency boundary that will have interference with LTE/NR. And TDM should be applied.
+ * @note       Customer should modify the model id and corresponding table acordingly.
+ * @param      consysIndex      [in]   row index of CUSTOM_(LTE/NR)_(DL/UL)_UNSAFE_FREQ_RANGE_(24G/5G)_WIFI_TDM.
+ * @param      boundIndex       [in]   0/1 indicates to get lower/upper bound of WiFi frequency that will have interference with LTE/NR.
+ * @param      isDl             [in]   DL table, means (Consys is aggressor, modem is victim);UL table, means (Consys is vctim, modem is aggressor)
+ * @param      unsafeRange      [out]  LTE/NR frequency boundary that will have interference with WiFi.
+ *******************************************************************************************************************************
+*/
+kal_uint16 el1_idc_get_custom_wifi_tdm_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL)
+{
+    kal_uint16 unsafeRange = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL == KAL_TRUE)
+            {
+                unsafeRange = CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM[consysIndex][boundIndex];
+            }
+            else
+            {
+                unsafeRange = CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            unsafeRange = 0xFE;
+            break;
+        }
+    }
+    return unsafeRange;
+}
+
+kal_uint16 nl1_idc_get_custom_wifi_tdm_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isFiveG, kal_bool isDL)
+{
+    kal_uint16 unsafeRange = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL ==  KAL_TRUE)
+            {
+                unsafeRange = (isFiveG == KAL_FALSE) ? CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM[consysIndex][boundIndex] : CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_5G_WIFI_TDM[consysIndex][boundIndex];
+            }
+            else
+            {
+                unsafeRange = (isFiveG == KAL_FALSE) ? CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM[consysIndex][boundIndex] : CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_5G_WIFI_TDM[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            unsafeRange = 0xFE;
+            break;
+        }
+    }
+    return unsafeRange;
+}
+
+/*
+ *******************************************************************************************************************************
+ * @brief      Get the LTE/NR frequency boundary that will have interference with BT.
+ * @note       Customer should modify the model id and corresponding table acordingly.
+ * @param      consysIndex      [in]   row index of CUSTOM_(LTE/NR)_(DL/UL)_FREQ_INDEX_RANGE_24G_BT.
+ * @param      boundIndex       [in]   0/1 indicates to get lower/upper bound of LTE/NR frequency that will have interference with BT.
+ * @param      isDL             [in]   DL table, means (Consys is aggressor, modem is victim);UL table, means (Consys is vctim, modem is aggressor)
+ * @param      freqIndex        [out]  LTE/NR frequency boundary that will have interference with BT.
+ *******************************************************************************************************************************
+*/
+kal_uint16 el1_idc_get_custom_bt_frequency_index(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL)
+{
+    kal_uint16 freqIndex = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL ==  KAL_TRUE)
+            {
+                freqIndex = CUSTOM_LTE_DL_FREQ_INDEX_RANGE_24G_BT[consysIndex][boundIndex];
+            }
+            else
+            {
+                freqIndex = CUSTOM_LTE_UL_FREQ_INDEX_RANGE_24G_BT[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            freqIndex = 0xFE;
+            break;
+        }
+    }
+    return freqIndex;
+}
+
+kal_uint16 nl1_idc_get_custom_bt_frequency_index(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL)
+{
+    kal_uint16 freqIndex = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL == KAL_TRUE)
+            {
+                freqIndex = CUSTOM_NR_DL_FREQ_INDEX_RANGE_24G_BT[consysIndex][boundIndex];
+            }
+            else
+            {
+                freqIndex = CUSTOM_NR_UL_FREQ_INDEX_RANGE_24G_BT[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            freqIndex = 0xFE;
+            break;
+        }
+    }
+    return freqIndex;
+}
+
+/*
+ *******************************************************************************************************************************
+ * @brief      Get the BT frequency boundary that will have interference with LTE/NR. And either FDM, TDM or power backoff should be applied.
+ * @note       Customer should modify the model id and corresponding table acordingly.
+ * @param      consysIndex      [in]   row index of CUSTOM_(LTE_NR)_(DL/UL)_UNSAFE_FREQ_RANGE_24G_BT.
+ * @param      boundIndex       [in]   0/1 indicates to get lower/upper bound of BT frequency that will have interference with LTE/NR.
+ * @param      isDL             [in]   DL table, means (Consys is aggressor, modem is victim);UL table, means (Consys is vctim, modem is aggressor)
+ * @param      unsafeRange      [out]  LTE/NR frequency boundary that will have interference with BT.
+ *******************************************************************************************************************************
+*/
+kal_uint16 el1_idc_get_custom_bt_all_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL)
+{
+    kal_uint16 unsafeRange = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL == KAL_TRUE)
+            {
+                unsafeRange = CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT[consysIndex][boundIndex];
+            }
+            else
+            {
+                unsafeRange = CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_BT[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            unsafeRange = 0xFE;
+            break;
+        }
+    }
+    return unsafeRange;
+}
+
+kal_uint16 nl1_idc_get_custom_bt_all_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL)
+{
+    kal_uint16 unsafeRange = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL == KAL_TRUE)
+            {
+                unsafeRange = CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_BT[consysIndex][boundIndex];
+            }
+            else
+            {
+                unsafeRange = CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_BT[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            unsafeRange = 0xFE;
+            break;
+        }
+    }
+    return unsafeRange;
+}
+
+/*
+ *******************************************************************************************************************************
+ * @brief      Get the BT frequency boundary that will have interference with LTE/NR. And FDM should be applied.
+ * @note       Customer should modify the model id and corresponding table acordingly.
+ * @param      consysIndex      [in]   row index of CUSTOM_(LTE/NR)_(DL/UL)_UNSAFE_FREQ_RANGE_24G_BT_FDM.
+ * @param      boundIndex       [in]   0/1 indicates to get lower/upper bound of BT frequency that will have interference with LTE/NR.
+ * @param      isDL             [in]   DL table, means (Consys is aggressor, modem is victim);UL table, means (Consys is vctim, modem is aggressor)
+ * @param      unsafeRange      [out]  LTE/NR frequency boundary that will have interference with BT.
+ *******************************************************************************************************************************
+*/
+kal_uint16 el1_idc_get_custom_bt_fdm_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL)
+{
+    kal_uint16 unsafeRange = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL == KAL_TRUE)
+            {
+                unsafeRange = CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT_FDM[consysIndex][boundIndex];
+            }
+            else
+            {
+                unsafeRange = CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_BT_FDM[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            unsafeRange = 0xFE;
+            break;
+        }
+    }
+    return unsafeRange;
+}
+
+kal_uint16 nl1_idc_get_custom_bt_fdm_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL)
+{
+    kal_uint16 unsafeRange = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL == KAL_TRUE)
+            {
+                unsafeRange = CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_BT_FDM[consysIndex][boundIndex];
+            }
+            else
+            {
+                unsafeRange = CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_BT_FDM[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            unsafeRange = 0xFE;
+            break;
+        }
+    }
+    return unsafeRange;
+}
+
+/*
+ *******************************************************************************************************************************
+ * @brief      Get the BT frequency boundary that will have interference with LTE/NR. And power backoff should be applied.
+ * @note       Customer should modify the model id and corresponding table acordingly.
+ * @param      consysIndex      [in]   row index of CUSTOM_(LTE/NR)_(DL/UL)_UNSAFE_FREQ_RANGE_24G_BT_PWR.
+ * @param      boundIndex       [in]   0/1 indicates to get lower/upper bound of BT frequency that will have interference with LTE/NR.
+ * @param      isDL             [in]   DL table, means (Consys is aggressor, modem is victim);UL table, means (Consys is vctim, modem is aggressor)
+ * @param      unsafeRange      [out]  LTE/NR frequency boundary that will have interference with BT.
+ *******************************************************************************************************************************
+*/
+kal_uint16 el1_idc_get_custom_bt_pwr_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL)
+{
+    kal_uint16 unsafeRange = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL == KAL_TRUE)
+            {
+                unsafeRange = CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT_PWR[consysIndex][boundIndex];
+            }
+            else
+            {
+                unsafeRange = CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_BT_PWR[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            unsafeRange = 0xFE;
+            break;
+        }
+    }
+    return unsafeRange;
+}
+
+kal_uint16 nl1_idc_get_custom_bt_pwr_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL)
+{
+    kal_uint16 unsafeRange = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL == KAL_TRUE)
+            {
+                unsafeRange = CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_BT_PWR[consysIndex][boundIndex];
+            }
+            else
+            {
+                unsafeRange = CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_BT_PWR[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            unsafeRange = 0xFE;
+            break;
+        }
+    }
+    return unsafeRange;
+}
+
+/*
+ *******************************************************************************************************************************
+ * @brief      Get the BT frequency boundary that will have interference with LTE/NR. And TDM should be applied.
+ * @note      Customer should modify the model id and corresponding table acordingly.
+ * @param   consysIndex      [in]   row index of CUSTOM_(LTE/NR)_UNSAFE_FREQ_RANGE_24G_BT_TDM.
+ * @param   boundIndex       [in]   0/1 indicates to get lower/upper bound of BT frequency that will have interference with LTE/NR.
+ * @param   unsafeRange     [out] LTE/NR frequency boundary that will have interference with BT.
+ *******************************************************************************************************************************
+*/
+kal_uint16 el1_idc_get_custom_bt_tdm_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL)
+{
+    kal_uint16 unsafeRange = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL == KAL_TRUE)
+            {
+                unsafeRange = CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT_TDM[consysIndex][boundIndex];
+            }
+            else
+            {
+                unsafeRange = CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_BT_TDM[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            unsafeRange = 0xFE;
+            break;
+        }
+    }
+    return unsafeRange;
+}
+
+kal_uint16 nl1_idc_get_custom_bt_tdm_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL)
+{
+    kal_uint16 unsafeRange = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            if(isDL == KAL_TRUE)
+            {
+                unsafeRange = CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_BT_TDM[consysIndex][boundIndex];
+            }
+            else
+            {
+                unsafeRange = CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_BT_TDM[consysIndex][boundIndex];
+            }
+            break;
+        }
+        default:
+        {
+            unsafeRange = 0xFE;
+            break;
+        }
+    }
+    return unsafeRange;
+}
+
+/*
+ *******************************************************************************************************************************
+ * @brief      Get the table that indicates which LTE/NR band will have harmonic interference with 2.4GHz/5GHz WiFi and the corresponding IDC solution.
+ * @note      Customer should modify the model id and corresponding table acordingly.
+ * @param   index1             [in]   row index of CUSTOM_(LTE/NR)_HARMONIC_WIFI.
+ * @param   index2             [in]   column index of CUSTOM_(LTE/NR)_HARMONIC_WIFI.
+ * @param   tableContent    [out] content of CUSTOM_(LTE/NR)_HARMONIC_WIFI.
+ *******************************************************************************************************************************
+*/
+kal_uint8 el1_idc_get_custom_harmonic_table(kal_uint8 index1, kal_uint8 index2, kal_bool isWiFi)
+{
+    kal_uint8 tableContent = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            tableContent = (isWiFi)? CUSTOM_LTE_HARMONIC_WIFI[index1][index2] : CUSTOM_LTE_HARMONIC_BT[index1][index2];
+            break;
+        }
+        default:
+        {
+            tableContent = 0xFE;
+            break;
+        }
+    }
+    return tableContent;
+}
+
+kal_uint8 nl1_idc_get_custom_harmonic_table(kal_uint8 index1, kal_uint8 index2, kal_bool isWiFi)
+{
+    kal_uint8 tableContent = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            tableContent = (isWiFi)? CUSTOM_NR_HARMONIC_WIFI[index1][index2] : CUSTOM_NR_HARMONIC_BT[index1][index2];
+            break;
+        }
+        default:
+        {
+            tableContent = 0xFE;
+            break;
+        }
+    }
+    return tableContent;
+}
+
+/*
+ *******************************************************************************************************************************
+ * @brief      Get the table that indicates which LTE/NR band will have intermodulation interference with 2.4GHz/5GHz WiFi and the corresponding IDC solution.
+ * @note      Customer should modify the model id and corresponding table acordingly.
+ * @param   index1             [in]   row index of CUSTOM_(LTE/NR)_INTERMOD_WIFI.
+ * @param   index2             [in]   column index of CUSTOM_(LTE/NR)_INTERMOD_WIFI.
+ * @param   tableContent    [out] content of CUSTOM_(LTE/NR)_INTERMOD_WIFI.
+ *******************************************************************************************************************************
+*/
+kal_uint8 el1_idc_get_custom_intermod_table(kal_uint8 index1, kal_uint8 index2, kal_bool isWiFi)
+{
+    kal_uint8 tableContent = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            tableContent = (isWiFi)? CUSTOM_LTE_INTERMOD_WIFI[index1][index2] : CUSTOM_LTE_INTERMOD_BT[index1][index2];
+            break;
+        }
+        default:
+        {
+            tableContent = 0xFE;
+            break;
+        }
+    }
+    return tableContent;
+}
+
+kal_uint8 nl1_idc_get_custom_intermod_table(kal_uint8 index1, kal_uint8 index2, kal_bool isWiFi)
+{
+    kal_uint8 tableContent = 0;
+    
+    switch(md_product_model_id)
+    {
+        case 0x0F0F0F0F: // model 252645135
+        {
+            tableContent = (isWiFi)? CUSTOM_NR_INTERMOD_WIFI[index1][index2] : CUSTOM_NR_INTERMOD_BT[index1][index2];
+            break;
+        }
+        default:
+        {
+            tableContent = 0xFE;
+            break;
+        }
+    }
+    return tableContent;
+}
+
diff --git a/mcu/custom/protocol/common/ps/custom_idc_config.h b/mcu/custom/protocol/common/ps/custom_idc_config.h
new file mode 100644
index 0000000..e863612
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_idc_config.h
@@ -0,0 +1,139 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *   custom_idc_config.h
+ *
+ * Project:
+ * --------
+ *   UMOLYA
+ *
+ * Description:
+ * ------------
+ *   Custom file for IDC solution table
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ * ===========================================================
+ * $Log$
+ *
+ * 04 01 2021 kiwi.zhang
+ * [MOLY00646546] [MT6890][Colgin][CPE][IDC][SH] during customized de-sense table verification, ul/dl unsafe bitmap value is same
+ * 	
+ * 	.
+ *
+ * 12 05 2019 louis-tw.huang
+ * [MOLY00462891] LTE B26 DLCH.6275«H¹D±¼?
+ * .
+ *
+ * 10 25 2019 louis-tw.huang
+ * [MOLY00453978] 5G NR n78/79©MWIFI 5G¦@¦sµ¦²¤
+ * .
+ *
+ * 04 02 2018 alex.chung
+ * [MOLY00316776] [MT6762] Add handling of harmonic between LTE and BT
+ * Add harmonic handling between LTE and BT
+ *
+ * 02 02 2018 alex.chung
+ * [MOLY00303487] Wifi/LTE¦@¦sÀu¤Æ¤è®×
+ * 1. Customer request to switch on/off IDC dynamically.
+ * 2. Customer request to separate WiFi and BT for IDC customization.
+ *
+ ****************************************************************************/
+ 
+/*******************************************************************************************************************************
+*                                                           !!!!!!!!!!!!!!! Do not modify this file !!!!!!!!!!!!!!!
+*******************************************************************************************************************************/
+
+#ifndef _CUSTOM_IDC_CONFIG_H
+#define _CUSTOM_IDC_CONFIG_H
+
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+
+typedef enum
+{
+    IDC_RADIO_WIFI = 0,
+    IDC_RADIO_BT   = 1,
+    IDC_RADIO_NUM  = 2
+}idc_radio_enum;
+
+/*******************************************************************************************************************************
+* Variable
+*******************************************************************************************************************************/
+extern kal_uint32 md_product_model_id;
+
+/*******************************************************************************************************************************
+* Function
+*******************************************************************************************************************************/
+extern kal_bool el1_idc_custom_table(kal_uint8 index);
+extern kal_uint8 el1_idc_get_custom_table_size(kal_uint8 index, kal_bool isDL);
+extern kal_uint16 el1_idc_get_custom_wifi_frequency_index(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL);
+extern kal_uint16 el1_idc_get_custom_wifi_all_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL);
+extern kal_uint16 el1_idc_get_custom_wifi_fdm_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL);
+extern kal_uint16 el1_idc_get_custom_wifi_pwr_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL);
+extern kal_uint16 el1_idc_get_custom_wifi_tdm_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL);
+extern kal_uint16 el1_idc_get_custom_bt_frequency_index(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL);
+extern kal_uint16 el1_idc_get_custom_bt_all_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex,kal_bool isDL);
+extern kal_uint16 el1_idc_get_custom_bt_fdm_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL);
+extern kal_uint16 el1_idc_get_custom_bt_pwr_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex,kal_bool isDL);
+extern kal_uint16 el1_idc_get_custom_bt_tdm_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex,kal_bool isDL);
+extern kal_uint8 el1_idc_get_custom_harmonic_table(kal_uint8 index1, kal_uint8 index2, kal_bool isWiFi );
+extern kal_uint8 el1_idc_get_custom_intermod_table(kal_uint8 index1, kal_uint8 index2, kal_bool isWiFi);
+extern kal_bool idc_gps_blank_lte_band_determine(kal_uint16 band);
+
+extern kal_bool nl1_idc_custom_table(kal_uint8 index);
+extern kal_uint8 nl1_idc_get_custom_table_size(kal_uint8 index, kal_bool isDL);
+extern kal_uint16 nl1_idc_get_custom_wifi_frequency_index(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isFiveG, kal_bool isDL);
+extern kal_uint16 nl1_idc_get_custom_wifi_all_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isFiveG, kal_bool isDL);
+extern kal_uint16 nl1_idc_get_custom_wifi_fdm_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isFiveG, kal_bool isDL);
+extern kal_uint16 nl1_idc_get_custom_wifi_pwr_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isFiveG, kal_bool isDL);
+extern kal_uint16 nl1_idc_get_custom_wifi_tdm_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isFiveG, kal_bool isDL);
+extern kal_uint16 nl1_idc_get_custom_bt_frequency_index(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL);
+extern kal_uint16 nl1_idc_get_custom_bt_all_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL);
+extern kal_uint16 nl1_idc_get_custom_bt_fdm_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL);
+extern kal_uint16 nl1_idc_get_custom_bt_pwr_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL);
+extern kal_uint16 nl1_idc_get_custom_bt_tdm_unsafe_range(kal_uint8 consysIndex, kal_uint8 boundIndex, kal_bool isDL);
+extern kal_uint8 nl1_idc_get_custom_harmonic_table(kal_uint8 index1, kal_uint8 index2, kal_bool isWiFi);
+extern kal_uint8 nl1_idc_get_custom_intermod_table(kal_uint8 index1, kal_uint8 index2, kal_bool isWiFi);
+extern kal_bool idc_gps_blank_nr_band_determine(kal_uint16 band);
+
+#endif /* _CUSTOM_IDC_CONFIG_H */
+
diff --git a/mcu/custom/protocol/common/ps/custom_idc_table.h b/mcu/custom/protocol/common/ps/custom_idc_table.h
new file mode 100644
index 0000000..315645c
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_idc_table.h
@@ -0,0 +1,996 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *   custom_idc_config.h
+ *
+ * Project:
+ * --------
+ *   UMOLYA
+ *
+ * Description:
+ * ------------
+ *   Custom file for IDC solution table
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ * ===========================================================
+ * $Log$
+ *
+ * 04 01 2021 kiwi.zhang
+ * [MOLY00646546] [MT6890][Colgin][CPE][IDC][SH] during customized de-sense table verification, ul/dl unsafe bitmap value is same
+ * 	
+ * 	.
+ *
+ * 08 05 2020 alice.tsai
+ * [MOLY00555316] [MT6873][Margaux][SQC][MP6][HQ][IDC][Coex] Margaux JP sku: Desense table issue
+ * 	
+ * 	[MOLY00555316]customer file
+ *
+ * 12 05 2019 louis-tw.huang
+ * [MOLY00462891] LTE B26 DLCH.6275«H¹D±¼?
+ * .
+ *
+ * 10 25 2019 louis-tw.huang
+ * [MOLY00453978] 5G NR n78/79©MWIFI 5G¦@¦sµ¦²¤
+ * .
+ *
+ * 04 02 2018 alex.chung
+ * [MOLY00316776] [MT6762] Add handling of harmonic between LTE and BT
+ * Add harmonic handling between LTE and BT
+ *
+ * 02 02 2018 alex.chung
+ * [MOLY00303487] Wifi/LTE¦@¦sÀu¤Æ¤è®×
+ * 1. Customer request to switch on/off IDC dynamically.
+ * 2. Customer request to separate WiFi and BT for IDC customization.
+ *
+ ****************************************************************************/ 
+ 
+/*******************************************************************************************************************************
+* The value means then number of LTE frequcey where LTE rx will be interfered by wifi tx
+* The value must fit size of:
+* CUSTOM_LTE_DL_FREQ_INDEX_RANGE_24G_WIFI,
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_WIFI,
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_WIFI_FDM,
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_WIFI_PWR,
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM,
+* eg:this value = 8 means  8 LTE frequency range will be interfered by wifi 
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_WIFI_DL      7
+
+/*******************************************************************************************************************************
+* The value means then number of LTE frequcey where wifi rx will be interfered by LTE tx
+* The value must fit size of: 
+* CUSTOM_LTE_UL_FREQ_INDEX_RANGE_24G_WIFI,
+* CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_WIFI,
+* CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_WIFI_FDM,
+* CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_WIFI_PWR,
+* CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM,
+* eg:this value = 4 means only 4 LTE frequency range will  interfere 2.4G wifi 
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_WIFI_UL      4
+
+/*******************************************************************************************************************************
+* The value means then number of NR frequcey where NR rx will be interfered by wifi tx(2.4G WIFI)
+* The value must fit size of:
+* CUSTOM_NR_DL_FREQ_INDEX_RANGE_24G_WIFI,
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI,
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI_FDM,
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI_PWR,
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM,
+* eg:this value = 2 means  2 LTE frequency range will be interfered by 2.4G wifi
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_BAND_IDX_NUM_24G_NR_WIFI_DL      2
+
+/*******************************************************************************************************************************
+* The value means then number of NR frequcey where 2.4G wifi rx will be interfered by NR tx
+* The value must fit size of:
+* CUSTOM_NR_UL_FREQ_INDEX_RANGE_24G_WIFI,
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI,
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI_FDM,
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI_PWR,
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM,
+* eg:this value = 2 means  2 NR frequency range will  interfered 2.4G wifi
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_BAND_IDX_NUM_24G_NR_WIFI_UL      2
+
+/*******************************************************************************************************************************
+* The value means then number of NR frequcey where NR rx will be interfered by wifi tx(5G WIFI)
+* The value must fit size of:
+* CUSTOM_NR_DL_FREQ_INDEX_RANGE_5G_WIFI,
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_5G_WIFI,
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_5G_WIFI_FDM,
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_5G_WIFI_PWR,
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_5G_WIFI_TDM,
+* eg:this value = 6 means  6 NR frequency range will be interfered by wifi 
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_BAND_IDX_NUM_5G_NR_WIFI_DL      6
+
+/*******************************************************************************************************************************
+* The value means then number of NR frequcey where 5G wifi rx will be interfered by NR tx
+* The value must fit size of:
+* CUSTOM_NR_UL_FREQ_INDEX_RANGE_5G_WIFI,
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_5G_WIFI,
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_5G_WIFI_FDM,
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_5G_WIFI_PWR,
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_5G_WIFI_TDM,
+* eg:this value = 2 means  2 NR frequency range will  interfere 5G wifi rx
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_BAND_IDX_NUM_5G_NR_WIFI_UL      2
+
+/*******************************************************************************************************************************
+* The value must fit size of:
+* CUSTOM_LTE_DL_FREQ_INDEX_RANGE_24G_BT,
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT,
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT_FDM,
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT_PWR,
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT_TDM,
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_BT_DL        4
+
+/*******************************************************************************************************************************
+* The value must fit size of:
+* CUSTOM_LTE_UL_FREQ_INDEX_RANGE_24G_BT,
+* CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_BT,
+* CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_BT_FDM,
+* CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_BT_PWR,
+* CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_BT_TDM,
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_BT_UL        5
+
+/*******************************************************************************************************************************
+* The value must fit size of:
+* CUSTOM_NR_DL_FREQ_INDEX_RANGE_24G_BT,
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_BT,
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_BT_FDM,
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_BT_PWR,
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_BT_TDM,
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_BAND_IDX_NUM_24G_NR_BT_DL        5
+
+/*******************************************************************************************************************************
+* The value must fit size of:
+* CUSTOM_NR_UL_FREQ_INDEX_RANGE_24G_BT,
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_BT,
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_BT_FDM,
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_BT_PWR,
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_BT_TDM,
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_BAND_IDX_NUM_24G_NR_BT_UL        5
+
+/*******************************************************************************************************************************
+* The value must fit size of CUSTOM_HARMONIC_WIFI
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_BAND_IDX_NUM_HARMONIC_LTE_WIFI 3
+#define CUSTOM_IDC_BAND_IDX_NUM_HARMONIC_NR_WIFI 3
+
+/*******************************************************************************************************************************
+* The value must fit size of CUSTOM_INTERMOD_WIFI
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_BAND_IDX_NUM_INTERMOD_LTE_WIFI 2
+#define CUSTOM_IDC_BAND_IDX_NUM_INTERMOD_NR_WIFI 2
+
+/*******************************************************************************************************************************
+* The value must fit size of CUSTOM_HARMONIC_BT
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_BAND_IDX_NUM_HARMONIC_LTE_BT   1
+#define CUSTOM_IDC_BAND_IDX_NUM_HARMONIC_NR_BT   1
+
+/*******************************************************************************************************************************
+* The value must fit size of CUSTOM_INTERMOD_WIFI
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_BAND_IDX_NUM_INTERMOD_LTE_BT   1
+#define CUSTOM_IDC_BAND_IDX_NUM_INTERMOD_NR_BT   1
+
+/*******************************************************************************************************************************
+* Config which band need to apply GPS blanking
+*******************************************************************************************************************************/
+#define CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_33   1
+#define CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_34   1
+#define CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_35   1
+#define CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_36   1
+#define CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_37   1
+#define CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_39   1
+#define CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_42   1
+#define CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_43   1
+#define CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_44   1
+#define CUSTOM_IDC_GPS_BLANK_EN_LTE_BAND_46   1
+
+#define CUSTOM_IDC_GPS_BLANK_EN_NR_BAND_41   1
+#define CUSTOM_IDC_GPS_BLANK_EN_NR_BAND_77   1
+#define CUSTOM_IDC_GPS_BLANK_EN_NR_BAND_78   1
+#define CUSTOM_IDC_GPS_BLANK_EN_NR_BAND_79   1
+
+
+/*******************************************************************************************************************************
+* WIFI is aggressor, LTE is victim
+* CUSTOM_LTE_DL_FREQ_INDEX_RANGE_24G_WIFI indicates LTE frequency range that will have interference with WiFi.
+* The interference mentioend aboved means which will need be resloved by TDM solution or PowerBackOff solution
+* One of IDC solution (tdm + power )should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_DL_FREQ_INDEX_RANGE_24G_WIFI[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_WIFI_DL][2] =
+{
+    {23000, 23109},// TDM
+    {23110, 23639},// PWR
+    {23640, 23669},// PWR
+    {23670, 24000},// PWR(3~17)  + TDM(18~83)
+    {24960, 25089},// PWR(69~71) + TDM(72~83)
+    {25090, 25199},// PWR
+    {25200, 25640},// TDM
+};
+
+/*******************************************************************************************************************************
+* WIFI is aggressor, LTE is victim
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_WIFI indicates LTE frequency range that will have interference with WiFi.
+* The interference mentioend aboved means which will need be resloved by TDM solution .
+* One of IDC solution should be applied
+* eg1: for LTE freq is in range 23000~23100, WIFI tx (2402~2416) will make TDM type interference for lte RX ,then 3,17 will be filled in first line
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_WIFI[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_WIFI_DL][2] =
+{
+    {3, 17},
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {18, 83},
+    {69, 83},
+    {0xFFFF, 0xFFFF},
+    {79, 83},
+};
+
+
+/*******************************************************************************************************************************
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_WIFI_FDM indicates corresponding WiFi frequency that will have interference with LTE.
+* FDM should be applied
+* Here must filled with OxFFFF
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_WIFI_FDM[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_WIFI_DL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_WIFI_PWR indicates corresponding WiFi frequency that will have interference with LTE.
+* Powe backoff should be applied on 2.4G WiFi
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_WIFI_PWR[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_WIFI_DL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {3,17},
+    {3,22},
+    {3,17},
+    {72,83},
+    {79, 83},
+    {0xFFFF, 0xFFFF},
+};
+
+
+/*******************************************************************************************************************************
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM indicates corresponding 2.4G WiFi frequency that will have interference with LTE.
+* TDM should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_WIFI_DL][2] =
+{
+    {3, 17},
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {18, 83},
+    {69, 83},
+    {0xFFFF, 0xFFFF},
+    {79, 83},
+};
+
+
+/*******************************************************************************************************************************
+* WIFI is victim, LTE is aggressor
+* CUSTOM_LTE_UL_FREQ_INDEX_RANGE_24G_WIFI indicates LTE frequency range that will have interference with 2.4G WiFi.
+* The interference mentioend aboved means which will need be resloved by TDM solution or PowerBackOff solution
+* One of IDC solution should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_UL_FREQ_INDEX_RANGE_24G_WIFI[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_WIFI_UL][2] =
+{
+    {23600, 23809},//PWR(3~20)+TDM(21~67)
+    {23810, 24000},//TDM
+    {25090, 25190},//PWR
+    {25650, 26900},//PWR(3~17)  + TDM(18~83)
+};
+
+
+/*******************************************************************************************************************************
+* WIFI is victim, LTE is agressor
+* CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_WIFI indicates LTE frequency range that will have interference with WiFi.
+* The interference mentioend aboved means which will need be resloved by TDM solution
+* One of IDC solution should be applied
+* eg2: for LTE freq is in range 23810~24000, LTE tx  will make TDM type interference for WIFI RX (2402~2472) ,then 3,83 will be filled in second line
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_WIFI[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_WIFI_UL][2] =
+{
+    {21, 67},
+    {3, 83},
+    {0xFFFF, 0xFFFF},//no TDM type
+    {18, 83},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_WIFI_FDM indicates corresponding 2.4G WiFi frequency that will have interference with LTE.
+* FDM should be applied
+* Here must filled with OxFFFF
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_WIFI_FDM[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_WIFI_UL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_WIFI_PWR indicates corresponding 2.4G WiFi frequency that will have interference with LTE.
+* Powe backoff should be applied on LTE
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_WIFI_PWR[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_WIFI_UL][2] =
+{
+    {3, 20},
+    {0xFFFF, 0xFFFF}, //no PWR type
+    {3, 22},
+    {3, 17},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM indicates corresponding (2.4G) WiFi frequency that will have interference with LTE.
+* TDM should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_WIFI_UL][2] =
+{
+    {21, 67},
+    {3, 83},
+    {0xFFFF, 0xFFFF},//no TDM type
+    {18, 83},
+};
+
+
+/*******************************************************************************************************************************
+* WIFI is aggressor, NR is victim
+* CUSTOM_NR_DL_FREQ_INDEX_RANGE_24G_WIFI indicates NR frequency range that will have interference with WiFi.
+* The interference mentioend aboved means which will need be resloved by TDM solution or PowerBackOff solution
+* One of IDC solution should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_DL_FREQ_INDEX_RANGE_24G_WIFI[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_WIFI_DL][2] =
+{
+    {23600, 23809},//PWR
+    {23810, 24000},//PWR(3~25)+ TDM(26~83)
+};
+
+/*******************************************************************************************************************************
+* WIFI is aggressor, NR is victim
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI indicates LTE frequency range that will have interference with WiFi.
+* The interference mentioend aboved means which will need be resloved by TDM solution
+* One of IDC solution should be applied
+* eg1: for NR freq is in range 23670~24000, WIFI tx (2402~2425) will make PWR type interference for NR RX ,
+                                            WIFI tx (2425~2482) will make TDM type interference for NR RX
+                                             then 27,83 will be filled in second lineNR
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_WIFI_DL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {26, 83},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI_FDM indicates corresponding WiFi frequency that will have interference with NR.
+* FDM should be applied
+* Here must filled with OxFFFF
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI_FDM[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_WIFI_DL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI_PWR indicates corresponding 2.4G WiFi frequency that will have interference with NR.
+* Powe backoff should be applied on 2.4G WiFi
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI_PWR[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_WIFI_DL][2] =
+{
+    {3, 17},
+    {3, 25},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM indicates corresponding 2.4G WiFi frequency that will have interference with NR.
+* TDM should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_WIFI_DL][2] =
+{
+    {0xFFFF, 0xFFFF},//no PWR type
+    {26, 83},
+};
+
+
+/*******************************************************************************************************************************
+* WIFI is victim, NR is aggressor
+* CUSTOM_NR_UL_FREQ_INDEX_RANGE_24G_WIFI indicates NR frequency range that will have interference with 2.4G WiFi.
+* The interference mentioend aboved means which will need be resloved by TDM solution solution or PowerBackOff solution
+* One of IDC solution should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_UL_FREQ_INDEX_RANGE_24G_WIFI[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_WIFI_UL][2] =
+{
+    {23600, 23809}, //PWR
+    {23810, 24000}, //PWR(3~54)+ TDM(55~83)
+};
+
+/*******************************************************************************************************************************
+* WIFI is victim, NR is agressor
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI indicates LTE frequency range that will have interference with 2.4G WiFi.
+* The interference mentioend aboved means which will need be resloved by TDM solution 
+* One of IDC solution should be applied
+* eg1: for NR freq is in range 23810~24000, NR tx  will make PWR type interference for WIFI RX (2402~2453) ,
+                                            NR tx  will make TDM type interference for WIFI RX 2454~2482)
+                                            then 55,83 will be filled in fourth line
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_WIFI_UL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {55, 83},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI_FDM indicates corresponding 2.4G WiFi frequency that will have interference with NR.
+* FDM should be applied
+* Here must filled with OxFFFF
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI_FDM[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_WIFI_UL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI_PWR indicates corresponding 2.4G WiFi frequency that will have interference with NR.
+* Powe backoff should be applied on NR
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI_PWR[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_WIFI_UL][2] =
+{
+    {23, 37},
+    {3, 54},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM indicates corresponding (2.4G) WiFi frequency that will have interference with NR.
+* TDM should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_WIFI_UL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {55, 83},
+};
+
+
+/*******************************************************************************************************************************
+* WIFI is aggressor, NR is victim
+* CUSTOM_NR_DL_FREQ_INDEX_RANGE_5G_WIFI indicates NR frequency range that will have interference with 5G WiFi.
+* The interference mentioend aboved means which will need be resloved by TDM solution or PowerBackOff solution
+* One of IDC solution should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_DL_FREQ_INDEX_RANGE_5G_WIFI[CUSTOM_IDC_BAND_IDX_NUM_5G_NR_WIFI_DL][2] =
+{
+    {44000, 44809},//PWR
+    {44810, 45809},//PWR(1~161) +TDM(162~341)
+    {45810, 46809},//TDM
+    {46810, 47809},//PWR
+    {48810, 49809},//TDM
+    {49810, 50000},//PWR
+};
+
+/*******************************************************************************************************************************
+* WIFI is aggressor, NR is victim
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_5G_WIFI indicates NR frequency range that will have interference with 5G WiFi.
+* The interference mentioend aboved means which will need be resloved by TDM solution
+* One of IDC solution should be applied
+* eg1: for NR freq is in range 23670~24000, WIFI tx (5170~5330) will make PWR type interference for NR RX ,
+                                            WIFI tx (5331~5510) will make TDM type interference for NR RX
+                                             then 162~341 will be filled in second lineNR
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_5G_WIFI[CUSTOM_IDC_BAND_IDX_NUM_5G_NR_WIFI_DL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {162, 341},
+    {1, 81},
+    {0xFFFF, 0xFFFF},
+    {31, 81},
+    {0xFFFF, 0xFFFF},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_5G_WIFI_FDM indicates corresponding WiFi frequency that will have interference with NR.
+* FDM should be applied
+* Here must filled with OxFFFF
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_5G_WIFI_FDM[CUSTOM_IDC_BAND_IDX_NUM_5G_NR_WIFI_DL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_5G_WIFI_PWR indicates corresponding 5G WiFi frequency that will have interference with NR.
+* Power backoff should be applied on 5G WiFi
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_5G_WIFI_PWR[CUSTOM_IDC_BAND_IDX_NUM_5G_NR_WIFI_DL][2] =
+{
+    {1, 81},
+    {1, 161},
+    {0xFFFF, 0xFFFF},
+    {1, 161},
+    {0xFFFF, 0xFFFF},
+    {51,81},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM indicates corresponding 2.4G WiFi frequency that will have interference with NR.
+* TDM should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_5G_WIFI_TDM[CUSTOM_IDC_BAND_IDX_NUM_5G_NR_WIFI_DL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {162, 341},
+    {1, 81},
+    {0xFFFF, 0xFFFF},
+    {31, 81},
+    {0xFFFF, 0xFFFF},
+};
+
+/*******************************************************************************************************************************
+* WIFI is victim, NR is aggressor
+* CUSTOM_NR_UL_FREQ_INDEX_RANGE_5G_WIFI indicates NR frequency range that will have interference with 5G WiFi.
+* The interference mentioend aboved means which will need be resloved by TDM solution or PowerBackOff solution
+* One of IDC solution should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_UL_FREQ_INDEX_RANGE_5G_WIFI[CUSTOM_IDC_BAND_IDX_NUM_5G_NR_WIFI_UL][2] =
+{
+    {44000, 44809},// TDM(1~161)
+    {44810, 50000},// PWR(1~180) +TDM(181~341)
+};
+
+/*******************************************************************************************************************************
+* WIFI is victim, NR is aggressor
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_5G_WIFI indicates NR frequency range that will have interference with 5G WiFi.
+* The interference mentioend aboved means which will need be resloved by TDM solution
+* One of IDC solution should be applied
+* eg1: for NR freq is in range 44000~44809, WIFI tx (5170~5250) will make TDM type interference for NR RX ,
+       then 1,81 will be filled in first line
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_5G_WIFI[CUSTOM_IDC_BAND_IDX_NUM_5G_NR_WIFI_UL][2] =
+{
+    {1,   81},
+    {181, 341},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_5G_WIFI_FDM indicates corresponding WiFi frequency that will have interference with NR.
+* FDM should be applied
+* Here must filled with OxFFFF
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_5G_WIFI_FDM[CUSTOM_IDC_BAND_IDX_NUM_5G_NR_WIFI_UL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_5G_WIFI_PWR indicates corresponding 5G WiFi frequency that will have interference with NR.
+* Power backoff should be applied on 5G NR
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_5G_WIFI_PWR[CUSTOM_IDC_BAND_IDX_NUM_5G_NR_WIFI_UL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {1, 180},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_WIFI_TDM indicates corresponding 2.4G WiFi frequency that will have interference with NR.
+* TDM should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_5G_WIFI_TDM[CUSTOM_IDC_BAND_IDX_NUM_5G_NR_WIFI_UL][2] =
+{
+    {1,   81},
+    {181, 341},
+};
+
+/*******************************************************************************************************************************
+* BT is aggressor, LTE is victim
+* CUSTOM_LTE_DL_FREQ_INDEX_RANGE_24G_BT indicates LTE frequency range that will have interference with BT.
+* FDM+POWERBANCKOFF+TDM together
+* One of IDC solution should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_DL_FREQ_INDEX_RANGE_24G_BT[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_BT_DL][2] =
+{
+    {23600, 23709},
+    {23710, 23809},
+    {23810, 24959},
+    {24960, 24999},
+};
+
+/*******************************************************************************************************************************
+* BT is aggressor, LTE is victim
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT indicates corresponding BT frequency that will have interference with LTE
+* FDM+POWERBANCKOFF+TDM together
+* One of IDC solution should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_BT_DL][2] =
+{
+    {3, 83}, //FDM+TDM
+    {3, 83}, //FDM+PWR+TDM
+    {3, 83}, //TDM
+    {3, 83}, //FDM+PWR
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT_FDM indicates corresponding BT frequency that will have interference with LTE.
+* FDM should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT_FDM[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_BT_DL][2] =
+{
+    {3, 13},
+    {3, 20}, 
+    {0xFFFF, 0xFFFF},
+    {73, 83},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_(LTE/NR)_(DL/UL)_UNSAFE_FREQ_RANGE_24G_BT_PWR indicates corresponding BT frequency that will have interference with LTE.
+* Powe backoff should be applied on either  BT
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT_PWR[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_BT_DL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {21, 33},
+    {0xFFFF, 0xFFFF},
+    {3,72},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT_TDM indicates corresponding BT frequency that will have interference with LTE.
+* TDM should be applied,OxFFFF means no need to do TDM
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT_TDM[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_BT_DL][2] =
+{
+    {14, 83},
+    {34, 83},
+    {3, 57},
+    {0xFFFF, 0xFFFF},
+};
+
+
+/*******************************************************************************************************************************
+* BT is victim, LTE is aggressor
+* CUSTOM_LTE_UL_FREQ_INDEX_RANGE_24G_BT indicates LTE frequency range that will have interference with BT.
+* FDM+POWERBANCKOFF+TDM together
+* One of IDC solution should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_UL_FREQ_INDEX_RANGE_24G_BT[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_BT_UL][2] =
+{
+    {23600, 23709},
+    {23710, 23809},
+    {23810, 24959},
+    {24960, 24999},
+    {25000, 25160},
+};
+
+/*******************************************************************************************************************************
+* BT is victim, LTE is aggressor
+* CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_BT indicates corresponding BT frequency that will have interference with LTE
+* FDM+POWERBANCKOFF+TDM together
+* One of IDC solution should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_BT[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_BT_UL][2] =
+{
+    {3, 23}, //FDM
+    {3, 56}, //FDM(3~15)+PWR(16~37)+TDM(38~56)
+    {3, 57}, //PWR
+    {3, 81}, //FDM+PWR
+    {3, 81}, //FDM+TDM
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_BT_FDM indicates corresponding BT frequency that will have interference with LTE.
+* FDM should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_BT_FDM[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_BT_UL][2] =
+{
+    {3, 23},
+    {3, 15},
+    {0xFFFF, 0xFFFF},
+    {73, 81},
+    {73, 81},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT_PWR indicates corresponding BT frequency that will have interference with LTE.
+* Powe backoff should be applied on LTE
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_BT_PWR[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_BT_UL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {16, 37},
+    {3, 57},
+    {3, 72},
+    {0xFFFF, 0xFFFF},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_LTE_DL_UNSAFE_FREQ_RANGE_24G_BT_TDM indicates corresponding BT frequency that will have interference with LTE.
+* TDM should be applied,OxFFFF means no need to do TDM
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_LTE_UL_UNSAFE_FREQ_RANGE_24G_BT_TDM[CUSTOM_IDC_BAND_IDX_NUM_24G_LTE_BT_UL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {38, 56},
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {3,72},
+};
+
+
+/*******************************************************************************************************************************
+* BT is aggressor, NR is victim
+* CUSTOM_NR_DL_FREQ_INDEX_RANGE_24G_BT indicates NR frequency range that will have interference with BT.
+* FDM+POWERBANCKOFF+TDM together
+* One of IDC solution should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_DL_FREQ_INDEX_RANGE_24G_BT[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_BT_DL][2] =
+{
+    {23600, 23709},
+    {23710, 23809},
+    {23810, 24959},
+    {24960, 24999},
+    {25000, 25160},
+};
+
+/*******************************************************************************************************************************
+* BT is aggressor, NR is victim
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_BT indicates corresponding BT frequency that will have interference with NR
+* FDM+POWERBANCKOFF+TDM together
+* One of IDC solution should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_BT[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_BT_DL][2] =
+{
+    {3, 13},  //FDM
+    {3, 33},  //FDM
+    {3, 81},  //FDM(3~13)+PWR(14~35)+TDM(36~81)
+    {3, 81},  //FDM+PWR
+    {73, 81}, //FDM
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_BT_FDM indicates corresponding BT frequency that will have interference with NR.
+* FDM should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_BT_FDM[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_BT_DL][2] =
+{
+    {3, 13},
+    {3, 33},
+    {3, 13},
+    {73, 81},
+    {73, 81},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_BT_PWR indicates corresponding BT frequency that will have interference with NR.
+* Powe backoff should be applied on BT
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_BT_PWR[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_BT_DL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {14, 35},
+    {3, 57},
+    {0xFFFF, 0xFFFF},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_BT_TDM indicates corresponding BT frequency that will have interference with NR.
+* TDM should be applied,OxFFFF means no need to do TDM
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_DL_UNSAFE_FREQ_RANGE_24G_BT_TDM[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_BT_DL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {36, 81},
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+};
+
+
+/*******************************************************************************************************************************
+* BT is victim, NR is aggressor
+* CUSTOM_NR_UL_FREQ_INDEX_RANGE_24G_BT indicates NR frequency range that will have interference with BT.
+* FDM+POWERBANCKOFF+TDM together
+* One of IDC solution should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_UL_FREQ_INDEX_RANGE_24G_BT[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_BT_UL][2] =
+{
+    {23600, 23709},
+    {23710, 23809},
+    {23810, 24959},
+    {24960, 24999},
+    {25000, 25160},
+};
+
+
+/*******************************************************************************************************************************
+* BT is victim, NR is aggressor
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_BT indicates corresponding BT frequency that will have interference with NR
+* FDM+POWERBANCKOFF+TDM together
+* One of IDC solution should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_BT[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_BT_UL][2] =
+{
+    {23, 13},
+    {23, 33},
+    {3,  57},//FDM(3~10)+PWR(11~25)+TDM(26~57)
+    {23, 81},
+    {73, 81},
+};
+
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_BT_FDM indicates corresponding BT frequency that will have interference with NR.
+* FDM should be applied
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_BT_FDM[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_BT_UL][2] =
+{
+    {3, 13},
+    {3, 33},
+    {3, 10},
+    {23, 81},
+    {0xFFFF, 0xFFFF},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_BT_PWR indicates corresponding BT frequency that will have interference with NR.
+* Powe backoff should be applied on NR
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_BT_PWR[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_BT_UL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {11, 25},
+    {23, 57},
+    {0xFFFF, 0xFFFF},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_BT_TDM indicates corresponding BT frequency that will have interference with NR.
+* TDM should be applied,OxFFFF means no need to do TDM
+*******************************************************************************************************************************/
+kal_uint16 CUSTOM_NR_UL_UNSAFE_FREQ_RANGE_24G_BT_TDM[CUSTOM_IDC_BAND_IDX_NUM_24G_NR_BT_UL][2] =
+{
+    {0xFFFF, 0xFFFF},
+    {0xFFFF, 0xFFFF},
+    {26, 57},
+    {0xFFFF, 0xFFFF},
+    {73, 81},
+};
+
+
+/*******************************************************************************************************************************
+* CUSTOM_(LTE/NR)_HARMONIC_WIFI indicates corresponding harmonic order that LTE/NR will have interference with WiFi and the solution that should
+* be applied.
+* Defintion: {(LTE/NR)_BAND, harmonic order with 2.4GHz WiFi, solution with 2.4GHz WiFi, VCO order with 2.4GHz WiFi, VCO solution with 2.4GHz WiFi, harmonic order with 5GHz WiFi, solution with 5GHz WiFi,vco order with 5GHz WiFi}
+* Example: { 3, 0xFF, 0xFF, 0xFF, 0xFF,    3,    0,    3,    0} indicates that LTE B3 will not have harmonic interference with 2.4GHz WiFi.
+*               However, LTE B3 with have 3rd harmonic interference and VCO interference with 5GHz WiFi. And TDM should be applied
+*******************************************************************************************************************************/
+kal_uint8 CUSTOM_LTE_HARMONIC_WIFI[CUSTOM_IDC_BAND_IDX_NUM_HARMONIC_LTE_WIFI][9] =
+{
+    { 3, 0xFF, 0xFF, 0xFF, 0xFF,    3,    2,    3,    2},
+    {20,    3,    3,    3,    2, 0xFF, 0xFF, 0xFF, 0xFF},
+    {41, 0xFF, 0xFF, 0xFF, 0xFF,    2,    3,    2,    1},
+};
+
+kal_uint8 CUSTOM_NR_HARMONIC_WIFI[CUSTOM_IDC_BAND_IDX_NUM_HARMONIC_NR_WIFI][9] =
+{
+    { 3, 0xFF, 0xFF, 0xFF, 0xFF,    3,    3,    3,    3},
+    {20,    3,    3,    3,    3, 0xFF, 0xFF, 0xFF, 0xFF},
+    {41, 0xFF, 0xFF, 0xFF, 0xFF,    2,    2,    2,    2},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_(LTE/NR)_INTERMOD_WIFI indicates intermodulation coefficient that LTE/NR will have interference with WiFi and the solution that should
+* be applied.
+* Defintion: {(LTE/NR)_BAND, enable IDC for 2.4GHz, solution with 2.4GHz WiFi, enable IDC for 5GHz, solution with 5GHz WiFi}
+* Example: {20,    1,    2,    0, 0xFF} indicates that LTE B20 will only have intermodulation interference with 2.4GHz. WiFi should do powerbackoff.
+*******************************************************************************************************************************/
+kal_uint8 CUSTOM_LTE_INTERMOD_WIFI[CUSTOM_IDC_BAND_IDX_NUM_INTERMOD_LTE_WIFI][5] =
+{
+        /*  2.4GHz *//*   5GHz   */
+    { 7,    1,    2,    1,    2},
+    {20,    1,    2,    0, 0xFF},
+};
+
+kal_uint8 CUSTOM_NR_INTERMOD_WIFI[CUSTOM_IDC_BAND_IDX_NUM_INTERMOD_NR_WIFI][5] =
+{
+        /*  2.4GHz *//*   5GHz   */
+    { 7,    1,    2,    1,    2},
+    {20,    1,    2,    0, 0xFF},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_(LTE/NR)_HARMONIC_BT indicates corresponding harmonic order that LTE/NR will have interference with BT and the solution that should
+* be applied.
+* Defintion: {(LTE/NR)_BAND, harmonic order BT, solution with BT, vco order BT, vco solution with BT}
+* Example: { 20, 3, 2, 3, 2} indicates that LTE B20 with have 3rd harmonic and VCO interference with BT. And TDM should be applied
+*******************************************************************************************************************************/
+kal_uint8 CUSTOM_LTE_HARMONIC_BT[CUSTOM_IDC_BAND_IDX_NUM_HARMONIC_LTE_BT][5] =
+{
+    {20,    3,    2,    3,    2},
+};
+
+kal_uint8 CUSTOM_NR_HARMONIC_BT[CUSTOM_IDC_BAND_IDX_NUM_HARMONIC_NR_BT][5] =
+{
+    {20,    3,    2,    3,    2},
+};
+
+/*******************************************************************************************************************************
+* CUSTOM_(LTE/NR)_INTERMOD_BT indicates intermodulation coefficient that LTE/NR will have interference with BT and the solution that should
+* be applied.
+* Defintion: {(LTE/NR)_BAND, enable IDC for BT, solution with BT}
+* Example: {20,    1,    2} indicates that LTE B20 will have intermodulation interference with BT. BT should do powerbackoff.
+*******************************************************************************************************************************/
+kal_uint8 CUSTOM_LTE_INTERMOD_BT[CUSTOM_IDC_BAND_IDX_NUM_INTERMOD_LTE_BT][3] =
+{
+    {20,    1,    2},
+};
+
+kal_uint8 CUSTOM_NR_INTERMOD_BT[CUSTOM_IDC_BAND_IDX_NUM_INTERMOD_NR_BT][3] =
+{
+    {20,    1,    2},
+};
+
diff --git a/mcu/custom/protocol/common/ps/custom_imc_config.c b/mcu/custom/protocol/common/ps/custom_imc_config.c
new file mode 100644
index 0000000..b6d75f0
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_imc_config.c
@@ -0,0 +1,23819 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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:
+ * ---------
+ *   custom_imc_config.c
+ *
+ * Project:
+ * --------
+ *   MOLY
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the IMS configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+#include "custom_imc_config.h"
+#include <stdio.h>
+#include <string.h>
+
+#ifdef __MOD_IMC__
+static kal_bool dump_ims_profile_structure_difference(sim_interface_enum ps_id, ims_profile_type_enum type, nvram_ef_ims_profile_record_struct *ims_profile_ptr) {
+    imc_dump_ims_profile_ntf_struct* dump_ims_profile = NULL;
+    ilm_struct ilm;
+
+    ilm.src_mod_id = kal_get_active_module_id();
+    ilm.dest_mod_id = MOD_DHL;
+    ilm.sap_id = DHL_IMC_SAP;
+    ilm.msg_id = MSG_ID_IMC_DUMP_IMS_PROFILE_NTF;
+
+    dump_ims_profile = (imc_dump_ims_profile_ntf_struct *) construct_local_para((kal_uint16)sizeof(imc_dump_ims_profile_ntf_struct), TD_RESET);
+
+    dump_ims_profile->type = type;
+    memcpy((void *)&dump_ims_profile->ims_profile, (void *)ims_profile_ptr, sizeof(nvram_ef_ims_profile_record_struct));
+    ilm.local_para_ptr = (local_para_struct*)dump_ims_profile;
+    ilm.peer_buff_ptr = NULL;
+
+    /* send to DHL */
+    dhl_log_primitive(&ilm);
+    destroy_ilm(&ilm);
+
+    return KAL_TRUE;
+}
+
+static kal_bool set_conf_factory_uri_by_imsi(kal_uint8 *conf_factory_uri, kal_bool with_imsi_info, kal_uint8 imsi_mnc_len, kal_uint8 *mccmnc, kal_uint32 op_id, 
+    kal_uint32 special_profile) {
+    kal_uint8 len = 128;
+    switch (op_id) {
+        case 1:   /* CMCC */
+        case 2:   /* CU */
+        case 5:   /* DTAG */
+        case 9:   /* CT */
+        case 16:  /* EE */
+        case 18:  /* RJIL */
+        case 19:  /* Telstra */
+        case 50:  /* SoftBank */
+        case 107: /* SFR */
+        case 109: /* CHT */
+        case 110: /* FET */
+        case 112: /* Telcel */
+        case 113: /* Beeline */
+        case 117: /* Smartfren */
+        case 119: /* Natcom */
+        case 127: /* MEGAFON */
+        case 135: /* MTS */
+        case 139: /* Bouygues */
+        case 140: /* MTN */
+        case 141: /* CellC */
+        case 143: /* TurkCell */
+        case 144: /* Smile */
+        case 147: /* Airtel */
+        case 150: /* Swisscom */
+        case 154: /* Telia */
+        case 161: /* Play */
+        case 163: /* Dialog/Sri Lanka*/
+        case 164: /* Telenet Belgium */
+        case 165: /* Sunrise Switzerland */
+        case 168: /* Eir Ireland*/
+        case 175: /* TDC */
+        case 178: /* Smart */
+        case 180: /* Swazi */
+        case 182: /* Proximus */
+        case 183: /* Personal */
+        case 184: /*Viettel/Vietnam*/
+        case 186: /*Idea/India*/
+        case 191: /*Grameenphone Bangladesh*/
+        case 192: /*Robi Bangladesh */
+        case 193: /*Bangalink/Bangladesh */
+        case 199: /* Vivacom Bulgaria */
+        case 201: /* KPN Netherlands */
+        case 202: /* Spark@Newzealand */
+        case 203: /* NOS Portugal */
+        case 206: /* Sky UK */
+        case 210: /* BSNL*/
+        case 214: /* IDC Moldova */
+        case 215: /* Cellcard Cambodia */
+        case 216: /* Zong@Pakistan */
+        case 221: /* TPG Singapore */
+        case 224: /* Telkomsel/Indonesia */
+        case 225: /*XL/Indonesia*/
+        case 231: /*Maxis/Malaysia*/
+        case 232: /* Mobitel */
+        case 235: /* VIP */
+        case 239: /* EastLink/Canada */
+        case 240: /* Xplore Mobile Canada */
+        case 243: /* Globe/Philippine */
+        case 245: /* Vietnamobile/Vietnam */
+        case 255: /* Cellular One */
+        case 257: /* Viaero/US */
+        case 267: /* GCI/US */
+		case 271: /* Sagebrush(Nemont) */
+		case 273: /* OptimERA */
+        case 274: /* Yoigo/Spain */
+        case 275: /* Lifecell/Ukraine */
+        case 276: /* AlticeUSA */
+        case 277: /* Telemach Slovenia */
+        case 278: /*Jazz Pakistan */
+        case 279: /*DITO Philippines */
+        case 281: /* Kyivstar/Ukraine */
+        case 283: /* MEO Portugal */
+        case 284: /* MTS Serbia */
+        case 286: /* MNShubs */
+        case 287: /* Free France */
+        case 288: /* Virgin UK */
+        case 291: /* LMT Latvia */
+        case 294: /*MPT Myanmar*/
+        case 295: /*NTC Nepal*/
+        case 297: /* Fastweb Italy*/
+        case 298: /*Umniah */
+        case 299: /* NRJ France*/
+        case 302: /* Ooredoo Oman*/
+        case 304: /*CTMO Macau */
+        case 306: /*HKCU Hongkong */
+        case 315: /*Beeline Kazakhstan*/
+        case 319: /* Monaco Telecom/Epic Cyprus */
+        case 321: /*Ora(viti) french*/
+        case 314: /* TelePost/Greenland */
+        case 317: /* Commnet, Choice */
+        case 318: /* Vianova Italy */
+        case 320: /* Coriolis France */
+        case 322: /* UPC Switzerland  */
+        case 323: /* Lycamobile Italy */
+        case 329: /* Plintron Italy */
+        case 336: /* Mobifone Vietnam */
+        case 338: /* Spusu Austria */
+        case 342: /* ECOTEL/Canada */
+        case 344: /* 4ka/Slovakia */
+        case 345: /* PrimeTel Cyprus */
+        case 348: /* NCell/Nepal*/
+        case 350: /* Gibtelecom/Gibraltar */
+        case 354: /* Poste Mobile Italy */
+        case 357: /* Ecuador / CNT */
+        case 363: /* C Spire */
+		case 364: /* United Wireless */
+		case 365: /* Illinois Valley Cellular */
+		case 366: /* Appalachian Wireless */
+		case 367: /* James Valley Wireless */
+		case 368: /* Pioneer Cellular */
+		case 369: /* Pine Belt Wireless */
+		case 370: /* STRATA */
+		case 371: /* Silver Star */
+		case 372: /* OneComm */
+		case 373: /* Cordova Wireless */
+		case 374: /* Copper Valley Wireless */
+		case 375: /* Blue Wireless */
+		case 376: /* Inland Cellular */
+		case 378: /* Geoverse */
+        case 383: /* Magti/Georgia */
+        case 386: /* ENetworks/Guyana */
+        case 387: /* West Central Wireless */
+        case 389: /* Unitel/Loas */
+		case 390: /* LTC-Mobile/Liberia */
+		case 392: /* MobileNation */
+        case 397: /* MECTEL/Myanmar */
+        case 1002: /* Nokia Finland */
+        case 1004: /* Huawei IMS */
+        case 0x6001: /* Sony GTE/Beijing */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            else if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            break;
+        }
+        case 3: /* Orange */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* Morocco */
+            else if (strncmp((char *)&mccmnc[0], "604", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc000.mcc604.3gppnetwork.org");
+            }
+            else if (strncmp((char *)&mccmnc[0], "605", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "conf-cr1tas1.salt.ch");
+            }
+            else if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            break;
+        }
+        case 6: /* VDF */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* ltaly */
+            else if (strncmp((char *)&mccmnc[0], "222", 3) == 0) {
+                if (imsi_mnc_len == 2) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:40770@ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+                else if (imsi_mnc_len == 3) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:40770@ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+            }
+            /* Netherlands */
+            else if (strncmp((char *)&mccmnc[0], "204", 3) == 0) {
+                if (imsi_mnc_len == 2) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@conference.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+                else if (imsi_mnc_len == 3) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@conference.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+            }
+            /* South Africa */
+            else if (strncmp((char *)&mccmnc[0], "655", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:1428@ims.vodacom.co.za");
+            }
+            /* Ireland */
+            else if (strncmp((char *)&mccmnc[0], "272", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:teleconferenceuri-factory@ims.vodafone.ie");
+            }
+            /* Default (Spain/Germany/Portugal/Romania/UK/Turkey/Czech/Zambia/Hungary/Albania...) */
+            else {
+                if (imsi_mnc_len == 2) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+                else if (imsi_mnc_len == 3) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+            }
+            break;
+        }
+        case 7: /* AT&T */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* Mexico */
+            else if (strncmp((char *)&mccmnc[0], "334", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:ALU_CONF@ims.attmex.mx");
+            }
+            /* LLA */
+            else if (strncmp((char *)&mccmnc[0], "313790", 6) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }  
+            /* Default/Others */
+            else {
+                /* For AT&T/Cricket/FirstNet, set to "sip:n-way_voice@domain_name". Config during RT_SETTING */
+            }
+            break;
+        }
+        case 8: /* TMOUS */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:+18881112663@msg.pc.t-mobile.com");
+            break;
+        }
+        case 11: /* H3G */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* UK */
+            else if (strncmp((char *)&mccmnc[0], "234", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:Conf-Factory@three.co.uk");
+            }
+            /* Ireland */
+            else if (strncmp((char *)&mccmnc[0], "272", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@factory.ims.mnc005.mcc272.3gppnetwork.org");
+            }
+            /* Sweden, Denmark, Austria */
+            else {
+                if (imsi_mnc_len == 2) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+                else if (imsi_mnc_len == 3) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+            }
+            break;
+        }
+        case 12: /* VzW */
+        {
+            if (special_profile & IMS_SPECIAL_PROFILE_VISIBLE_SIM) {
+                /* visible sim: Legacy */
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:confserver@vsblims.com");
+            }
+            else if (special_profile & IMS_SPECIAL_PROFILE_VISIBLE_SIM_VZ_CORE) {
+                /* visible sim: VZ Core */
+                /* VzW_2022Feb_VZ_REQ_VISIBLE_4105999311951233 */
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:confserver@vzims.com");
+            } else {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:confserver@vzims.com");
+            }
+            break;
+        }
+        case 15: /* Telefonica */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* Germany */
+            else if (strncmp((char *)&mccmnc[0], "262", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:teleconferenceuri-factory@telefonica.de");
+            }
+            /* Default/UK/Spain */
+            else {
+                if (imsi_mnc_len == 2) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+                else if (imsi_mnc_len == 3) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+            }
+            break;
+        }
+        case 20: /* Sprint */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf@imcns.spcsdns.net");
+            break;
+        }
+        case 21:  /* DISH */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* Default/Others */
+            else {
+                /* For DISH, set to "sip:n-way_voice@ims.mnc340.mcc313.3gppnetwork.org". Config during RT_SETTING */
+            }
+            break;
+        }
+        case 100: /* CSL */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            else if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference-factory@ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference-factory@ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            break;
+        }
+        case 101: /* PCCW */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            else if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf-factory.ics.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf-factory.ics.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            break;
+        }
+        case 102: /* SMT */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            else if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            break;
+        }
+        case 106: /* 3HK */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            else if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:19099@ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:19099@ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            break;
+        }
+        case 103: /* SingTel */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@conference.ims.singtel.com");
+            break;
+        }
+        case 104: /* Starhub */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:shconf@ims.mnc005.mcc525.3gppnetwork.org");
+            break;
+        }
+		case 105: /*  Claro/Paraguay */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc002.mcc744.3gppnetwork.org");
+            break;
+        }
+        case 108: /* TWN */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf-factory@ims.taiwanmobile.com");
+            break;
+        }
+        case 118: /* YTL */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference-factory@yes.my");
+            break;
+        }
+        case 120: /* Claro */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /*Chile*/
+            else if (strncmp((char *)&mccmnc[0], "730", 3) == 0) {
+               kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc003.mcc730.3gppnetwork.org");
+            }
+            else {
+                if (imsi_mnc_len == 2) {
+                   kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+                else if (imsi_mnc_len == 3) {
+                   kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+            }
+            break;
+        }
+         case 121: /* BELL */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf@ims.bell.ca");
+            break;
+        }
+        case 122: /* AIS */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf@ims.mnc03.mcc520.3gppnetwork.org");
+            break;
+        }
+        case 124: /* APTG */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:APT_CONF@volte.aptg.com.tw");
+            break;
+        }
+        case 125: /* DTAC */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc005.mcc520.3gppnetwork.org");
+            break;
+        }
+        case 126: /* Turkey Avea */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc003.mcc286.3gppnetwork.org");
+            break;
+        }
+        case 128: /* DNA Finland */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc012.mcc244.3gppnetwork.org");
+            break;
+        }
+        case 129: /*KDDI*/
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@3pty-factory.ims.mnc051.mcc440.3gppnetwork.org");
+            break;
+        }
+        case 130: /* TIM */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* Brazil */
+            else if (strncmp((char *)&mccmnc[0], "724", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "tel:1234");
+            }
+            /* Default/Italy */
+            else {
+                if (imsi_mnc_len == 2) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+                else if (imsi_mnc_len == 3) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+            }
+            break;
+        }
+        case 131: /* TrueMove */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* Thailand */
+            else if (strncmp((char *)&mccmnc[0], "520", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf-factory.ics.mnc004.mcc520.3gppnetwork.org");
+            }
+            else {
+                if (imsi_mnc_len == 2) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf-factory.ics.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+                else if (imsi_mnc_len == 3) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf-factory.ics.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+            }
+            break;
+        }
+        case 132: /* Movistar */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* Colombia */
+            else if (strncmp((char *)&mccmnc[0], "732", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@ims.mnc123.mcc732.3gppnetwork.org");
+            }
+            /* Mexico */
+            else if (strncmp((char *)&mccmnc[0], "334", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@factory.ims.movistar.mx");
+            }
+            /*Chile*/
+            else if (strncmp((char *)&mccmnc[0], "730", 3) == 0) {
+                if (imsi_mnc_len == 2) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+                else if (imsi_mnc_len == 3) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+            }
+            /* other countries*/
+            else if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            break;
+        }
+        case 133: /* DU UAE*/
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:1234@ims.du.ae");
+            break;
+        }
+        case 134: /* Elisa */
+        {
+            /* Finland */
+            if (strncmp((char *)&mccmnc[0], "244", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:7888@ims.mnc005.mcc244.3gppnetwork.org");
+            }
+            /* Estonia */
+            else if (strncmp((char *)&mccmnc[0], "248", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc002.mcc248.3gppnetwork.org");
+            }
+            break;
+        }
+        case 136: /* Entel */
+        {
+            /* Bolivia */
+            if (strncmp((char *)&mccmnc[0], "736", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:4444@entel.bo");
+            }
+            else if (!with_imsi_info) {
+                //dynacmic generate
+                if (imsi_mnc_len == 2) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+                else if (imsi_mnc_len == 3) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+            }
+            break;
+        }
+        case 137: /* Tele2 */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* Russia */
+            else if (strncmp((char *)&mccmnc[0], "250", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "Sip:conference@ims.mnc020.mcc250.3gppnetwork.org");
+            }
+            /* other countries */
+            else if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            break;
+        }
+        case 145: /* Cricket */
+        {
+            /* For AT&T/Cricket/FirstNet, set to "sip:n-way_voice@domain_name". Config during RT_SETTING */
+            break;
+        }
+        case 146: /* Etisalat */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* United Arab Emirates */
+            else if (strncmp((char *)&mccmnc[0], "424", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:atsconf@ims.mnc002.mcc424.3gppnetwork.org");
+            }
+            /* other countries*/
+            else if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            break;
+        }
+        case 148: /*Seatel*/
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:1234;phone-context=ims.mnc011.mcc456.3gppnetwork.org@ims.mnc011.mcc456.3gppnetwork.org;user=phone");
+            break;
+        }
+        case 149: /* CMHK */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@conference.ims.cmhk.net");
+            break;
+        }
+        case 151: /* M1 */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf-factory@ims.mnc003.mcc525.3gppnetwork.org");
+            break;
+        }
+        case 155: /* Digi */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* Hungary, Romania */
+            else if ((strncmp((char *)&mccmnc[0], "216", 3) == 0) ||
+                    (strncmp((char *)&mccmnc[0], "226", 3) == 0)) {
+                if (imsi_mnc_len == 2) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+                else if (imsi_mnc_len == 3) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+            }
+            break;
+        }
+        case 156: /* Telenor */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* Denmark */
+            else if (strncmp((char *)&mccmnc[0], "238", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf-factory@ims.mnc002.mcc238.3gppnetwork.org");
+            }
+            /* Pakistan*/
+            else if (strncmp((char *)&mccmnc[0], "410", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.mnc006.mcc410.3gppnetwork.org");
+            }
+            /* other countries */
+            else if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            break;
+        }
+        case 157: /* Telus */
+        {
+            if (!with_imsi_info) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:factory@conference.ims.mnc220.mcc302.3gppnetwork.org");
+            }
+            else if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:factory@conference.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:factory@conference.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            break;
+        }
+        case 158: /* Zain */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            else if (strncmp((char *)&mccmnc[0], "420", 3) == 0) {   /* Saudi Arabia  */
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf.mnc004.mcc420.3gppnetwork.org");
+            }
+            else if (strncmp((char *)&mccmnc[0], "419", 3) == 0) {   /* Kuwait */
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:1234@ims.mnc002.mcc419.3gppnetwork.org");
+            }
+            break;
+        }
+        case 159: /* STC Saudi Arabia */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            else if (strncmp((char *)&mccmnc[0], "420", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:confuri@fmc.stc.com.sa");
+            }
+            else if (strncmp((char *)&mccmnc[0], "419", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@ims.mnc004.mcc419.3gppnetwork.org");
+            }
+            else if (strncmp((char *)&mccmnc[0], "426", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc004.mcc426.3gppnetwork.org");
+            }
+            break;
+        }
+        case 162: /* Freedom */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf@mobilefrdm.ca");
+            break;
+        }
+        case 166: /* Salt Switzerland */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@salt.ch");
+            break;
+        }
+        case 172: /* Altice */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc001.mcc370.3gppnetwork.org");
+            break;
+        }
+        case 176: /* Tstar */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:TSTAR_CONF@ims.mnc089.mcc466.3gppnetwork.org");
+            break;
+        }
+        case 177: /* Telecom Egypt */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc004.mcc602.3gppnetwork.org");
+            break;
+        }
+        case 179: /* Newroz */
+        {
+            if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@conference.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            break;
+        }
+        case 185:/*2degrees / New Zealand*/
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@conf-factory.ims.mnc024.mcc530.3gppnetwork.org");
+            break;
+        }
+        case 188: /* A1 Austria */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* Austria */
+            else if (strncmp((char *)&mccmnc[0], "232", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:*28@ims.mnc001.mcc232.3gppnetwork.org");
+            }
+            /* Belarus */
+            else if (strncmp((char *)&mccmnc[0], "257", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:*28@ims.mnc001.mcc257.3gppnetwork.org");
+            }
+            /* Slovenia/Bulgaria/Croatia */
+            else {
+                if (imsi_mnc_len == 2) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+                else if (imsi_mnc_len == 3) {
+                    kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+            }
+            break;
+        }
+        case 195: /* O2 */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            else if (strncmp((char *)&mccmnc[0], "231", 3) == 0) {   /* Slovakia */
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc006.mcc231.3gppnetwork.org");
+            } 
+            else if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }                
+            break;
+        }
+        case 204: /* Rogers Canada */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc720.mcc302.3gppnetwork.org");
+            break;
+        }
+        case 207: /* CTM@MACAU */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf-factory.ics.mnc001.mcc455.3gppnetwork.org");
+            break;
+        }
+
+        case 208: /* 3@MACAU */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@ims.mnc003.mcc455.3gppnetwork.org");
+            break;
+        }
+        case 209: /* Avantel */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* Colombia */
+            else if (strncmp((char *)&mccmnc[0], "732", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:+7979@ims.avt.com");
+            }
+            break;
+        } 
+        case 213: /* Motiv */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* Russia */
+            else if (strncmp((char *)&mccmnc[0], "250", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc035.mcc250.3gppnetwork.org");
+            }
+            break;
+        }
+        case 223: /* Ooredoo */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /*Kuwait*/
+            else if (strncmp((char *)&mccmnc[0], "419", 3) == 0) {
+               kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@ims.mnc003.mcc419.3gppnetwork.org");
+            }
+            else {
+                if (imsi_mnc_len == 2) {
+                   kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+                else if (imsi_mnc_len == 3) {
+                   kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+                }
+            }
+            break;
+        }
+        case 227: /* Wind */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            else if (strncmp((char *)&mccmnc[0], "202", 3) == 0) {   /* Greece */
+                 kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf@ims.wind.gr");
+            }
+            else if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }  
+            break;
+        }
+        case 228:/* Celcom */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            else if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            break;
+        }
+        case 236: /* USCC */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:usccconf@usccims.com");
+            break;
+        }
+        case 238:/* VideoTron */
+        {
+            if ( with_imsi_info && (imsi_mnc_len == 2)) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@factory.ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            } else if ( with_imsi_info && (imsi_mnc_len == 3)) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@factory.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            } else {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@factory.ims.mnc500.mcc302.3gppnetwork.org");
+            }
+            break;
+        }
+        case 282: /* Mobily */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf-factory.ims.mnc003.mcc420.3gppnetwork.org");
+            break;
+        }
+        case 289: /* Batelco */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc001.mcc426.3gppnetwork.org");
+            break;
+        }
+      
+        case 292: /* CMHK-HKIA/Hongkong */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@conference.ims.cmhk.net");
+            break;
+        }
+        case 324: /* Moldcell/Moldova */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf@ims.mnc002.mcc259.3gppnetwork.org"); 
+            break;
+        }
+        case 327: /* SaskTel/CA */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            /* Lab: 302990 */
+            else if (strncmp((char *)&mccmnc[3], "990", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@imstas.stb1.com");
+            }
+            /* Production: 302780 */
+            else if (strncmp((char *)&mccmnc[3], "780", 3) == 0) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@ibc.sasktel.com");
+            }
+            break;
+        }
+        case 332: /* SoLinc/USA */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf-factory@conference.ims.mnc720.mcc312.3gppnetwork.org");
+            break;
+        }
+        case 333: /* Cellcom */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:confserver@ims.cellcom.com");
+            break;
+        }
+		case 337: /* Antel-Uruguay */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:mmtel@conf-factory.ims.mnc001.mcc748.3gppnetwork.org");
+            break;
+        }
+        case 359: /* Bahamas / Aliv */
+        {
+            if (!with_imsi_info) {
+                //dynacmic generate
+            }
+            else if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "conf_uri@ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "conf_uri@ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            break;
+        }
+        case 379: /* PTCI / US */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:confserver@ic.ptci.mobi");
+            break;
+        }
+        case 1001: /* Ericsson IMS IWLAN */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@conference.tcs.ics.se");
+            break;
+        }
+        case 1003: /* HQLAB ERICSSON */
+        {
+            if (!with_imsi_info) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf-factory@ims.mnc099.mcc240.3gppnetwork.org");
+            }
+            else if (imsi_mnc_len == 2) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf-factory@ims.mnc0%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            else if (imsi_mnc_len == 3) {
+                kal_snprintf((char *)conf_factory_uri, len-1, "sip:conf-factory@ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            break;
+        }
+        case 0x6000: /* Sony GTE/Lund */
+        {
+            kal_snprintf((char *)conf_factory_uri, len-1, "sip:conference@conference.gtec01.ims.se");
+            break;
+        }
+        default: break;
+    }
+
+    return KAL_TRUE;
+}
+
+static kal_bool set_psismsc_by_imsi(kal_uint8 *default_psismsc, kal_bool with_imsi_info, kal_uint8 imsi_mnc_len, kal_uint8 *mccmnc, kal_uint32 op_id, kal_uint32 special_profile) {
+    kal_uint8 len=64;
+    switch (op_id) {
+        case 7:     /* AT&T */
+        {
+            if (!with_imsi_info) {
+                // psismsc from SIMMNG
+            }
+            /* LLA */
+            else if (strncmp((char *)&mccmnc[0], "313790", 6) == 0) {
+                kal_snprintf((char *)default_psismsc, len-1, "sip:ipsmgw@ipsmgw.ims.mnc%c%c%c.mcc%c%c%c.3gppnetwork.org", mccmnc[3], mccmnc[4], mccmnc[5], mccmnc[0], mccmnc[1], mccmnc[2]);
+            }
+            /* non-LLA */
+            else {
+                kal_snprintf((char *)default_psismsc, len-1, "sip:smsc@ims.mnc001.mcc001.3gppnetwork.org");
+            }
+            break;
+        }
+        case 20:    /* Sprint */
+        {
+            kal_snprintf((char*)default_psismsc, len-1, "sip:ipsmgw@imcns.spcsdns.net");
+            break;
+        }
+        case 116:   /* LGuplus_Korea */
+        {
+            kal_snprintf((char*)default_psismsc, len-1, "sip:ipsmgw.lte-lguplus.co.kr");
+            break;
+        }
+        default:
+        {
+            kal_snprintf((char *)default_psismsc, len-1, "sip:smsc@ims.mnc001.mcc001.3gppnetwork.org");
+            break;
+        }
+    }
+    return KAL_TRUE;
+}
+
+void imc_set_mtk_default_value(nvram_ef_ims_profile_record_struct *nvram_ims_profile_ptr) {
+    nvram_ua_struct *ua;
+    nvram_imc_struct *imc;
+
+    ua = &nvram_ims_profile_ptr->ua_config;
+    imc = &nvram_ims_profile_ptr->imc_config;
+
+    memset(nvram_ims_profile_ptr, 0, sizeof(nvram_ef_ims_profile_record_struct));
+
+    /* nvram_ua_struct */
+    ua->local_port = 5060;
+    ua->pcscf_port_number = 5060;
+    ua->ipsec_local_port_start = 50000;
+    ua->ipsec_local_port_range = 50;
+    ua->rtp_rtcp_local_port_start = 40000;
+    ua->rtp_rtcp_local_port_range = 5000;
+    ua->rtcp_interval = 5000;
+    ua->sip_dscp = 26;
+    ua->sip_priority = 7;
+    ua->audio_dscp = 40;
+    ua->audio_priority = 5;
+    ua->video_dscp = 20;
+    ua->video_priority = 4;
+    ua->register_expiry = 600000;
+    ua->UA_reg_t1_timer = 2000;
+    ua->UA_reg_t2_timer = 16000;
+    ua->UA_reg_t4_timer = 17000;
+    ua->UA_reg_a_timer = 0;
+    ua->UA_reg_b_timer = 0;
+    ua->UA_reg_c_timer = 180000;
+    ua->UA_reg_d_timer = 128000;
+    ua->UA_reg_e_timer = 0;
+    ua->UA_reg_f_timer = 0;
+    ua->UA_reg_g_timer = 0;
+    ua->UA_reg_h_timer = 0;
+    ua->UA_reg_i_timer = 0;
+    ua->UA_reg_j_timer = 0;
+    ua->UA_reg_k_timer = 0;
+    ua->UA_reg_retry_base_time = 0;
+    ua->UA_reg_retry_max_time = 0;
+    ua->UA_call_conf_subtimer = 3600;
+    ua->UA_call_session_timer = 1800;
+    ua->UA_call_amr_fmt_variant = 0x1010;
+    ua->VoLTE_Setting_SIP_Force_Use_UDP = 0;
+    ua->VoLTE_Setting_SIP_TCP_On_Demand = 1;
+    ua->VoLTE_Setting_SIP_TCP_MTU_Size = 1300;
+    ua->VoLTE_Setting_SIP_TCP_MSS = 1200;
+    ua->UA_call_session_min_se = 1800;
+    ua->UA_call_rej_code = 486;
+    ua->UA_call_no_resource_code = 480;
+    ua->UA_call_rej_media_code = 488;
+    ua->UA_call_rej_by_user_code = 486;
+    ua->operator_code = 0;
+    ua->sms_rspcode = 200;
+    ua->local_sip_protocol_type = 0;
+    ua->UA_g711_ptime = 20;
+    ua->UA_g726_ptime = 20;
+    ua->UA_call_codec_order1 = 2;
+    ua->UA_call_codec_order2 = 1;
+    ua->UA_call_codec_order3 = 0;
+    ua->UA_call_def_max_ptime = 240;
+    ua->UA_call_def_ptime = 20;
+    ua->UA_call_amr_pt = 97;
+    ua->UA_call_amr_oct_pt = 108;
+    ua->UA_call_amr_open_pt = 106;
+    ua->UA_call_amr_wb_pt = 98;
+    ua->UA_call_amr_wb_oct_pt = 110;
+    ua->UA_call_h264_pt = 114;
+    ua->UA_call_h264_pt2 = 115;
+    ua->UA_call_h265_pt = 101;
+    ua->UA_call_h265_pt2 = 102;
+    ua->UA_call_evs_pt = 127;
+    ua->UA_call_g729_annexb = 1;
+    ua->UA_call_g729_ptime = 20;
+    ua->UA_call_priority = 0;
+    ua->UA_call_privacy = 0;
+    ua->UA_call_session_flag = 1;
+    ua->UA_call_tel_evt = 1;
+    ua->UA_call_tel_evt_pt = 100;
+    ua->UA_call_tel_evt_wb_pt = 105;
+    ua->UA_call_precondition = 1;
+    ua->early_media = 0;
+    ua->mwi_license = 0;
+    ua->UA_reg_keep_alive = 0;
+    ua->uri_type = 0x03; //(sip+tel)
+    /*
+    Reference to enum define in Reg/Stack
+    enum VOLTE_REG_IPSEC_RULE_e {
+        VOLTE_REG_IPSEC_NONE        = 0,
+        VOLTE_REG_IPSEC_NORMAL_ONLY = 1 << 0,
+        VOLTE_REG_IPSEC_EMERG_ONLY  = 1 << 1,
+        VOLTE_REG_IPSEC_ALL         = VOLTE_REG_IPSEC_NORMAL_ONLY | VOLTE_REG_IPSEC_EMERG_ONLY,
+    };
+    */
+    ua->UA_net_ipsec = 0x03;
+    ua->UA_reg_uri_with_port = 0;
+    ua->UA_reg_ipsec_algo = 0x3f;
+    ua->UA_reg_http_digest = 0;
+    ua->UA_reg_specific_ipsec_algo = 0;
+    ua->UA_call_mo_invite_to_bw_cnf_time = 0;
+    ua->ipv6_zero_compression = 0;
+    ua->support_max_retry_algo = 0;
+    ua->UA_ussd_nw_timeout_timer = 0x3c;
+    ua->UA_ussd_setup_timeout_timer = 0;
+    ua->reject_early_dlg_more_than_max = 0;
+    ua->send_bye_when_term_early_dlg = 0;
+    ua->tty_enable = 0;
+    ua->tty_t140_pt = 111;
+    ua->tty_red_pt = 112;
+    ua->tty_red_level = 2;
+    ua->tty_cps = 30;
+    kal_snprintf((char *)ua->user_agent, 128-1, "VoLTE/WFC UA");
+    kal_snprintf((char *)ua->UA_call_amr_mode_set, 16, "0,1,2,3,4,5,6,7");
+    kal_snprintf((char *)ua->UA_call_amr_wb_mode_set, 20-1, "0,1,2,3,4,5,6,7,8");
+    kal_snprintf((char *)ua->UA_icsi_1, 64-1, "urn:urn-7:3gpp-service.ims.icsi.mmtel");
+    kal_snprintf((char *)ua->UA_icsi_2, 64-1, "urn:urn-7:3gpp-service.ims.icsi.mmtel");
+    kal_snprintf((char *)ua->UA_icsi_3, 64-1, "urn:urn-7:3gpp-service.ims.icsi.mmtel");
+    kal_snprintf((char *)ua->UA_icsi_4, 64-1, "urn:urn-7:3gpp-service.ims.icsi.mmtel");
+    memset((void *)ua->UA_phone_context, 0, 64);
+    memset((void *)ua->UA_reg_auth_name, 0, 64);
+    memset((void *)ua->UA_reg_auth_password, 0, 32);
+    memset((void *)ua->UA_phone_context_associated_impu, 0, 128);
+    memset((void *)ua->UA_conf_factory_uri, 0, 128);
+
+    ua->reject_code_in23G = 503;
+    ua->conf_sub_timer_timeout = 3600;
+    ua->cisrvcc = 0xffffffff;
+    ua->contact_with_username_inCall = 1;
+    ua->sendrecv_before_prcd = 1;
+    ua->always_use_UPDATE_for_prcd = 0;
+    ua->merge_need_swap = 0;
+    ua->always_use_sip_uri_for_mo_call = 1;
+    ua->set_strength_mandatory = 0;
+    ua->send_refer_to_peer = 0;
+    ua->add_3gpp_ims_in_Accept = 0;
+    ua->terminal_based_cw = 1;
+    ua->refer_dialog_to_server = 0;
+    ua->check_reason_phrase = 0;
+    ua->merge_send_bye = 1;
+    ua->when_stop_tcall = 101;
+    ua->set_rtcp_0 = 0;
+    ua->check_contact_380 = 0;
+    ua->conf_participant_not_subscribe = 0;
+    ua->add_sdp_in_180_for_non_precond = 0;
+    ua->add_precondition_in_hold_unhold_sdp = 1;
+    ua->use_org_sdp_for_invite_without_sdp = 0;
+    ua->oir_privacy_to_header = 0;
+    ua->register_cap_whenever = 0;
+    ua->no_auto_retry_for_mo_call = 0;
+    ua->use_eps_prefix_in_phone_context = 1;
+    ua->follow_nw_ims_vops_support = 0;
+    ua->attempt_reg_when_receive403 = 1;
+    ua->waiting_487_for_cancel_timer_timeout = 0;
+    ua->bcsfb_feature_enable = 0;
+    ua->send_183_when_prcd_none = 1;
+    ua->call_id_with_host_inCall = 0;
+    ua->add_rtcp_port_into_sdp = 0;
+    ua->ecc_session_timer_enable = 1;
+    ua->subscribe_dialog_to_server = 0;
+    ua->check_conference_subscribe = 0;
+    ua->conference_subscribe_timing = 0;
+    ua->general_amr_nb_wb = 0;
+    ua->disable_conf_call_prcd = 0;
+    ua->wait_cancel_in_srvcc_end = 0;
+    ua->reject_1w_if_1A1H = 0;
+    ua->no_auto_retry_for_dcm_mo_call = 0;
+    ua->join_send_bye = 1;
+    ua->set_zero_cell_id_in_wifi = 0;
+    ua->reject_mtcall_by_vops = 0;
+    ua->reject_mtcall_when_vilte = 0;
+    ua->not_add_SDP_in_OPTIONS = 0;
+    ua->pcscf_error_when663 = 0;
+    ua->rel_conf_if_no_participant = 0;
+    ua->add_no_fork = 0;
+    ua->TMO_specific_SDP =  0;
+    ua->call_ringing_timer_timeout = 0;
+    ua->call_ringback_timer_timeout = 0;
+    ua->call_tcall_timer_timeout = 10;
+    ua->call_refreshcall_timer_expire = 0;
+    ua->call_callend_timer_timeout = 10;
+    ua->waiting_mt_cnf_timer_timeout = 30;
+    ua->mo_invite_to_bw_cnf_timer_timeout = 0;
+    ua->evs_support = 0;
+    ua->evs_mode_switch = 0;
+    ua->hf_only = 0;
+    ua->dtx = 1;
+    ua->dtx_recv = 1;
+    ua->br_begin = 0;
+    ua->br_end = 4;
+    ua->br_send_begin = 0;
+    ua->br_send_end = 4;
+    ua->br_recv_begin = 0;
+    ua->br_recv_end = 4;
+    ua->bw_begin = 0;
+#if defined(__EVS_MAX_BW_FB__)
+    ua->bw_end = 3;
+    ua->bw_send_end = 3;
+    ua->bw_recv_end = 3;
+#elif defined(__EVS_MAX_BW_SWB__)
+    ua->bw_end = 2;
+    ua->bw_send_end = 2;
+    ua->bw_recv_end = 2;
+#else
+    /* __EVS_MAX_BW_WB__ */
+    ua->bw_end = 1;
+    ua->bw_send_end = 1;
+    ua->bw_recv_end = 1;
+#endif
+    ua->bw_send_begin = 0;
+    ua->bw_recv_begin = 0;
+    ua->ch_send = 1;
+    ua->ch_recv = 1;
+    ua->ch_aw_recv = 2;
+    ua->cmr = 0;
+    ua->short_code_support = 0;
+    ua->early_media_when_rtp_coming = 0;
+    ua->session_refresher_in_req = 0;
+    ua->session_refresher_in_resp = 0;
+    ua->wfc_emerg_pidf_country = 0;
+    ua->set_des_strength_optional = 0;
+    ua->conf_user_count_includes_host = 1;
+    ua->ecn_init_method = 0;
+    ua->histinfo_in_supported = 0;
+    ua->add_country_to_pani = 0;
+    ua->delay_unhold_call = 0;
+    ua->use_pub_uid_in_ref_to = 0;
+    ua->prefer_original_codec = 1;
+    ua->add_audio_video_in_delay_media = 1;
+    ua->add_contact_in_bye = 0;
+    ua->resp_precondition_without_bw_cnf = 0;
+    ua->wait_second_invite_for_hold = 0;
+    ua->no_feature_caps_process = 0;
+    ua->delay_ringing = 0;
+    ua->add_framerate = 0;
+    ua->add_framesize = 0;
+    ua->add_imageattr = 0;
+    ua->force_srvcc_transfer = 0x07;
+    ua->srvcc_feature_enable = 0x000F;
+    ua->rtcp_xr_support = 0;
+    ua->rtcp_xr_format = 0x0030;
+    ua->rtcp_xr_loss_maxsize = 0;
+    ua->rtcp_xr_dup_maxsize = 0;
+    ua->rtcp_xr_rcpt_maxsize = 0;
+    ua->rtcp_xr_rtt_maxsize = 0;
+    ua->rtcp_xr_rtt_mode = 0;
+    ua->rtcp_xr_stat_flags = 0x17;
+    ua->show_octet_align = 1;
+    ua->video_conf_if_one_is_video = 0;
+    ua->use_from_to_append_pau = 1;
+    ua->call_rel_holdcall_in_midcall_SRVCC = 0;
+    ua->call_lte_emc_timer_timeout = 0;
+    ua->always100rel_in_resp = 0;
+    ua->use_183_for_early_media = 0;
+    ua->call_pull_sub_expire = 7200;
+    ua->be_refresher_without_peer_support = 0;
+    ua->ect_assured_notify_timer_timeout = 30;
+    ua->ect_new_call_type = 0;
+    ua->ect_refer_in_new_dialog = 0;
+    ua->ect_without_target_hold = 0;
+    ua->ect_default_type = 2;
+    ua->ect_refer_to_tag_swap = 0;
+    kal_snprintf((char *)ua->UA_call_conf_amr_wb_mode_set, 20-1, "0,1,2,3,4,5,6,7,8");
+    ua->session_id_header_enable = 0;
+    ua->video_action_precondition = 0;
+    ua->bypass_conf_qos_check_in_delay_media = 0;
+    ua->transfer_conf_call_as_1to1 = 1;
+    ua->timer_b_restore_reg = 1;
+    ua->check_curr_qos = 1;
+    ua->reject_no_answer_resp_code = 486;
+    ua->call_ringing_timeout_code = 486;
+    ua->auto_unhold_when_rcv_recvonly = 0;
+    ua->sendrecv_before_conf_call_prcd = 0;
+    ua->err_handling_for_video_via_update = 1;
+    ua->pem_use_sdp_rtp_drct = 0;
+    ua->ignore_trans_err_in_active = 1;
+    ua->add_cni_in_wifi = 0x00;
+    ua->text_feature_tag = 0;
+    ua->call_emc_rtt_cb_timeout = 0;
+    ua->disable_amr_params_in_wfc_call = 0;
+    ua->mod_session_cnf_timer_timeout = 0;
+    ua->psismsc_from_user = 0;
+    ua->force_psi_scheme_to_tel = 0;
+    ua->add_user_phone = 1;
+    ua->update_call_id_with_host = 0;
+    ua->add_no_fork_in_SMS = 0;
+    ua->nsn_specific = 0;
+    ua->mo_retry_after_504 = 0;
+    ua->send_timerF_expiry = 0;
+    ua->imsi_reged_disable_sms = 0;
+    ua->sms_network_types = 0x03; //(LTE+WIFI)
+    ua->sms_support_in_23g = 1;
+    ua->sms_follow_nw_ims_vops_support = 0;
+    ua->restore_in_3gpp_abnormal = 1;
+    ua->keep_alive_mode = 0;
+    ua->tcp_connect_max_time_invite = 10;
+    ua->retry_interval_after_403 = 0;
+    ua->contact_with_username = 1;
+    ua->contact_with_transport = 1;
+    ua->contact_with_regid = 0;
+    ua->contact_with_mobility = 0;
+    ua->contact_with_expires = 0;
+    ua->authorization_with_algo = 0;
+    ua->rereg_in_rat_change = 0;
+    ua->rereg_in_oos_end = 0;
+    ua->de_subscribe = 1;
+    ua->use_specific_ipsec_algo = 0;
+    ua->try_next_pcscf = 0;
+    ua->dereg_clear_ipsec = 0;
+    ua->initial_reg_without_pani = 0;
+    ua->dereg_reset_tcp_client = 0;
+    ua->treg = 0;
+    ua->rereg_23g4 = 0;
+    ua->resub_23g4 = 0;
+    ua->not_auto_reg_403 = 0; // 0: disable, 1: block for all plmn, 2: disable for vplmn only
+    ua->call_id_with_host_inReg = 0;
+    ua->ems_mode_ind = 0;
+    ua->contact_with_accesstype = 0;
+    ua->wfc_with_plani = 0;
+    ua->use_udp_on_tcp_fail = 1;
+    ua->ipsec_fail_allowed = 1;
+    ua->contact_with_video_feature_tag_in_subscribe = 0;
+    ua->via_without_rport = 0;
+    ua->reg_route_hdr = 0;
+    ua->via_uri_with_default_port = 0;
+    ua->notify_sms_notify_done = 0;
+    ua->emergency_use_imsi = 0;
+    ua->check_msisdn = 0;
+    ua->support_throttling_algo = 0;
+    ua->reg_after_nw_dereg_60s = 0;
+    ua->sub_contact_with_sip_instance = 0;
+    ua->stop_reg_md_lower_layer_err = 0;
+    ua->reg_gruu_support = 1;
+    ua->oos_end_reset_tcp_client = 0;
+    ua->wfc_refresh_23g = 0;
+    ua->pidf_country = 0;
+    ua->init_reg_backoff_enabled = 0;
+    ua->reg_fail_not_need_remove_binding = 1;
+    ua->pend_dereg_in_initial_reg = 0;
+    ua->access_network_info_type = 0;
+    ua->when_stop_b_timer = 100;
+    memset((void *)ua->rcs_feature, 0, 12);
+    ua->try_next_pcscf_5626 = 0;
+    ua->try_same_pcscf_rereg = 0;
+    ua->reg_try_all_pcscf_5626 = 0;
+    ua->close_unprotected_conn = 0;
+    ua->need_revise_rtp_dir = 0;
+    ua->calc_participant_count_from_notify = 0;
+    ua->dereg_send_bye = 0;
+    ua->tdelay = 5;
+    ua->try_n_next_pcscf_5626 = 0;
+    ua->dereg_delay_time = 0;
+    ua->try_same_pcscf_if_retry_after = 0;
+    ua->contact_wildcard_dereg = 0;
+    ua->check_notify_instance_id = 0;
+    ua->add_cs_volte_feature_tag = 0;
+    ua->check_call_domain = 0;
+    ua->support_sip_block = 0;
+    ua->sip_compact_headers = 0;
+    ua->support_resub = 1;
+    ua->expire_time_by_user = 0;
+    ua->reg_over_tcp = 0;
+    ua->not_auto_reg = 0;
+    ua->reg_expire_time_backup = 0;
+    ua->emc_call_ringback_timer_timeout = 0;
+    ua->add_pcni_in_vowifi = 0;
+    ua->altc_support = 0;
+    ua->altc_prefer_offer = 0;
+    ua->altc_prefer_answer = 0;
+    ua->emc_cits_protect_timer = 0;
+    ua->random_init_ipsec_port = 1;
+    ua->asymmetric_payload_type_enable = 1;
+    ua->max_hold_unhold_retry_cnt = 0;
+    ua->disable_ul_rtp_in_early_state = 0;
+    ua->support_early_upgrade = 0;
+    ua->pqos_timer_timeout = 2000;
+    ua->upgrade_cancel_feature = 0;
+    ua->upgrade_with_Tupo = 0;
+    ua->rtt_enable = 0;
+    ua->ect_enable = 0;
+    ua->add_cell_info_age_to_cni = 0;
+    ua->check_reg_contact = 1;
+    ua->geolocation_type = 0;
+    ua->init_reg_delay_time = 0;
+    ua->add_timezone_to_pani = 0;
+    ua->tcp_connect_max_time_all = 0;
+    ua->update_ipsec_port_494 = 0;
+    ua->refer_delay_timer = 0;
+    ua->rtt_tag_mode = 0;
+    ua->reject_rcs_request = 0;
+    ua->allow_non_sendrecv_rtcp_0 = 0;
+    ua->keep_original_refresher_in_reinvite = 0;
+    ua->force_csfb_when663 = 0;
+    ua->decouple_conf_srvcc_mid_call_cap = 0;
+    ua->send_refer_to_conf_uri = 0;
+    ua->conference_desub_time = 30;
+    ua->call_mo_pidf_usage = 0x4C;
+    ua->omit_method_invite_in_refer_to = 0;
+    ua->video_offer_rtp_profile = 0xFF;
+    ua->reuse_transport_methods = 0x00000050;
+    ua->default_reg_retry_mechanism = 0;
+    ua->e3_emc_setup_catch_all_roaming_timer = 0;
+    ua->e2_emc_setup_initiation_timer = 0;
+    ua->e3_emc_setup_catch_all_home_timer = 0;
+    ua->last_known_rat_type = 0x80;
+    memset((void *)ua->last_known_cell_id, 0, 64);
+    memset((void *)ua->last_known_cell_timestamp, 0, 32);
+    ua->support_video_early_media = 0;
+    ua->update_cap_when_rat_net_change = 1;
+    ua->disable_tcall_timer_in_hold = 0;
+    ua->set_homeuri_from_pau = 0;
+    ua->enable_in_band_tone_in_hold = 1;
+    ua->set_text_rtcp_0 = 1;
+    ua->reg_check_reason_header = 0;
+    ua->use_lower_anonymous = 0;
+    ua->reg_restore_try_next_pcscf = 0;
+    ua->from_header_peer_addr = 2;
+    ua->call_tcw_timer_timeout = 0;
+    ua->reject_text_when_text_off = 1;
+    ua->active_state_oos_level = 0;
+    ua->remove_aconf_when_reinvite_without_sdp = 0;
+    ua->ecall_get_puid_from_normal_ims_reg = 0;
+    ua->send_bye_if_error_resp_in_hold_unhold = 1;
+    ua->merge_send_bye_delay = 2;
+    memset((void *)ua->required_loc_info_num_set, 0, 128);
+    ua->sub_def_expires = 0;
+    ua->ignore_380_emg_xml = 0;
+    ua->evs_fmtp_variant_pt = 0;
+    ua->evs_configuration_profile = 0xff;
+    ua->evs_configuration_profile_2 = 0xff;
+    ua->cur_loc_for_emergency_enable = 1;
+    ua->call_barring_in_warning_header = 0;
+    ua->use_amr_bit_rate_downgrade = 0;
+    ua->re_calc_rr_rs_in_offer_answer = 0;
+    ua->send_bw_ind_when_recv_183_prack = 0;
+    ua->support_ringing_downgrade = 0;
+    ua->add_qos_when_offer_present = 0;
+    ua->call_normal_clear_timer_timeout = 0;
+    ua->no_state_transition_when_183_withoutsdp = 0;
+    ua->use_org_nego_codec = 0;
+    ua->set_upgrade_des_strength_optional = 0;
+    kal_snprintf((char *)ua->UA_call_evs_mode_set, 20-1, "0,1,2,3,4,5,6,7,8");
+    ua->rtcp_mux_support = 0;
+    ua->wfc_emerg_pidf_lng_lat_country = 0;
+    ua->ringing_state_oos_level = 0;
+    ua->release_pdn_when_ems_dereg = 1;
+    ua->support_combine_retry_algo = 0;
+    ua->add_phone_context_ignore_number_type = 0;
+    ua->ims_notify_feature_enabled = 0 ;
+    ua->query_other_sim_call_state = 0 ;
+    ua->use_pau_at_sdp_origin = 0;
+    ua->p_early_media_in_invite = 0;
+    ua->ect_refer_to_use_pai = 0;
+    ua->reged_with_notification = 0;
+    ua->reg_when_norsp_before_timeout = 0;
+    ua->ect_refer_to_use_sip_uri = 0;
+    ua->cs_availability_query = 0;
+    ua->omit_err_rsp_for_prack = 1;
+    ua->reg_add_content_disposition = 0;
+    ua->reg_disable_pidf = 0x0C;
+    ua->cancel_upgrade_force_to_audio = 0;
+    memset((void *)ua->no_auto_retry_errcode, 0, 128);
+    ua->esipcpi_full_reason = 0;
+    ua->check_380_xml_with_no_action = 0;
+    ua->bypass_380_pai_check = 0;
+    ua->set_non_sendrecv_rtcp_0 = 0;
+    ua->delay_normal_or_em_reg_if_they_occur_simulta = 0;
+    ua->follow_mt_pt_list = 0;
+    ua->report_eimsreginfo_urc = 0;
+    ua->mod_session_req_timer_timeout = 40;
+    ua->hold_unhold_send_eimscmode = 0;
+    ua->start_ringback_t_only_by_180 = 0;
+    ua->open_pcscf_retry_count_limit = 0;
+    ua->conf_refer_order_by_call_id = 0;
+    ua->regard_180_without_pem_as_inactive = 0;
+    ua->always_fetch_1st_entry_in_hisInfo = 0;
+    ua->still_select_if_no_acceptable_pt = 0;
+    ua->rm_prcd_when_video_prcd_off = 0;
+    ua->mo_b1_timer_timeout = 0;
+    ua->mt_call_last_come_first_served_timer_timeout = 0;
+    ua->init_reg_guard_timer = 5;
+    ua->iot_mode = 0;
+    ua->scb_ntf_cs_protection = 0;
+    ua->dynamic_pdn_mtu = 0;
+    ua->disconnect_tcp_when_abnormal = 0;
+    ua->pending_sip_msg_in_oos_state = 1;
+    ua->sit_tcp_2xx_rsp_retransmission = 1;
+    ua->no_additional_invite_after_downgrade = 0;
+    ua->retry_video_as_voice_on_failure = 0;
+    ua->wait_user_end_call = 0;
+    ua->delay_ecpi2_at_183 = 0;
+    ua->add_199_feature_tag = 0;
+    ua->rm_civic_on_e911 = 0;
+    ua->conf_call_final_notify_timer_timeout = 0;
+    ua->rereg_guard_timer = 2;
+    ua->subscribe_guard_timer = 2;
+    ua->oos_guard_timer = 5;
+    ua->reg_reset_normal_tcp = 0;
+    ua->precondition_in_support_header = 0;
+    ua->add_prcd_in_video_action_sdp = 0;
+    ua->curr_loc_dir_none_for_wifi = 0;
+    ua->ignore_mismatch_refer_notify = 0;
+    ua->t311_expired_release_call = 0;
+    ua->est_client_tcp_when_send_response = 1;
+    ua->enable_amr_rateset_param_mode_set = 0;
+    ua->wait_user_end_call = 0;
+    ua->wait_user_end_call_no_rtppkt = 0;
+    ua->video_tag_for_all_calls = 0;
+    ua->send_183_without_sdp_when_no_100rel = 0;
+    ua->no_session_modify_retry_for_491 = 0;
+    ua->hide_vattr_when_port_zero = 0;
+    ua->add_param_in_rm_prtcpnt = 0;
+    ua->emerg_reg_timer = 0;
+    ua->custom_em_ims_event_info = 0;
+    ua->always_report_remote_video_cap_support = 0;
+    ua->retry_ims_voice_if_488_no_sdp = 0;
+    ua->mo_update_retry_upper_limit = 0xFFFFFFFF;
+    ua->sdp_group_rtpmap_ptime = 1;
+    ua->sdp_group_rtpmap_fmtp = 0;
+    ua->in_reply_to_support = 1;
+    ua->ect_block_in_remote_hold = 0;
+    ua->ect_delay_target_unhold = 0;
+    ua->pcscf_usage_for_last_pcscf = 0;
+    ua->bypass_403_reason_phrase = 0;
+    ua->accept_wifi_call_if_audio_cap_0 = 0;
+    ua->send_ecpi2_after_200ok_prack = 0;
+    ua->add_pani_in_ack = 0;
+    ua->wait_user_end_call_no_rtppkt_emc = 0;
+    ua->force_downgrade_waiting_final_resp = 0;
+    ua->mo_invite_to_18x_timer_timeout = 0;
+    ua->address_strictly_compare = 0;
+    ua->wait_audio_rtp_for_crs_timer_timeout = 0;
+    ua->stop_crs_if_no_video_or_audio = 0;
+    ua->reject_upgrade_if_more_than_1_call = 0;
+    ua->dereg_sms_disconnect_stack = 1;
+    ua->call_evoltesi_ringing_timer_timeout = 10;
+    ua->confidence_level = 68;
+    ua->use_new_pcscf_for_reg = 0;
+    ua->new_reg_for_initial_request_type = 0;
+    ua->omit_sip_instance_in_contact = 0x00;
+    ua->media_ip_type = 0x00;
+    ua->play_local_tone_when_no_rtp_pkt_on_remote_hold = 0;
+    ua->stop_err_resp_retx_when_not_needed = 0;
+    ua->add_content_transfer_encoding_in_sms = 0;
+    ua->hold_before_add_to_conf = 0;
+    ua->sip_bye_retransmit_total_time = 0;
+    ua->call_sdp_ans_ack_timeout = 0;
+    ua->mt_processing_timeout = 0;
+    ua->support_invalid_audio_pt = 0;
+    ua->norm_sits_trans_timer_in_proceeding = 0;
+    ua->try_next_pcscf_5626_403 = 0;
+    ua->block_refer_sending_if_max_num_of_participants = 0;
+    ua->link_mtu_size = 0;
+    ua->reject_mt_call_if_other_ps_id_has_active_call = 0;
+    ua->call_invite_no_rsp_ran_prio_req_timer_timeout = 0;
+    ua->mo_invite_retry_cnt_limit = 0;
+    ua->mo_invite_retry_dur_limit = 0;
+    ua->call_evs_offer_fields = 0;
+    ua->call_evs_offer_fields_2 = 0;
+    ua->cmr_2 = 0;
+    ua->hf_only_2 = 0;
+    ua->dtx_2 = 1;
+    ua->dtx_recv_2 = 1;
+    ua->ch_send_2 = 1;
+    ua->ch_recv_2 = 1;
+    ua->ch_aw_recv_2 = 2;
+    ua->support_from_change_tag = 0;
+    ua->tir_privacy_in_mt_call_resp = 0;
+    ua->use_local_conf_participant_list_in_srvcc = 0;
+    ua->tcp_keepalive_interval = 7200000;//ms
+    kal_snprintf((char *)ua->disable_evs_based_on_mcc_table, 128-1, "0");
+    kal_snprintf((char *)ua->disable_evs_based_on_geo_table, 128-1, "0");
+    ua->when_start_epsfb_timer = 2;
+    ua->when_stop_epsfb_timer = 7;
+    memset((void *)ua->emergency_call_testing_number, 0, EMERGENCY_CALL_TESTING_NUMBER_MAX_LENGTH);
+    ua->disable_response_source = 0;
+    ua->stir_shaken_for_privacy = 0;
+    ua->video_add_plus_one = 0;
+    ua->always_add_user_phone_in_conf_refer = 0;
+    ua->mo_f1_timer_timeout = 0x00; 
+    memset((void *)ua->normal_call_csfb_failure_code_table_after_tone, 0, 64);
+    ua->UA_call_codec_order4 = 0;
+    ua->send_media_mod_after_active = 0;
+    ua->register_event_subscribe_support = 1;
+
+    /* nvram_imc_struct */
+    imc->resource_retain_timer = 3000;
+    imc->emergency_pdn_retain_timer = 10000;
+    imc->auto_re_reg_timer = 5000;
+    imc->auto_re_reg_base_timer = 30000;
+    imc->auto_re_reg_max_timer = 1800000;
+    imc->poweroff_detach_timer = 0;
+    imc->poweroff_ims_dereg_timer = 5;
+    imc->emergency_reg_retain_timer = 0;
+    memset((void *)imc->pcscf_priority_list, 0, 8);
+    imc->set_pcscf_discovery_via_nas = 1;
+    imc->voice_bearer_ctrl = 0;
+    imc->default_pcscf_address_is_v4 = 1;
+    imc->force_user_account_by_manual = 0;
+    imc->set_ue_im_cn_signaling_flag = 1;
+    imc->check_nw_im_cn_signaling_flag = 1;
+    imc->ims_signaling_qci = 5;
+    imc->ims_voice_qci = 1;
+    imc->ims_video_qci = 2;
+    imc->ims_text_qci = 255;
+    imc->ims_v4v6_preference = 3;
+    imc->pcscf_manual_support = 0;
+    imc->pcscf_mo_support = 0;
+    imc->pcscf_sim_support = 1;
+    imc->pcscf_pco_renew_support = 1;
+    imc->emergency_call_learning_support = 1;
+    imc->home_detected_emergency_call_support = 1;
+    imc->sms_support = 0; // for storing the setting to NVRAM, default value should be 0
+    imc->voice_support = 0; // for storing the setting to NVRAM, default value should be 0
+    imc->wifi_voice_support = 0; // for storing the setting to NVRAM, default value should be 0
+    imc->video_over_ps_support = 0;  // for storing the setting to NVRAM, default value should be 0
+    imc->wifi_video_over_ps_support = 0;  // for storing the setting to NVRAM, default value should be 0
+    imc->ussd_support = 0;
+    imc->resource_allocation_mode = 1;
+    imc->icsi_resource_allocation_mode_1 = 1;
+    imc->icsi_resource_allocation_mode_2 = 1;
+    imc->icsi_resource_allocation_mode_3 = 1;
+    imc->icsi_resource_allocation_mode_4 = 1;
+    imc->mncmcc_pass_flag = 0;
+    imc->ims_reg_allowed_at_23g = 0;
+    imc->unsync_cfg = 1;
+    imc->wifi_em_reg_by_em_pdn = 0;
+    imc->allow_emergency_dereg = 0;
+    imc->send_sip_dereg_at_23g = 1;
+    imc->emergency_call_category_mapping = 0;
+    memset((void *)imc->manual_cell_id, 0, 64);
+    kal_snprintf((char *)imc->pcscf_manual_list, 16-1, "192.168.0.1");
+    kal_snprintf((char *)imc->default_psismsc, 64-1, "sip:smsc@ims.mnc001.mcc001.3gppnetwork.org");
+    memset((void *)imc->manual_impi, 0, 64);
+    memset((void *)imc->manual_impu, 0, 64);
+    memset((void *)imc->manual_domain_name, 0, 64);
+    memset((void *)imc->mncmcc_whitelist, 0, 128);
+    imc->clock_seq = 0;
+    memset((void *)imc->uuid, 0, 16);
+    /*
+    Refer to imc_nvram_context.h
+    typedef enum {
+        IMC_VOPS_RULE_UNSPEC                = 0,
+        IMC_VOPS_RULE_DONT_CARE             = 1 << 0,
+        IMC_VOPS_RULE_RELIED_ON             = 1 << 1,
+        IMC_VOPS_RULE_RELIED_ON_NOT_IN_CALL = 1 << 2,
+        IMC_VOPS_RULE_SPECIAL               = 1 << 3,
+        IMC_VOPS_RULE_BLOCK_IMS_REG_VPLMN   = 1 << 4
+    }nw_vops_rule_enum;
+    */
+    // default block IMS PDN establishment while VoPS=FALSE in VPLMN (engaged from tie-1 carriers)
+    imc->nw_vops_rule = 0x11; //10001
+    imc->location_info_support = 0;
+    imc->loc_info_query_timer = 20;
+    imc->loc_info_refresh_timer = 10;
+    imc->ecc_guard_timer = 10;
+    /* 
+    typedef enum {
+        IMCB_SGN_3GPP_IGNORE_HPLMN = 1 << 0,
+        IMCB_SGN_3GPP_IGNORE_VPLMN = 1 << 1,
+        IMCB_SGN_NON_3GPP_IGNORE_HPLMN = 1 << 2,
+        IMCB_SGN_NON_3GPP_IGNORE_VPLMN = 1 << 3,
+    } imcb_ignore_sgn_qci_check_enum;
+    */
+    // Refer to /apps/module/volte/volte_imcb/sub_imcb/include/imcb_acct_context.h
+    imc->ignore_sgn_qci_check = 0x2; // 10
+    /* 
+    typedef enum {
+        IMCB_AUDIO_3GPP_IGNORE_HPLMN        = 1 << 0,
+        IMCB_AUDIO_3GPP_IGNORE_VPLMN        = 1 << 1,
+        IMCB_AUDIO_NON_3GPP_IGNORE_HPLMN    = 1 << 2,
+        IMCB_AUDIO_NON_3GPP_IGNORE_VPLMN    = 1 << 3,
+        IMCB_VIDEO_3GPP_IGNORE_HPLMN        = 1 << 4,
+        IMCB_VIDEO_3GPP_IGNORE_VPLMN        = 1 << 5,
+        IMCB_VIDEO_NON_3GPP_IGNORE_HPLMN    = 1 << 6,
+        IMCB_VIDEO_NON_3GPP_IGNORE_VPLMN    = 1 << 7,
+        IMCB_TEXT_3GPP_IGNORE_HPLMN         = 1 << 8,
+        IMCB_TEXT_3GPP_IGNORE_VPLMN         = 1 << 9,
+        IMCB_TEXT_NON_3GPP_IGNORE_HPLMN     = 1 << 10,
+        IMCB_TEXT_NON_3GPP_IGNORE_VPLMN     = 1 << 11,
+    } imcb_ignore_media_qos_check_enum, 
+      imcb_ignore_media_qci_check_enum; 
+    */
+    // Refer to /apps/module/volte/volte_imcb/sub_imcb/include/imcb_acct_context.h
+    // ignore all qos
+    imc->ignore_media_qos_check = 0xfff; // 111111111111
+    // ignore all text, and ignore 3gpp VPLMN audio and video, depends on voice_qci, video_qci, text_qci
+    imc->ignore_media_qci_check = 0xf22; //111100100010
+    imc->default_fallback_support = 0;
+    imc->dedicated_fallback_support = 0;
+    imc->restore_pcscf = 0;
+    imc->not_acquire_audio_rtcp = 0;
+    imc->not_acquire_video_rtcp = 0;
+    imc->silent_deact = 0;
+    memset((void *)imc->imcb_setting_string, 0, 64);
+    kal_snprintf((char *)imc->pcscf_home_policy_list, 32-1, "0,2,1,4,5,3,6,0");
+    kal_snprintf((char *)imc->pcscf_visit_policy_list, 32-1, "0,2,1,4,5,3,6,0");
+    kal_snprintf((char *)imc->sgn_selection_weight, 16-1, "4,2,1");
+    imc->silent_pdn_deact = 0;
+    imc->dereg_defer_pdn_release_timer = 0;
+    imc->timerF_expiry = 0;
+    imc->timerB_expiry = 0;
+    kal_snprintf((char *)imc->pdn_rej_handle, 64-1, "N,*,0,1;E,*,0,1");
+    imc->video_resource_retain_timer = 0;
+    imc->video_default_fallback_support = 0;
+    imc->enable_audio_precondition = 0;
+    imc->enable_video_precondition = 0;
+    imc->enable_text_precondition = 0;
+    imc->video_dedicated_fallback_support = 0;
+    imc->normal_pdn_retry_count = 10;
+    memset((void *)imc->ext_timer_config, 0, sizeof(imc->ext_timer_config));
+    imc->reset_retry_after_timer_criteria = 0;
+    imc->not_decouple_dereg_and_pdn_deact = 0;
+    imc->rfc5626_flow_recovery = 0;
+    imc->disable_isim_application = 0;
+    imc->open_volte_cc = 0;
+    imc->e911_resource_retain_timer = 0;
+    imc->ims_estab_timer = 120;
+    imc->switch_prefer_rat_dereg = 0;
+    imc->empty_pcscf_list_fail_cause = 0;
+    imc->no_ims_reg_during_active_cs_call = 0;
+    imc->srvcc_no_ims_dereg_until_call_rel = 0;
+    imc->bearer_matching_preference = 0;
+    imc->pdn_retry_pre_backoff_count = 3;
+    imc->pdn_retry_base_time = 1;
+    imc->pdn_retry_max_time = 86400; //86400sec = 1day
+    imc->pdn_retry_backoff_enable = 1;
+    imc->enable_ddd_feature = 0;
+    imc->rel_hps_threshold = 40;
+    imc->wait_for_sgn_timer = 5;
+    imc->att_family = 0;
+    imc->impu_change_dereg = 0;
+    imc->rel_emc_pdn_afr_timer_expr = 0;
+    imc->audio_bearer_lost_retain_timer = 0;
+    imc->video_bearer_lost_retain_timer = 0;
+    imc->text_bearer_lost_retain_timer = 0;
+    imc->ims_progress_slow_timer = 2;
+    imc->emc_dereg_while_volte_off = 0;
+    imc->max_RFC5626_retry_count_403 = 1;
+    imc->all_pcscf_fail_retry_max_num = 3;
+    imc->unlock_ims_permanent_reg_receive_tau = 0;
+    imc->detach_reattach_backoff_timer = 15000;
+    imc->reg_abnormal_reg_fail_report_timer = 3600000;
+    imc->reg_abnormal_reg_slow_report_timer = 3600000;
+    imc->reg_abnormal_dereg_report_timer = 3600000;
+    imc->block_reg_when_isim_params_no_avail = 0;
+    imc->pcscf_reselect_flag = 0;
+    imc->unlock_reg_on_plmn_change = 0;
+    imc->ecc_use_normal_pcscf = 0;
+    imc->oos_hysteresis_interval = 1000;
+    imc->text_default_fallback_support = 0;
+    imc->nr_recovery_support = 0;
+    imc->nr_recovery_guard_timer = 8000;
+    imc->deactivate_video_when_early_media_off = 0;
+    imc->epsfb_timer = 0;
+    imc->nr_normal_pdn_retry_count = 3;
+    imc->nr_quick_disable_support = 0;
+    /*
+      Refer to imc_nvram_context.h
+      typedef enum {
+        IMC_IS_IMS_RETRY_NONE                 = 0,
+        IMC_IS_IMS_RETRY_ALWAYS               = 1,
+        IMC_IS_IMS_RETEY_RELIED_ON_AUTO_REREG = 2,
+        IMC_IS_IMS_RETRY_RELIED_ON_UA         = 3,
+        IMC_IS_IMS_RETRY_RELIED_ON_WATCHDOG   = 4
+     } is_ims_retry_status_enum;
+    */
+    imc->is_ims_retry_status = 0;
+    imc->is_ims_retry_watchdog_timer = 0;
+    imc->dereg_when_sim_refresh = 0;
+    imc->isim_invalidation_rules = 0;
+    //typedef enum {
+    //IMC_ISIM_RULE_UNSPEC                = 0,
+    //IMC_ISIM_NON3GPP_DOMAIN             = 1 << 0,
+    //}imc_isim_invalidation_rules_enum;
+    imc->allow_call_while_registering = 0;
+}
+
+void imc_set_diff_configuration(nvram_ef_ims_profile_record_struct *src, nvram_ef_ims_profile_record_struct *dest) {
+    nvram_ua_struct *src_ua;
+    nvram_imc_struct *src_imc;
+    nvram_ua_struct *dest_ua;
+    nvram_imc_struct *dest_imc;
+
+    src_ua = &src->ua_config;
+    src_imc = &src->imc_config;
+    dest_ua = &dest->ua_config;
+    dest_imc = &dest->imc_config;
+
+    /* nvram_ua_struct */
+    if (src_ua->local_port != IMS_UNDEF_CONFIG_32) {dest_ua->local_port = src_ua->local_port;}
+    if (src_ua->pcscf_port_number != IMS_UNDEF_CONFIG_32) {dest_ua->pcscf_port_number = src_ua->pcscf_port_number;}
+    if (src_ua->ipsec_local_port_start != IMS_UNDEF_CONFIG_32) {dest_ua->ipsec_local_port_start = src_ua->ipsec_local_port_start;}
+    if (src_ua->ipsec_local_port_range != IMS_UNDEF_CONFIG_32) {dest_ua->ipsec_local_port_range = src_ua->ipsec_local_port_range;}
+    if (src_ua->rtp_rtcp_local_port_start != IMS_UNDEF_CONFIG_32) {dest_ua->rtp_rtcp_local_port_start = src_ua->rtp_rtcp_local_port_start;}
+    if (src_ua->rtp_rtcp_local_port_range != IMS_UNDEF_CONFIG_32) {dest_ua->rtp_rtcp_local_port_range = src_ua->rtp_rtcp_local_port_range;}
+    if (src_ua->rtcp_interval != IMS_UNDEF_CONFIG_32) {dest_ua->rtcp_interval = src_ua->rtcp_interval;}
+    if (src_ua->sip_dscp != IMS_UNDEF_CONFIG_16) {dest_ua->sip_dscp = src_ua->sip_dscp;}
+    if (src_ua->audio_dscp != IMS_UNDEF_CONFIG_16) {dest_ua->audio_dscp = src_ua->audio_dscp;}
+    if (src_ua->audio_priority != IMS_UNDEF_CONFIG_16) {dest_ua->audio_priority = src_ua->audio_priority;}
+    if (src_ua->video_dscp != IMS_UNDEF_CONFIG_16) {dest_ua->video_dscp = src_ua->video_dscp;}
+    if (src_ua->video_priority != IMS_UNDEF_CONFIG_16) {dest_ua->video_priority = src_ua->video_priority;}
+    if (src_ua->register_expiry != IMS_UNDEF_CONFIG_32) {dest_ua->register_expiry = src_ua->register_expiry;}
+    if (src_ua->UA_reg_t1_timer != IMS_UNDEF_CONFIG_32) {dest_ua->UA_reg_t1_timer = src_ua->UA_reg_t1_timer;}
+    if (src_ua->UA_reg_t2_timer != IMS_UNDEF_CONFIG_32) {dest_ua->UA_reg_t2_timer = src_ua->UA_reg_t2_timer;}
+    if (src_ua->UA_reg_t4_timer != IMS_UNDEF_CONFIG_32) {dest_ua->UA_reg_t4_timer = src_ua->UA_reg_t4_timer;}
+    if (src_ua->UA_reg_a_timer != IMS_UNDEF_CONFIG_32) {dest_ua->UA_reg_a_timer = src_ua->UA_reg_a_timer;}
+    if (src_ua->UA_reg_b_timer != IMS_UNDEF_CONFIG_32) {dest_ua->UA_reg_b_timer = src_ua->UA_reg_b_timer;}
+    if (src_ua->UA_reg_c_timer != IMS_UNDEF_CONFIG_32) {dest_ua->UA_reg_c_timer = src_ua->UA_reg_c_timer;}
+    if (src_ua->UA_reg_d_timer != IMS_UNDEF_CONFIG_32) {dest_ua->UA_reg_d_timer = src_ua->UA_reg_d_timer;}
+    if (src_ua->UA_reg_e_timer != IMS_UNDEF_CONFIG_32) {dest_ua->UA_reg_e_timer = src_ua->UA_reg_e_timer;}
+    if (src_ua->UA_reg_f_timer != IMS_UNDEF_CONFIG_32) {dest_ua->UA_reg_f_timer = src_ua->UA_reg_f_timer;}
+    if (src_ua->UA_reg_g_timer != IMS_UNDEF_CONFIG_32) {dest_ua->UA_reg_g_timer = src_ua->UA_reg_g_timer;}
+    if (src_ua->UA_reg_h_timer != IMS_UNDEF_CONFIG_32) {dest_ua->UA_reg_h_timer = src_ua->UA_reg_h_timer;}
+    if (src_ua->UA_reg_i_timer != IMS_UNDEF_CONFIG_32) {dest_ua->UA_reg_i_timer = src_ua->UA_reg_i_timer;}
+    if (src_ua->UA_reg_j_timer != IMS_UNDEF_CONFIG_32) {dest_ua->UA_reg_j_timer = src_ua->UA_reg_j_timer;}
+    if (src_ua->UA_reg_k_timer != IMS_UNDEF_CONFIG_32) {dest_ua->UA_reg_k_timer = src_ua->UA_reg_k_timer;}
+    if (src_ua->UA_reg_retry_base_time != IMS_UNDEF_CONFIG_32) {dest_ua->UA_reg_retry_base_time = src_ua->UA_reg_retry_base_time;}
+    if (src_ua->UA_reg_retry_max_time != IMS_UNDEF_CONFIG_32) {dest_ua->UA_reg_retry_max_time = src_ua->UA_reg_retry_max_time;}
+    if (src_ua->UA_call_conf_subtimer != IMS_UNDEF_CONFIG_32) {dest_ua->UA_call_conf_subtimer = src_ua->UA_call_conf_subtimer;}
+    if (src_ua->UA_call_session_timer != IMS_UNDEF_CONFIG_32) {dest_ua->UA_call_session_timer = src_ua->UA_call_session_timer;}
+    if (src_ua->UA_call_amr_fmt_variant != IMS_UNDEF_CONFIG_32) {dest_ua->UA_call_amr_fmt_variant = src_ua->UA_call_amr_fmt_variant;}
+    if (src_ua->VoLTE_Setting_SIP_Force_Use_UDP != IMS_UNDEF_CONFIG_8) {dest_ua->VoLTE_Setting_SIP_Force_Use_UDP = src_ua->VoLTE_Setting_SIP_Force_Use_UDP;}
+    if (src_ua->VoLTE_Setting_SIP_TCP_On_Demand != IMS_UNDEF_CONFIG_8) {dest_ua->VoLTE_Setting_SIP_TCP_On_Demand = src_ua->VoLTE_Setting_SIP_TCP_On_Demand;}
+    if (src_ua->VoLTE_Setting_SIP_TCP_MTU_Size != IMS_UNDEF_CONFIG_16) {dest_ua->VoLTE_Setting_SIP_TCP_MTU_Size = src_ua->VoLTE_Setting_SIP_TCP_MTU_Size;}
+    if (src_ua->VoLTE_Setting_SIP_TCP_MSS != IMS_UNDEF_CONFIG_32) {dest_ua->VoLTE_Setting_SIP_TCP_MSS = src_ua->VoLTE_Setting_SIP_TCP_MSS;}
+    if (src_ua->UA_call_session_min_se != IMS_UNDEF_CONFIG_16) {dest_ua->UA_call_session_min_se = src_ua->UA_call_session_min_se;}
+    if (src_ua->UA_call_rej_code != IMS_UNDEF_CONFIG_16) {dest_ua->UA_call_rej_code = src_ua->UA_call_rej_code;}
+    if (src_ua->UA_call_no_resource_code != IMS_UNDEF_CONFIG_16) {dest_ua->UA_call_no_resource_code = src_ua->UA_call_no_resource_code;}
+    if (src_ua->UA_call_rej_media_code != IMS_UNDEF_CONFIG_16) {dest_ua->UA_call_rej_media_code = src_ua->UA_call_rej_media_code;}
+    if (src_ua->UA_call_rej_by_user_code != IMS_UNDEF_CONFIG_16) {dest_ua->UA_call_rej_by_user_code = src_ua->UA_call_rej_by_user_code;}
+    if (src_ua->operator_code != IMS_UNDEF_CONFIG_16) {dest_ua->operator_code = src_ua->operator_code;}
+    if (src_ua->sms_rspcode != IMS_UNDEF_CONFIG_16) {dest_ua->sms_rspcode = src_ua->sms_rspcode;}
+    if (src_ua->local_sip_protocol_type != IMS_UNDEF_CONFIG_8) {dest_ua->local_sip_protocol_type = src_ua->local_sip_protocol_type;}
+    if (src_ua->UA_g711_ptime != IMS_UNDEF_CONFIG_8) {dest_ua->UA_g711_ptime = src_ua->UA_g711_ptime;}
+    if (src_ua->UA_g726_ptime != IMS_UNDEF_CONFIG_8) {dest_ua->UA_g726_ptime = src_ua->UA_g726_ptime;}
+    if (src_ua->UA_call_codec_order1 != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_codec_order1 = src_ua->UA_call_codec_order1;}
+    if (src_ua->UA_call_codec_order2 != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_codec_order2 = src_ua->UA_call_codec_order2;}
+    if (src_ua->UA_call_codec_order3 != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_codec_order3 = src_ua->UA_call_codec_order3;}
+    if (src_ua->UA_call_def_max_ptime != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_def_max_ptime = src_ua->UA_call_def_max_ptime;}
+    if (src_ua->UA_call_def_ptime != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_def_ptime = src_ua->UA_call_def_ptime;}
+    if (src_ua->UA_call_amr_pt != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_amr_pt = src_ua->UA_call_amr_pt;}
+    if (src_ua->UA_call_amr_oct_pt != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_amr_oct_pt = src_ua->UA_call_amr_oct_pt;}
+    if (src_ua->UA_call_amr_open_pt != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_amr_open_pt = src_ua->UA_call_amr_open_pt;}
+    if (src_ua->UA_call_amr_wb_pt != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_amr_wb_pt = src_ua->UA_call_amr_wb_pt;}
+    if (src_ua->UA_call_amr_wb_oct_pt != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_amr_wb_oct_pt = src_ua->UA_call_amr_wb_oct_pt;}
+    if (src_ua->UA_call_h264_pt != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_h264_pt = src_ua->UA_call_h264_pt;}
+    if (src_ua->UA_call_h264_pt2 != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_h264_pt2 = src_ua->UA_call_h264_pt2;}
+    if (src_ua->UA_call_h265_pt != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_h265_pt = src_ua->UA_call_h265_pt;}
+    if (src_ua->UA_call_h265_pt2 != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_h265_pt2 = src_ua->UA_call_h265_pt2;}
+    if (src_ua->UA_call_evs_pt != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_evs_pt = src_ua->UA_call_evs_pt;}
+    if (src_ua->UA_call_g729_annexb != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_g729_annexb = src_ua->UA_call_g729_annexb;}
+    if (src_ua->UA_call_g729_ptime != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_g729_ptime = src_ua->UA_call_g729_ptime;}
+    if (src_ua->UA_call_priority != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_priority = src_ua->UA_call_priority;}
+    if (src_ua->UA_call_privacy != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_privacy = src_ua->UA_call_privacy;}
+    if (src_ua->UA_call_session_flag != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_session_flag = src_ua->UA_call_session_flag;}
+    if (src_ua->UA_call_tel_evt != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_tel_evt = src_ua->UA_call_tel_evt;}
+    if (src_ua->UA_call_tel_evt_pt != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_tel_evt_pt = src_ua->UA_call_tel_evt_pt;}
+    if (src_ua->UA_call_tel_evt_wb_pt != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_tel_evt_wb_pt = src_ua->UA_call_tel_evt_wb_pt;}
+    if (src_ua->UA_call_precondition != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_precondition = src_ua->UA_call_precondition;}
+    if (src_ua->early_media != IMS_UNDEF_CONFIG_8) {dest_ua->early_media = src_ua->early_media;}
+    if (src_ua->mwi_license != IMS_UNDEF_CONFIG_8) {dest_ua->mwi_license = src_ua->mwi_license;}
+    if (src_ua->UA_reg_keep_alive != IMS_UNDEF_CONFIG_8) {dest_ua->UA_reg_keep_alive = src_ua->UA_reg_keep_alive;}
+    if (src_ua->uri_type != IMS_UNDEF_CONFIG_8) {dest_ua->uri_type = src_ua->uri_type;}
+    if (src_ua->UA_net_ipsec != IMS_UNDEF_CONFIG_8) {dest_ua->UA_net_ipsec = src_ua->UA_net_ipsec;}
+    if (src_ua->UA_reg_uri_with_port != IMS_UNDEF_CONFIG_8) {dest_ua->UA_reg_uri_with_port = src_ua->UA_reg_uri_with_port;}
+    if (src_ua->UA_reg_ipsec_algo != IMS_UNDEF_CONFIG_8) {dest_ua->UA_reg_ipsec_algo = src_ua->UA_reg_ipsec_algo;}
+    if (src_ua->UA_reg_http_digest != IMS_UNDEF_CONFIG_8) {dest_ua->UA_reg_http_digest = src_ua->UA_reg_http_digest;}
+    if (src_ua->UA_reg_specific_ipsec_algo != IMS_UNDEF_CONFIG_8) {dest_ua->UA_reg_specific_ipsec_algo = src_ua->UA_reg_specific_ipsec_algo;}
+    if (src_ua->UA_call_mo_invite_to_bw_cnf_time != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_mo_invite_to_bw_cnf_time = src_ua->UA_call_mo_invite_to_bw_cnf_time;}
+    if (src_ua->ipv6_zero_compression != IMS_UNDEF_CONFIG_8) {dest_ua->ipv6_zero_compression = src_ua->ipv6_zero_compression;}
+    if (src_ua->support_max_retry_algo != IMS_UNDEF_CONFIG_8) {dest_ua->support_max_retry_algo = src_ua->support_max_retry_algo;}
+    if (src_ua->UA_ussd_nw_timeout_timer != IMS_UNDEF_CONFIG_8) {dest_ua->UA_ussd_nw_timeout_timer = src_ua->UA_ussd_nw_timeout_timer;}
+    if (src_ua->UA_ussd_setup_timeout_timer != IMS_UNDEF_CONFIG_8) {dest_ua->UA_ussd_setup_timeout_timer = src_ua->UA_ussd_setup_timeout_timer;}
+    if (src_ua->reject_early_dlg_more_than_max != IMS_UNDEF_CONFIG_8) {dest_ua->reject_early_dlg_more_than_max = src_ua->reject_early_dlg_more_than_max;}
+    if (src_ua->send_bye_when_term_early_dlg != IMS_UNDEF_CONFIG_8) {dest_ua->send_bye_when_term_early_dlg = src_ua->send_bye_when_term_early_dlg;}
+    if (src_ua->tty_enable != IMS_UNDEF_CONFIG_8) {dest_ua->tty_enable = src_ua->tty_enable;}
+    if (src_ua->tty_t140_pt != IMS_UNDEF_CONFIG_8) {dest_ua->tty_t140_pt = src_ua->tty_t140_pt;}
+    if (src_ua->tty_red_pt != IMS_UNDEF_CONFIG_8) {dest_ua->tty_red_pt = src_ua->tty_red_pt;}
+    if (src_ua->tty_red_level != IMS_UNDEF_CONFIG_8) {dest_ua->tty_red_level = src_ua->tty_red_level;}
+    if (src_ua->tty_cps != IMS_UNDEF_CONFIG_8) {dest_ua->tty_cps = src_ua->tty_cps;}
+    if (src_ua->user_agent[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->user_agent, src_ua->user_agent, sizeof(src_ua->user_agent));}
+    if (src_ua->UA_call_amr_mode_set[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->UA_call_amr_mode_set, src_ua->UA_call_amr_mode_set, sizeof(src_ua->UA_call_amr_mode_set));}
+    if (src_ua->UA_call_amr_wb_mode_set[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->UA_call_amr_wb_mode_set, src_ua->UA_call_amr_wb_mode_set, sizeof(src_ua->UA_call_amr_wb_mode_set));}
+    if (src_ua->UA_icsi_1[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->UA_icsi_1, src_ua->UA_icsi_1, sizeof(src_ua->UA_icsi_1));}
+    if (src_ua->UA_icsi_2[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->UA_icsi_2, src_ua->UA_icsi_2, sizeof(src_ua->UA_icsi_2));}
+    if (src_ua->UA_icsi_3[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->UA_icsi_3, src_ua->UA_icsi_3, sizeof(src_ua->UA_icsi_3));}
+    if (src_ua->UA_icsi_4[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->UA_icsi_4, src_ua->UA_icsi_4, sizeof(src_ua->UA_icsi_4));}
+    if (src_ua->UA_phone_context[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->UA_phone_context, src_ua->UA_phone_context, sizeof(src_ua->UA_phone_context));}
+    if (src_ua->UA_reg_auth_name[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->UA_reg_auth_name, src_ua->UA_reg_auth_name, sizeof(src_ua->UA_reg_auth_name));}
+    if (src_ua->UA_reg_auth_password[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->UA_reg_auth_password, src_ua->UA_reg_auth_password, sizeof(src_ua->UA_reg_auth_password));}
+    if (src_ua->UA_phone_context_associated_impu[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->UA_phone_context_associated_impu, src_ua->UA_phone_context_associated_impu, sizeof(src_ua->UA_phone_context_associated_impu));}
+    if (src_ua->UA_conf_factory_uri[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->UA_conf_factory_uri, src_ua->UA_conf_factory_uri, sizeof(src_ua->UA_conf_factory_uri));}
+    if (src_ua->reject_code_in23G != IMS_UNDEF_CONFIG_32) {dest_ua->reject_code_in23G = src_ua->reject_code_in23G;}
+    if (src_ua->conf_sub_timer_timeout != IMS_UNDEF_CONFIG_32) {dest_ua->conf_sub_timer_timeout = src_ua->conf_sub_timer_timeout;}
+    if (src_ua->cisrvcc != IMS_UNDEF_CONFIG_32) {dest_ua->cisrvcc = src_ua->cisrvcc;}
+    if (src_ua->contact_with_username_inCall != IMS_UNDEF_CONFIG_8) {dest_ua->contact_with_username_inCall = src_ua->contact_with_username_inCall;}
+    if (src_ua->sendrecv_before_prcd != IMS_UNDEF_CONFIG_8) {dest_ua->sendrecv_before_prcd = src_ua->sendrecv_before_prcd;}
+    if (src_ua->always_use_UPDATE_for_prcd != IMS_UNDEF_CONFIG_8) {dest_ua->always_use_UPDATE_for_prcd = src_ua->always_use_UPDATE_for_prcd;}
+    if (src_ua->merge_need_swap != IMS_UNDEF_CONFIG_8) {dest_ua->merge_need_swap = src_ua->merge_need_swap;}
+    if (src_ua->always_use_sip_uri_for_mo_call != IMS_UNDEF_CONFIG_8) {dest_ua->always_use_sip_uri_for_mo_call = src_ua->always_use_sip_uri_for_mo_call;}
+    if (src_ua->set_strength_mandatory != IMS_UNDEF_CONFIG_8) {dest_ua->set_strength_mandatory = src_ua->set_strength_mandatory;}
+    if (src_ua->send_refer_to_peer != IMS_UNDEF_CONFIG_8) {dest_ua->send_refer_to_peer = src_ua->send_refer_to_peer;}
+    if (src_ua->add_3gpp_ims_in_Accept != IMS_UNDEF_CONFIG_8) {dest_ua->add_3gpp_ims_in_Accept = src_ua->add_3gpp_ims_in_Accept;}
+    if (src_ua->terminal_based_cw != IMS_UNDEF_CONFIG_8) {dest_ua->terminal_based_cw = src_ua->terminal_based_cw;}
+    if (src_ua->refer_dialog_to_server != IMS_UNDEF_CONFIG_8) {dest_ua->refer_dialog_to_server = src_ua->refer_dialog_to_server;}
+    if (src_ua->check_reason_phrase != IMS_UNDEF_CONFIG_8) {dest_ua->check_reason_phrase = src_ua->check_reason_phrase;}
+    if (src_ua->merge_send_bye != IMS_UNDEF_CONFIG_8) {dest_ua->merge_send_bye = src_ua->merge_send_bye;}
+    if (src_ua->when_stop_tcall != IMS_UNDEF_CONFIG_8) {dest_ua->when_stop_tcall = src_ua->when_stop_tcall;}
+    if (src_ua->set_rtcp_0 != IMS_UNDEF_CONFIG_8) {dest_ua->set_rtcp_0 = src_ua->set_rtcp_0;}
+    if (src_ua->check_contact_380 != IMS_UNDEF_CONFIG_8) {dest_ua->check_contact_380 = src_ua->check_contact_380;}
+    if (src_ua->conf_participant_not_subscribe != IMS_UNDEF_CONFIG_8) {dest_ua->conf_participant_not_subscribe = src_ua->conf_participant_not_subscribe;}
+    if (src_ua->add_sdp_in_180_for_non_precond != IMS_UNDEF_CONFIG_8) {dest_ua->add_sdp_in_180_for_non_precond = src_ua->add_sdp_in_180_for_non_precond;}
+    if (src_ua->add_precondition_in_hold_unhold_sdp != IMS_UNDEF_CONFIG_8) {dest_ua->add_precondition_in_hold_unhold_sdp = src_ua->add_precondition_in_hold_unhold_sdp;}
+    if (src_ua->use_org_sdp_for_invite_without_sdp != IMS_UNDEF_CONFIG_8) {dest_ua->use_org_sdp_for_invite_without_sdp = src_ua->use_org_sdp_for_invite_without_sdp;}
+    if (src_ua->oir_privacy_to_header != IMS_UNDEF_CONFIG_8) {dest_ua->oir_privacy_to_header = src_ua->oir_privacy_to_header;}
+    if (src_ua->register_cap_whenever != IMS_UNDEF_CONFIG_8) {dest_ua->register_cap_whenever = src_ua->register_cap_whenever;}
+    if (src_ua->no_auto_retry_for_mo_call != IMS_UNDEF_CONFIG_8) {dest_ua->no_auto_retry_for_mo_call = src_ua->no_auto_retry_for_mo_call;}
+    if (src_ua->use_eps_prefix_in_phone_context != IMS_UNDEF_CONFIG_8) {dest_ua->use_eps_prefix_in_phone_context = src_ua->use_eps_prefix_in_phone_context;}
+    if (src_ua->follow_nw_ims_vops_support != IMS_UNDEF_CONFIG_8) {dest_ua->follow_nw_ims_vops_support = src_ua->follow_nw_ims_vops_support;}
+    if (src_ua->attempt_reg_when_receive403 != IMS_UNDEF_CONFIG_8) {dest_ua->attempt_reg_when_receive403 = src_ua->attempt_reg_when_receive403;}
+    if (src_ua->waiting_487_for_cancel_timer_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->waiting_487_for_cancel_timer_timeout = src_ua->waiting_487_for_cancel_timer_timeout;}
+    if (src_ua->bcsfb_feature_enable != IMS_UNDEF_CONFIG_8) {dest_ua->bcsfb_feature_enable = src_ua->bcsfb_feature_enable;}
+    if (src_ua->send_183_when_prcd_none != IMS_UNDEF_CONFIG_8) {dest_ua->send_183_when_prcd_none = src_ua->send_183_when_prcd_none;}
+    if (src_ua->call_id_with_host_inCall != IMS_UNDEF_CONFIG_8) {dest_ua->call_id_with_host_inCall = src_ua->call_id_with_host_inCall;}
+    if (src_ua->add_rtcp_port_into_sdp != IMS_UNDEF_CONFIG_8) {dest_ua->add_rtcp_port_into_sdp = src_ua->add_rtcp_port_into_sdp;}
+    if (src_ua->ecc_session_timer_enable != IMS_UNDEF_CONFIG_8) {dest_ua->ecc_session_timer_enable = src_ua->ecc_session_timer_enable;}
+    if (src_ua->subscribe_dialog_to_server != IMS_UNDEF_CONFIG_8) {dest_ua->subscribe_dialog_to_server = src_ua->subscribe_dialog_to_server;}
+    if (src_ua->check_conference_subscribe != IMS_UNDEF_CONFIG_8) {dest_ua->check_conference_subscribe = src_ua->check_conference_subscribe;}
+    if (src_ua->conference_subscribe_timing != IMS_UNDEF_CONFIG_8) {dest_ua->conference_subscribe_timing = src_ua->conference_subscribe_timing;}
+    if (src_ua->general_amr_nb_wb != IMS_UNDEF_CONFIG_8) {dest_ua->general_amr_nb_wb = src_ua->general_amr_nb_wb;}
+    if (src_ua->disable_conf_call_prcd != IMS_UNDEF_CONFIG_8) {dest_ua->disable_conf_call_prcd = src_ua->disable_conf_call_prcd;}
+    if (src_ua->wait_cancel_in_srvcc_end != IMS_UNDEF_CONFIG_8) {dest_ua->wait_cancel_in_srvcc_end = src_ua->wait_cancel_in_srvcc_end;}
+    if (src_ua->reject_1w_if_1A1H != IMS_UNDEF_CONFIG_8) {dest_ua->reject_1w_if_1A1H = src_ua->reject_1w_if_1A1H;}
+    if (src_ua->no_auto_retry_for_dcm_mo_call != IMS_UNDEF_CONFIG_8) {dest_ua->no_auto_retry_for_dcm_mo_call = src_ua->no_auto_retry_for_dcm_mo_call;}
+    if (src_ua->join_send_bye != IMS_UNDEF_CONFIG_8) {dest_ua->join_send_bye = src_ua->join_send_bye;}
+    if (src_ua->set_zero_cell_id_in_wifi != IMS_UNDEF_CONFIG_8) {dest_ua->set_zero_cell_id_in_wifi = src_ua->set_zero_cell_id_in_wifi;}
+    if (src_ua->reject_mtcall_by_vops != IMS_UNDEF_CONFIG_8) {dest_ua->reject_mtcall_by_vops = src_ua->reject_mtcall_by_vops;}
+    if (src_ua->reject_mtcall_when_vilte != IMS_UNDEF_CONFIG_8) {dest_ua->reject_mtcall_when_vilte = src_ua->reject_mtcall_when_vilte;}
+    if (src_ua->not_add_SDP_in_OPTIONS != IMS_UNDEF_CONFIG_8) {dest_ua->not_add_SDP_in_OPTIONS = src_ua->not_add_SDP_in_OPTIONS;}
+    if (src_ua->pcscf_error_when663 != IMS_UNDEF_CONFIG_8) {dest_ua->pcscf_error_when663 = src_ua->pcscf_error_when663;}
+    if (src_ua->rel_conf_if_no_participant != IMS_UNDEF_CONFIG_8) {dest_ua->rel_conf_if_no_participant = src_ua->rel_conf_if_no_participant;}
+    if (src_ua->add_no_fork != IMS_UNDEF_CONFIG_8) {dest_ua->add_no_fork = src_ua->add_no_fork;}
+    if (src_ua->TMO_specific_SDP != IMS_UNDEF_CONFIG_8) {dest_ua->TMO_specific_SDP = src_ua->TMO_specific_SDP;}
+    if (src_ua->call_ringing_timer_timeout != IMS_UNDEF_CONFIG_16) {dest_ua->call_ringing_timer_timeout = src_ua->call_ringing_timer_timeout;}
+    if (src_ua->call_ringback_timer_timeout != IMS_UNDEF_CONFIG_16) {dest_ua->call_ringback_timer_timeout = src_ua->call_ringback_timer_timeout;}
+    if (src_ua->call_tcall_timer_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->call_tcall_timer_timeout = src_ua->call_tcall_timer_timeout;}
+    if (src_ua->call_refreshcall_timer_expire != IMS_UNDEF_CONFIG_8) {dest_ua->call_refreshcall_timer_expire = src_ua->call_refreshcall_timer_expire;}
+    if (src_ua->call_callend_timer_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->call_callend_timer_timeout = src_ua->call_callend_timer_timeout;}
+    if (src_ua->waiting_mt_cnf_timer_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->waiting_mt_cnf_timer_timeout = src_ua->waiting_mt_cnf_timer_timeout;}
+    if (src_ua->mo_invite_to_bw_cnf_timer_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->mo_invite_to_bw_cnf_timer_timeout = src_ua->mo_invite_to_bw_cnf_timer_timeout;}
+    if (src_ua->evs_support != IMS_UNDEF_CONFIG_8) {dest_ua->evs_support = src_ua->evs_support;}
+    if (src_ua->evs_mode_switch != IMS_UNDEF_CONFIG_8) {dest_ua->evs_mode_switch = src_ua->evs_mode_switch;}
+    if (src_ua->hf_only != IMS_UNDEF_CONFIG_8) {dest_ua->hf_only = src_ua->hf_only;}
+    if (src_ua->dtx != IMS_UNDEF_CONFIG_8) {dest_ua->dtx = src_ua->dtx;}
+    if (src_ua->dtx_recv != IMS_UNDEF_CONFIG_8) {dest_ua->dtx_recv = src_ua->dtx_recv;}
+    if (src_ua->br_begin != IMS_UNDEF_CONFIG_8) {dest_ua->br_begin = src_ua->br_begin;}
+    if (src_ua->br_end != IMS_UNDEF_CONFIG_8) {dest_ua->br_end = src_ua->br_end;}
+    if (src_ua->br_send_begin != IMS_UNDEF_CONFIG_8) {dest_ua->br_send_begin = src_ua->br_send_begin;}
+    if (src_ua->br_send_end != IMS_UNDEF_CONFIG_8) {dest_ua->br_send_end = src_ua->br_send_end;}
+    if (src_ua->br_recv_begin != IMS_UNDEF_CONFIG_8) {dest_ua->br_recv_begin = src_ua->br_recv_begin;}
+    if (src_ua->br_recv_end != IMS_UNDEF_CONFIG_8) {dest_ua->br_recv_end = src_ua->br_recv_end;}
+    if (src_ua->bw_begin != IMS_UNDEF_CONFIG_8) {dest_ua->bw_begin = src_ua->bw_begin;}
+    if (src_ua->bw_end != IMS_UNDEF_CONFIG_8) {dest_ua->bw_end = src_ua->bw_end;}
+    if (src_ua->bw_send_begin != IMS_UNDEF_CONFIG_8) {dest_ua->bw_send_begin = src_ua->bw_send_begin;}
+    if (src_ua->bw_send_end != IMS_UNDEF_CONFIG_8) {dest_ua->bw_send_end = src_ua->bw_send_end;}
+    if (src_ua->bw_recv_begin != IMS_UNDEF_CONFIG_8) {dest_ua->bw_recv_begin = src_ua->bw_recv_begin;}
+    if (src_ua->bw_recv_end != IMS_UNDEF_CONFIG_8) {dest_ua->bw_recv_end = src_ua->bw_recv_end;}
+    if (src_ua->ch_send != IMS_UNDEF_CONFIG_8) {dest_ua->ch_send = src_ua->ch_send;}
+    if (src_ua->ch_recv != IMS_UNDEF_CONFIG_8) {dest_ua->ch_recv = src_ua->ch_recv;}
+    if (src_ua->ch_aw_recv != (kal_int8)IMS_UNDEF_CONFIG_8) {dest_ua->ch_aw_recv = src_ua->ch_aw_recv;}
+    if (src_ua->cmr != (kal_int8)IMS_UNDEF_CONFIG_8) {dest_ua->cmr = src_ua->cmr;}
+    if (src_ua->short_code_support != IMS_UNDEF_CONFIG_8) {dest_ua->short_code_support = src_ua->short_code_support;}
+    if (src_ua->early_media_when_rtp_coming != IMS_UNDEF_CONFIG_8) {dest_ua->early_media_when_rtp_coming = src_ua->early_media_when_rtp_coming;}
+    if (src_ua->session_refresher_in_req != IMS_UNDEF_CONFIG_8) {dest_ua->session_refresher_in_req = src_ua->session_refresher_in_req;}
+    if (src_ua->session_refresher_in_resp != IMS_UNDEF_CONFIG_8) {dest_ua->session_refresher_in_resp = src_ua->session_refresher_in_resp;}
+    if (src_ua->wfc_emerg_pidf_country != IMS_UNDEF_CONFIG_8) {dest_ua->wfc_emerg_pidf_country = src_ua->wfc_emerg_pidf_country;}
+    if (src_ua->set_des_strength_optional != IMS_UNDEF_CONFIG_8) {dest_ua->set_des_strength_optional = src_ua->set_des_strength_optional;}
+    if (src_ua->conf_user_count_includes_host != IMS_UNDEF_CONFIG_8) {dest_ua->conf_user_count_includes_host = src_ua->conf_user_count_includes_host;}
+    if (src_ua->ecn_init_method != IMS_UNDEF_CONFIG_8) {dest_ua->ecn_init_method = src_ua->ecn_init_method;}
+    if (src_ua->histinfo_in_supported != IMS_UNDEF_CONFIG_8) {dest_ua->histinfo_in_supported = src_ua->histinfo_in_supported;}
+    if (src_ua->add_country_to_pani != IMS_UNDEF_CONFIG_8) {dest_ua->add_country_to_pani = src_ua->add_country_to_pani;}
+    if (src_ua->delay_unhold_call != IMS_UNDEF_CONFIG_8) {dest_ua->delay_unhold_call = src_ua->delay_unhold_call;}
+    if (src_ua->use_pub_uid_in_ref_to != IMS_UNDEF_CONFIG_8) {dest_ua->use_pub_uid_in_ref_to = src_ua->use_pub_uid_in_ref_to;}
+    if (src_ua->prefer_original_codec != IMS_UNDEF_CONFIG_8) {dest_ua->prefer_original_codec = src_ua->prefer_original_codec;}
+    if (src_ua->add_audio_video_in_delay_media != IMS_UNDEF_CONFIG_8) {dest_ua->add_audio_video_in_delay_media = src_ua->add_audio_video_in_delay_media;}
+    if (src_ua->add_contact_in_bye != IMS_UNDEF_CONFIG_8) {dest_ua->add_contact_in_bye = src_ua->add_contact_in_bye;}
+    if (src_ua->resp_precondition_without_bw_cnf != IMS_UNDEF_CONFIG_8) {dest_ua->resp_precondition_without_bw_cnf = src_ua->resp_precondition_without_bw_cnf;}
+    if (src_ua->wait_second_invite_for_hold != IMS_UNDEF_CONFIG_8) {dest_ua->wait_second_invite_for_hold = src_ua->wait_second_invite_for_hold;}
+    if (src_ua->no_feature_caps_process != IMS_UNDEF_CONFIG_8) {dest_ua->no_feature_caps_process = src_ua->no_feature_caps_process;}
+    if (src_ua->delay_ringing != IMS_UNDEF_CONFIG_8) {dest_ua->delay_ringing = src_ua->delay_ringing;}
+    if (src_ua->add_framerate != IMS_UNDEF_CONFIG_8) {dest_ua->add_framerate = src_ua->add_framerate;}
+    if (src_ua->add_framesize != IMS_UNDEF_CONFIG_8) {dest_ua->add_framesize = src_ua->add_framesize;}
+    if (src_ua->add_imageattr != IMS_UNDEF_CONFIG_8) {dest_ua->add_imageattr = src_ua->add_imageattr;}
+    if (src_ua->force_srvcc_transfer != IMS_UNDEF_CONFIG_8) {dest_ua->force_srvcc_transfer = src_ua->force_srvcc_transfer;}
+    if (src_ua->srvcc_feature_enable != IMS_UNDEF_CONFIG_16) {dest_ua->srvcc_feature_enable = src_ua->srvcc_feature_enable;}
+    if (src_ua->rtcp_xr_support != IMS_UNDEF_CONFIG_8) {dest_ua->rtcp_xr_support = src_ua->rtcp_xr_support;}
+    if (src_ua->rtcp_xr_format != IMS_UNDEF_CONFIG_16) {dest_ua->rtcp_xr_format = src_ua->rtcp_xr_format;}
+    if (src_ua->rtcp_xr_loss_maxsize != IMS_UNDEF_CONFIG_16) {dest_ua->rtcp_xr_loss_maxsize = src_ua->rtcp_xr_loss_maxsize;}
+    if (src_ua->rtcp_xr_dup_maxsize != IMS_UNDEF_CONFIG_16) {dest_ua->rtcp_xr_dup_maxsize = src_ua->rtcp_xr_dup_maxsize;}
+    if (src_ua->rtcp_xr_rcpt_maxsize != IMS_UNDEF_CONFIG_16) {dest_ua->rtcp_xr_rcpt_maxsize = src_ua->rtcp_xr_rcpt_maxsize;}
+    if (src_ua->rtcp_xr_rtt_maxsize != IMS_UNDEF_CONFIG_16) {dest_ua->rtcp_xr_rtt_maxsize = src_ua->rtcp_xr_rtt_maxsize;}
+    if (src_ua->rtcp_xr_rtt_mode != IMS_UNDEF_CONFIG_8) {dest_ua->rtcp_xr_rtt_mode = src_ua->rtcp_xr_rtt_mode;}
+    if (src_ua->rtcp_xr_stat_flags != IMS_UNDEF_CONFIG_8) {dest_ua->rtcp_xr_stat_flags = src_ua->rtcp_xr_stat_flags;}
+    if (src_ua->show_octet_align != IMS_UNDEF_CONFIG_8) {dest_ua->show_octet_align = src_ua->show_octet_align;}
+    if (src_ua->video_conf_if_one_is_video != IMS_UNDEF_CONFIG_8) {dest_ua->video_conf_if_one_is_video = src_ua->video_conf_if_one_is_video;}
+    if (src_ua->use_from_to_append_pau != IMS_UNDEF_CONFIG_8) {dest_ua->use_from_to_append_pau = src_ua->use_from_to_append_pau;}
+    if (src_ua->call_rel_holdcall_in_midcall_SRVCC != IMS_UNDEF_CONFIG_8) {dest_ua->call_rel_holdcall_in_midcall_SRVCC = src_ua->call_rel_holdcall_in_midcall_SRVCC;}
+    if (src_ua->call_lte_emc_timer_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->call_lte_emc_timer_timeout = src_ua->call_lte_emc_timer_timeout;}
+    if (src_ua->always100rel_in_resp != IMS_UNDEF_CONFIG_8) {dest_ua->always100rel_in_resp = src_ua->always100rel_in_resp;}
+    if (src_ua->use_183_for_early_media != IMS_UNDEF_CONFIG_8) {dest_ua->use_183_for_early_media = src_ua->use_183_for_early_media;}
+    if (src_ua->call_pull_sub_expire != IMS_UNDEF_CONFIG_32) {dest_ua->call_pull_sub_expire = src_ua->call_pull_sub_expire;}
+    if (src_ua->be_refresher_without_peer_support != IMS_UNDEF_CONFIG_8) {dest_ua->be_refresher_without_peer_support = src_ua->be_refresher_without_peer_support;}
+    if (src_ua->ect_assured_notify_timer_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->ect_assured_notify_timer_timeout = src_ua->ect_assured_notify_timer_timeout;}
+    if (src_ua->ect_new_call_type != IMS_UNDEF_CONFIG_8) {dest_ua->ect_new_call_type = src_ua->ect_new_call_type;}
+    if (src_ua->ect_refer_in_new_dialog != IMS_UNDEF_CONFIG_8) {dest_ua->ect_refer_in_new_dialog = src_ua->ect_refer_in_new_dialog;}
+    if (src_ua->ect_without_target_hold != IMS_UNDEF_CONFIG_8) {dest_ua->ect_without_target_hold = src_ua->ect_without_target_hold;}
+    if (src_ua->ect_default_type != IMS_UNDEF_CONFIG_8) {dest_ua->ect_default_type = src_ua->ect_default_type;}
+    if (src_ua->ect_refer_to_tag_swap != IMS_UNDEF_CONFIG_8) {dest_ua->ect_refer_to_tag_swap = src_ua->ect_refer_to_tag_swap;}
+    if (src_ua->UA_call_conf_amr_wb_mode_set[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->UA_call_conf_amr_wb_mode_set, src_ua->UA_call_conf_amr_wb_mode_set, sizeof(src_ua->UA_call_conf_amr_wb_mode_set));}
+    if (src_ua->session_id_header_enable != IMS_UNDEF_CONFIG_8) {dest_ua->session_id_header_enable = src_ua->session_id_header_enable;}
+    if (src_ua->video_action_precondition != IMS_UNDEF_CONFIG_8) {dest_ua->video_action_precondition = src_ua->video_action_precondition;}
+    if (src_ua->bypass_conf_qos_check_in_delay_media != IMS_UNDEF_CONFIG_8) {dest_ua->bypass_conf_qos_check_in_delay_media = src_ua->bypass_conf_qos_check_in_delay_media;}
+    if (src_ua->transfer_conf_call_as_1to1 != IMS_UNDEF_CONFIG_8) {dest_ua->transfer_conf_call_as_1to1 = src_ua->transfer_conf_call_as_1to1;}
+    if (src_ua->timer_b_restore_reg != IMS_UNDEF_CONFIG_8) {dest_ua->timer_b_restore_reg = src_ua->timer_b_restore_reg;}
+    if (src_ua->check_curr_qos != IMS_UNDEF_CONFIG_8) {dest_ua->check_curr_qos = src_ua->check_curr_qos;}
+    if (src_ua->reject_no_answer_resp_code != IMS_UNDEF_CONFIG_16) {dest_ua->reject_no_answer_resp_code = src_ua->reject_no_answer_resp_code;}
+    if (src_ua->call_ringing_timeout_code != IMS_UNDEF_CONFIG_16) {dest_ua->call_ringing_timeout_code = src_ua->call_ringing_timeout_code;}
+    if (src_ua->auto_unhold_when_rcv_recvonly != IMS_UNDEF_CONFIG_8) {dest_ua->auto_unhold_when_rcv_recvonly = src_ua->auto_unhold_when_rcv_recvonly;}
+    if (src_ua->sendrecv_before_conf_call_prcd != IMS_UNDEF_CONFIG_8) {dest_ua->sendrecv_before_conf_call_prcd = src_ua->sendrecv_before_conf_call_prcd;}
+    if (src_ua->err_handling_for_video_via_update != IMS_UNDEF_CONFIG_8) {dest_ua->err_handling_for_video_via_update = src_ua->err_handling_for_video_via_update;}
+    if (src_ua->pem_use_sdp_rtp_drct != IMS_UNDEF_CONFIG_8) {dest_ua->pem_use_sdp_rtp_drct = src_ua->pem_use_sdp_rtp_drct;}
+    if (src_ua->ignore_trans_err_in_active != IMS_UNDEF_CONFIG_8) {dest_ua->ignore_trans_err_in_active = src_ua->ignore_trans_err_in_active;}
+    if (src_ua->add_cni_in_wifi != IMS_UNDEF_CONFIG_8) {dest_ua->add_cni_in_wifi = src_ua->add_cni_in_wifi;}
+    if (src_ua->text_feature_tag != IMS_UNDEF_CONFIG_8) {dest_ua->text_feature_tag = src_ua->text_feature_tag;}
+    if (src_ua->call_emc_rtt_cb_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->call_emc_rtt_cb_timeout = src_ua->call_emc_rtt_cb_timeout;}
+    if (src_ua->disable_amr_params_in_wfc_call != IMS_UNDEF_CONFIG_8) {dest_ua->disable_amr_params_in_wfc_call = src_ua->disable_amr_params_in_wfc_call;}
+    if (src_ua->mod_session_cnf_timer_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->mod_session_cnf_timer_timeout = src_ua->mod_session_cnf_timer_timeout;}
+    if (src_ua->psismsc_from_user != IMS_UNDEF_CONFIG_8) {dest_ua->psismsc_from_user = src_ua->psismsc_from_user;}
+    if (src_ua->force_psi_scheme_to_tel != IMS_UNDEF_CONFIG_8) {dest_ua->force_psi_scheme_to_tel = src_ua->force_psi_scheme_to_tel;}
+    if (src_ua->add_user_phone != IMS_UNDEF_CONFIG_8) {dest_ua->add_user_phone = src_ua->add_user_phone;}
+    if (src_ua->update_call_id_with_host != IMS_UNDEF_CONFIG_8) {dest_ua->update_call_id_with_host = src_ua->update_call_id_with_host;}
+    if (src_ua->add_no_fork_in_SMS != IMS_UNDEF_CONFIG_8) {dest_ua->add_no_fork_in_SMS = src_ua->add_no_fork_in_SMS;}
+    if (src_ua->nsn_specific != IMS_UNDEF_CONFIG_8) {dest_ua->nsn_specific = src_ua->nsn_specific;}
+    if (src_ua->mo_retry_after_504 != IMS_UNDEF_CONFIG_8) {dest_ua->mo_retry_after_504 = src_ua->mo_retry_after_504;}
+    if (src_ua->send_timerF_expiry != IMS_UNDEF_CONFIG_8) {dest_ua->send_timerF_expiry = src_ua->send_timerF_expiry;}
+    if (src_ua->imsi_reged_disable_sms != IMS_UNDEF_CONFIG_8) {dest_ua->imsi_reged_disable_sms = src_ua->imsi_reged_disable_sms;}
+    if (src_ua->sms_network_types != IMS_UNDEF_CONFIG_8) {dest_ua->sms_network_types = src_ua->sms_network_types;}
+    if (src_ua->sms_support_in_23g != IMS_UNDEF_CONFIG_8) {dest_ua->sms_support_in_23g = src_ua->sms_support_in_23g;}
+    if (src_ua->sms_follow_nw_ims_vops_support != IMS_UNDEF_CONFIG_8) {dest_ua->sms_follow_nw_ims_vops_support = src_ua->sms_follow_nw_ims_vops_support;}
+    if (src_ua->restore_in_3gpp_abnormal != IMS_UNDEF_CONFIG_8) {dest_ua->restore_in_3gpp_abnormal = src_ua->restore_in_3gpp_abnormal;}
+    if (src_ua->keep_alive_mode != IMS_UNDEF_CONFIG_32) {dest_ua->keep_alive_mode = src_ua->keep_alive_mode;}
+    if (src_ua->tcp_connect_max_time_invite != IMS_UNDEF_CONFIG_32) {dest_ua->tcp_connect_max_time_invite = src_ua->tcp_connect_max_time_invite;}
+    if (src_ua->retry_interval_after_403 != (kal_int32)IMS_UNDEF_CONFIG_32) {dest_ua->retry_interval_after_403 = src_ua->retry_interval_after_403;}
+    if (src_ua->contact_with_username != IMS_UNDEF_CONFIG_8) {dest_ua->contact_with_username = src_ua->contact_with_username;}
+    if (src_ua->contact_with_transport != IMS_UNDEF_CONFIG_8) {dest_ua->contact_with_transport = src_ua->contact_with_transport;}
+    if (src_ua->contact_with_regid != IMS_UNDEF_CONFIG_8) {dest_ua->contact_with_regid = src_ua->contact_with_regid;}
+    if (src_ua->contact_with_mobility != IMS_UNDEF_CONFIG_8) {dest_ua->contact_with_mobility = src_ua->contact_with_mobility;}
+    if (src_ua->contact_with_expires != IMS_UNDEF_CONFIG_8) {dest_ua->contact_with_expires = src_ua->contact_with_expires;}
+    if (src_ua->authorization_with_algo != IMS_UNDEF_CONFIG_8) {dest_ua->authorization_with_algo = src_ua->authorization_with_algo;}
+    if (src_ua->rereg_in_rat_change != IMS_UNDEF_CONFIG_8) {dest_ua->rereg_in_rat_change = src_ua->rereg_in_rat_change;}
+    if (src_ua->rereg_in_oos_end != IMS_UNDEF_CONFIG_8) {dest_ua->rereg_in_oos_end = src_ua->rereg_in_oos_end;}
+    if (src_ua->de_subscribe != IMS_UNDEF_CONFIG_8) {dest_ua->de_subscribe = src_ua->de_subscribe;}
+    if (src_ua->use_specific_ipsec_algo != IMS_UNDEF_CONFIG_8) {dest_ua->use_specific_ipsec_algo = src_ua->use_specific_ipsec_algo;}
+    if (src_ua->try_next_pcscf != IMS_UNDEF_CONFIG_8) {dest_ua->try_next_pcscf = src_ua->try_next_pcscf;}
+    if (src_ua->dereg_clear_ipsec != IMS_UNDEF_CONFIG_8) {dest_ua->dereg_clear_ipsec = src_ua->dereg_clear_ipsec;}
+    if (src_ua->initial_reg_without_pani != IMS_UNDEF_CONFIG_8) {dest_ua->initial_reg_without_pani = src_ua->initial_reg_without_pani;}
+    if (src_ua->dereg_reset_tcp_client != IMS_UNDEF_CONFIG_8) {dest_ua->dereg_reset_tcp_client = src_ua->dereg_reset_tcp_client;}
+    if (src_ua->treg != IMS_UNDEF_CONFIG_8) {dest_ua->treg = src_ua->treg;}
+    if (src_ua->rereg_23g4 != IMS_UNDEF_CONFIG_8) {dest_ua->rereg_23g4 = src_ua->rereg_23g4;}
+    if (src_ua->resub_23g4 != IMS_UNDEF_CONFIG_8) {dest_ua->resub_23g4 = src_ua->resub_23g4;}
+    if (src_ua->not_auto_reg_403 != IMS_UNDEF_CONFIG_8) {dest_ua->not_auto_reg_403 = src_ua->not_auto_reg_403;}
+    if (src_ua->call_id_with_host_inReg != IMS_UNDEF_CONFIG_8) {dest_ua->call_id_with_host_inReg = src_ua->call_id_with_host_inReg;}
+    if (src_ua->ems_mode_ind != IMS_UNDEF_CONFIG_8) {dest_ua->ems_mode_ind = src_ua->ems_mode_ind;}
+    if (src_ua->contact_with_accesstype != IMS_UNDEF_CONFIG_8) {dest_ua->contact_with_accesstype = src_ua->contact_with_accesstype;}
+    if (src_ua->wfc_with_plani != IMS_UNDEF_CONFIG_8) {dest_ua->wfc_with_plani = src_ua->wfc_with_plani;}
+    if (src_ua->use_udp_on_tcp_fail != IMS_UNDEF_CONFIG_8) {dest_ua->use_udp_on_tcp_fail = src_ua->use_udp_on_tcp_fail;}
+    if (src_ua->ipsec_fail_allowed != IMS_UNDEF_CONFIG_8) {dest_ua->ipsec_fail_allowed = src_ua->ipsec_fail_allowed;}
+    if (src_ua->contact_with_video_feature_tag_in_subscribe != IMS_UNDEF_CONFIG_8) {dest_ua->contact_with_video_feature_tag_in_subscribe = src_ua->contact_with_video_feature_tag_in_subscribe;}
+    if (src_ua->via_without_rport != IMS_UNDEF_CONFIG_8) {dest_ua->via_without_rport = src_ua->via_without_rport;}
+    if (src_ua->reg_route_hdr != IMS_UNDEF_CONFIG_8) {dest_ua->reg_route_hdr = src_ua->reg_route_hdr;}
+    if (src_ua->via_uri_with_default_port != IMS_UNDEF_CONFIG_8) {dest_ua->via_uri_with_default_port = src_ua->via_uri_with_default_port;}
+    if (src_ua->notify_sms_notify_done != IMS_UNDEF_CONFIG_8) {dest_ua->notify_sms_notify_done = src_ua->notify_sms_notify_done;}
+    if (src_ua->emergency_use_imsi != IMS_UNDEF_CONFIG_8) {dest_ua->emergency_use_imsi = src_ua->emergency_use_imsi;}
+    if (src_ua->check_msisdn != IMS_UNDEF_CONFIG_8) {dest_ua->check_msisdn = src_ua->check_msisdn;}
+    if (src_ua->support_throttling_algo != IMS_UNDEF_CONFIG_8) {dest_ua->support_throttling_algo = src_ua->support_throttling_algo;}
+    if (src_ua->reg_after_nw_dereg_60s != IMS_UNDEF_CONFIG_8) {dest_ua->reg_after_nw_dereg_60s = src_ua->reg_after_nw_dereg_60s;}
+    if (src_ua->sub_contact_with_sip_instance != IMS_UNDEF_CONFIG_8) {dest_ua->sub_contact_with_sip_instance = src_ua->sub_contact_with_sip_instance;}
+    if (src_ua->stop_reg_md_lower_layer_err != IMS_UNDEF_CONFIG_8) {dest_ua->stop_reg_md_lower_layer_err = src_ua->stop_reg_md_lower_layer_err;}
+    if (src_ua->reg_gruu_support != IMS_UNDEF_CONFIG_8) {dest_ua->reg_gruu_support = src_ua->reg_gruu_support;}
+    if (src_ua->oos_end_reset_tcp_client != IMS_UNDEF_CONFIG_8) {dest_ua->oos_end_reset_tcp_client = src_ua->oos_end_reset_tcp_client;}
+    if (src_ua->wfc_refresh_23g != IMS_UNDEF_CONFIG_8) {dest_ua->wfc_refresh_23g = src_ua->wfc_refresh_23g;}
+    if (src_ua->pidf_country != IMS_UNDEF_CONFIG_8) {dest_ua->pidf_country = src_ua->pidf_country;}
+    if (src_ua->init_reg_backoff_enabled != IMS_UNDEF_CONFIG_8) {dest_ua->init_reg_backoff_enabled = src_ua->init_reg_backoff_enabled;}
+    if (src_ua->reg_fail_not_need_remove_binding != IMS_UNDEF_CONFIG_8) {dest_ua->reg_fail_not_need_remove_binding = src_ua->reg_fail_not_need_remove_binding;}
+    if (src_ua->pend_dereg_in_initial_reg != IMS_UNDEF_CONFIG_8) {dest_ua->pend_dereg_in_initial_reg = src_ua->pend_dereg_in_initial_reg;}
+    if (src_ua->access_network_info_type != IMS_UNDEF_CONFIG_8) {dest_ua->access_network_info_type = src_ua->access_network_info_type;}
+    if (src_ua->when_stop_b_timer != IMS_UNDEF_CONFIG_8) {dest_ua->when_stop_b_timer = src_ua->when_stop_b_timer;}
+    if (src_ua->rcs_feature[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->rcs_feature, src_ua->rcs_feature, sizeof(src_ua->rcs_feature));}
+    if (src_ua->try_next_pcscf_5626 != IMS_UNDEF_CONFIG_8) {dest_ua->try_next_pcscf_5626 = src_ua->try_next_pcscf_5626;}
+    if (src_ua->try_same_pcscf_rereg != IMS_UNDEF_CONFIG_8) {dest_ua->try_same_pcscf_rereg = src_ua->try_same_pcscf_rereg;}
+    if (src_ua->reg_try_all_pcscf_5626 != IMS_UNDEF_CONFIG_8) {dest_ua->reg_try_all_pcscf_5626 = src_ua->reg_try_all_pcscf_5626;}
+    if (src_ua->close_unprotected_conn != IMS_UNDEF_CONFIG_8) {dest_ua->close_unprotected_conn = src_ua->close_unprotected_conn;}
+    if (src_ua->need_revise_rtp_dir != IMS_UNDEF_CONFIG_8) {dest_ua->need_revise_rtp_dir = src_ua->need_revise_rtp_dir;}
+    if (src_ua->calc_participant_count_from_notify != IMS_UNDEF_CONFIG_8) {dest_ua->calc_participant_count_from_notify = src_ua->calc_participant_count_from_notify;}
+    if (src_ua->dereg_send_bye != IMS_UNDEF_CONFIG_8) {dest_ua->dereg_send_bye = src_ua->dereg_send_bye;}
+    if (src_ua->tdelay != IMS_UNDEF_CONFIG_32) {dest_ua->tdelay = src_ua->tdelay;}
+    if (src_ua->try_n_next_pcscf_5626 != IMS_UNDEF_CONFIG_32) {dest_ua->try_n_next_pcscf_5626 = src_ua->try_n_next_pcscf_5626;}
+    if (src_ua->dereg_delay_time != IMS_UNDEF_CONFIG_32) {dest_ua->dereg_delay_time = src_ua->dereg_delay_time;}
+    if (src_ua->try_same_pcscf_if_retry_after != IMS_UNDEF_CONFIG_8) {dest_ua->try_same_pcscf_if_retry_after = src_ua->try_same_pcscf_if_retry_after;}
+    if (src_ua->contact_wildcard_dereg != IMS_UNDEF_CONFIG_8) {dest_ua->contact_wildcard_dereg = src_ua->contact_wildcard_dereg;}
+    if (src_ua->check_notify_instance_id != IMS_UNDEF_CONFIG_8) {dest_ua->check_notify_instance_id = src_ua->check_notify_instance_id;}
+    if (src_ua->add_cs_volte_feature_tag != IMS_UNDEF_CONFIG_8) {dest_ua->add_cs_volte_feature_tag = src_ua->add_cs_volte_feature_tag;}
+    if (src_ua->check_call_domain != IMS_UNDEF_CONFIG_8) {dest_ua->check_call_domain = src_ua->check_call_domain;}
+    if (src_ua->support_sip_block != IMS_UNDEF_CONFIG_8) {dest_ua->support_sip_block = src_ua->support_sip_block;}
+    if (src_ua->sip_compact_headers != IMS_UNDEF_CONFIG_8) {dest_ua->sip_compact_headers = src_ua->sip_compact_headers;}
+    if (src_ua->support_resub != IMS_UNDEF_CONFIG_8) {dest_ua->support_resub = src_ua->support_resub;}
+    if (src_ua->expire_time_by_user != IMS_UNDEF_CONFIG_32) {dest_ua->expire_time_by_user = src_ua->expire_time_by_user;}
+    if (src_ua->reg_over_tcp != IMS_UNDEF_CONFIG_8) {dest_ua->reg_over_tcp = src_ua->reg_over_tcp;}
+    if (src_ua->not_auto_reg != IMS_UNDEF_CONFIG_32) {dest_ua->not_auto_reg = src_ua->not_auto_reg;}
+    if (src_ua->reg_expire_time_backup != IMS_UNDEF_CONFIG_32) {dest_ua->reg_expire_time_backup = src_ua->reg_expire_time_backup;}
+    if (src_ua->emc_call_ringback_timer_timeout != IMS_UNDEF_CONFIG_32) {dest_ua->emc_call_ringback_timer_timeout = src_ua->emc_call_ringback_timer_timeout;}
+    if (src_ua->add_pcni_in_vowifi != IMS_UNDEF_CONFIG_8) {dest_ua->add_pcni_in_vowifi = src_ua->add_pcni_in_vowifi;}
+    if (src_ua->emc_cits_protect_timer != IMS_UNDEF_CONFIG_32) {dest_ua->emc_cits_protect_timer = src_ua->emc_cits_protect_timer;}
+    if (src_ua->altc_support != IMS_UNDEF_CONFIG_8) {dest_ua->altc_support = src_ua->altc_support;}
+    if (src_ua->altc_prefer_offer != IMS_UNDEF_CONFIG_8) {dest_ua->altc_prefer_offer = src_ua->altc_prefer_offer;}
+    if (src_ua->altc_prefer_answer != IMS_UNDEF_CONFIG_8) {dest_ua->altc_prefer_answer = src_ua->altc_prefer_answer;}
+    if (src_ua->random_init_ipsec_port != IMS_UNDEF_CONFIG_8) {dest_ua->random_init_ipsec_port = src_ua->random_init_ipsec_port;}
+    if (src_ua->asymmetric_payload_type_enable != IMS_UNDEF_CONFIG_8) {dest_ua->asymmetric_payload_type_enable = src_ua->asymmetric_payload_type_enable;}
+    if (src_ua->max_hold_unhold_retry_cnt != IMS_UNDEF_CONFIG_8) {dest_ua->max_hold_unhold_retry_cnt = src_ua->max_hold_unhold_retry_cnt;}
+    if (src_ua->disable_ul_rtp_in_early_state != IMS_UNDEF_CONFIG_8) {dest_ua->disable_ul_rtp_in_early_state = src_ua->disable_ul_rtp_in_early_state;}
+    if (src_ua->support_early_upgrade != IMS_UNDEF_CONFIG_8) {dest_ua->support_early_upgrade = src_ua->support_early_upgrade;}
+    if (src_ua->pqos_timer_timeout != IMS_UNDEF_CONFIG_16) {dest_ua->pqos_timer_timeout = src_ua->pqos_timer_timeout;}
+    if (src_ua->upgrade_cancel_feature != IMS_UNDEF_CONFIG_8) {dest_ua->upgrade_cancel_feature = src_ua->upgrade_cancel_feature;}
+    if (src_ua->upgrade_with_Tupo != IMS_UNDEF_CONFIG_8) {dest_ua->upgrade_with_Tupo = src_ua->upgrade_with_Tupo;}
+    if (src_ua->rtt_enable != IMS_UNDEF_CONFIG_8) {dest_ua->rtt_enable = src_ua->rtt_enable;}
+    if (src_ua->ect_enable != IMS_UNDEF_CONFIG_8) {dest_ua->ect_enable = src_ua->ect_enable;}
+    if (src_ua->add_cell_info_age_to_cni != IMS_UNDEF_CONFIG_8) {dest_ua->add_cell_info_age_to_cni = src_ua->add_cell_info_age_to_cni;}
+    if (src_ua->check_reg_contact != IMS_UNDEF_CONFIG_8) {dest_ua->check_reg_contact = src_ua->check_reg_contact;}
+    if (src_ua->geolocation_type != IMS_UNDEF_CONFIG_8) {dest_ua->geolocation_type = src_ua->geolocation_type;}
+    if (src_ua->init_reg_delay_time != IMS_UNDEF_CONFIG_32) {dest_ua->init_reg_delay_time = src_ua->init_reg_delay_time;}
+    if (src_ua->add_timezone_to_pani != IMS_UNDEF_CONFIG_8) {dest_ua->add_timezone_to_pani = src_ua->add_timezone_to_pani;}
+    if (src_ua->tcp_connect_max_time_all != IMS_UNDEF_CONFIG_32) {dest_ua->tcp_connect_max_time_all = src_ua->tcp_connect_max_time_all;}
+    if (src_ua->update_ipsec_port_494 != IMS_UNDEF_CONFIG_8) {dest_ua->update_ipsec_port_494 = src_ua->update_ipsec_port_494;}
+    if (src_ua->refer_delay_timer != IMS_UNDEF_CONFIG_32) {dest_ua->refer_delay_timer = src_ua->refer_delay_timer;}
+    if (src_ua->rtt_tag_mode != IMS_UNDEF_CONFIG_8) {dest_ua->rtt_tag_mode = src_ua->rtt_tag_mode;}
+    if (src_ua->reject_rcs_request != IMS_UNDEF_CONFIG_32) {dest_ua->reject_rcs_request = src_ua->reject_rcs_request;}
+    if (src_ua->allow_non_sendrecv_rtcp_0 != IMS_UNDEF_CONFIG_8) {dest_ua->allow_non_sendrecv_rtcp_0 = src_ua->allow_non_sendrecv_rtcp_0;}
+    if (src_ua->keep_original_refresher_in_reinvite != IMS_UNDEF_CONFIG_32) {dest_ua->keep_original_refresher_in_reinvite = src_ua->keep_original_refresher_in_reinvite;}
+    if (src_ua->force_csfb_when663 != IMS_UNDEF_CONFIG_8) {dest_ua->force_csfb_when663 = src_ua->force_csfb_when663;}
+    if (src_ua->decouple_conf_srvcc_mid_call_cap != IMS_UNDEF_CONFIG_8) {dest_ua->decouple_conf_srvcc_mid_call_cap = src_ua->decouple_conf_srvcc_mid_call_cap;}
+    if (src_ua->send_refer_to_conf_uri != IMS_UNDEF_CONFIG_8) {dest_ua->send_refer_to_conf_uri = src_ua->send_refer_to_conf_uri;}
+    if (src_ua->conference_desub_time != IMS_UNDEF_CONFIG_8) {dest_ua->conference_desub_time = src_ua->conference_desub_time;}
+    if (src_ua->call_mo_pidf_usage != IMS_UNDEF_CONFIG_8) {dest_ua->call_mo_pidf_usage = src_ua->call_mo_pidf_usage;}
+    if (src_ua->omit_method_invite_in_refer_to != IMS_UNDEF_CONFIG_8) {dest_ua->omit_method_invite_in_refer_to = src_ua->omit_method_invite_in_refer_to;}
+    if (src_ua->video_offer_rtp_profile != IMS_UNDEF_CONFIG_8) {dest_ua->video_offer_rtp_profile = src_ua->video_offer_rtp_profile;}
+    if (src_ua->reuse_transport_methods != IMS_UNDEF_CONFIG_32) {dest_ua->reuse_transport_methods = src_ua->reuse_transport_methods;}
+    if (src_ua->default_reg_retry_mechanism != IMS_UNDEF_CONFIG_8) {dest_ua->default_reg_retry_mechanism = src_ua->default_reg_retry_mechanism;}
+    if (src_ua->e3_emc_setup_catch_all_roaming_timer != IMS_UNDEF_CONFIG_32) {dest_ua->e3_emc_setup_catch_all_roaming_timer = src_ua->e3_emc_setup_catch_all_roaming_timer;}
+    if (src_ua->e2_emc_setup_initiation_timer != IMS_UNDEF_CONFIG_32) {dest_ua->e2_emc_setup_initiation_timer = src_ua->e2_emc_setup_initiation_timer;}
+    if (src_ua->e3_emc_setup_catch_all_home_timer != IMS_UNDEF_CONFIG_32) {dest_ua->e3_emc_setup_catch_all_home_timer = src_ua->e3_emc_setup_catch_all_home_timer;}
+    if (src_ua->last_known_rat_type != IMS_UNDEF_CONFIG_32) {dest_ua->last_known_rat_type = src_ua->last_known_rat_type;}
+    if (src_ua->last_known_cell_id[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->last_known_cell_id, src_ua->last_known_cell_id, sizeof(src_ua->last_known_cell_id));}
+    if (src_ua->last_known_cell_timestamp[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->last_known_cell_timestamp, src_ua->last_known_cell_timestamp, sizeof(src_ua->last_known_cell_timestamp));}
+    if (src_ua->support_video_early_media != IMS_UNDEF_CONFIG_8) {dest_ua->support_video_early_media = src_ua->support_video_early_media;}
+    if (src_ua->update_cap_when_rat_net_change != IMS_UNDEF_CONFIG_8) {dest_ua->update_cap_when_rat_net_change = src_ua->update_cap_when_rat_net_change;}
+    if (src_ua->disable_tcall_timer_in_hold != IMS_UNDEF_CONFIG_8) {dest_ua->disable_tcall_timer_in_hold = src_ua->disable_tcall_timer_in_hold;}
+    if (src_ua->set_homeuri_from_pau != IMS_UNDEF_CONFIG_8) {dest_ua->set_homeuri_from_pau = src_ua->set_homeuri_from_pau;}
+    if (src_ua->enable_in_band_tone_in_hold != IMS_UNDEF_CONFIG_8) {dest_ua->enable_in_band_tone_in_hold = src_ua->enable_in_band_tone_in_hold;}
+    if (src_ua->reg_check_reason_header != IMS_UNDEF_CONFIG_8) {dest_ua->reg_check_reason_header = src_ua->reg_check_reason_header;}
+    if (src_ua->from_header_peer_addr != IMS_UNDEF_CONFIG_8) {dest_ua->from_header_peer_addr = src_ua->from_header_peer_addr;}
+    if (src_ua->call_tcw_timer_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->call_tcw_timer_timeout = src_ua->call_tcw_timer_timeout;}
+    if (src_ua->active_state_oos_level != IMS_UNDEF_CONFIG_8) {dest_ua->active_state_oos_level = src_ua->active_state_oos_level;}
+    if (src_ua->remove_aconf_when_reinvite_without_sdp != IMS_UNDEF_CONFIG_8) {dest_ua->remove_aconf_when_reinvite_without_sdp = src_ua->remove_aconf_when_reinvite_without_sdp;}
+    if (src_ua->ecall_get_puid_from_normal_ims_reg != IMS_UNDEF_CONFIG_8) {dest_ua->ecall_get_puid_from_normal_ims_reg = src_ua->ecall_get_puid_from_normal_ims_reg;}
+    if (src_ua->send_bye_if_error_resp_in_hold_unhold != IMS_UNDEF_CONFIG_8) {dest_ua->send_bye_if_error_resp_in_hold_unhold = src_ua->send_bye_if_error_resp_in_hold_unhold;}
+    if (src_ua->merge_send_bye_delay != IMS_UNDEF_CONFIG_32) {dest_ua->merge_send_bye_delay = src_ua->merge_send_bye_delay;}
+    if (src_ua->required_loc_info_num_set[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->required_loc_info_num_set, src_ua->required_loc_info_num_set, sizeof(src_ua->required_loc_info_num_set));}
+    if (src_ua->sub_def_expires != IMS_UNDEF_CONFIG_32) {dest_ua->sub_def_expires = src_ua->sub_def_expires;}
+    if (src_ua->ignore_380_emg_xml != IMS_UNDEF_CONFIG_8) {dest_ua->ignore_380_emg_xml = src_ua->ignore_380_emg_xml;}
+    if (src_ua->evs_fmtp_variant_pt != IMS_UNDEF_CONFIG_8) {dest_ua->evs_fmtp_variant_pt = src_ua->evs_fmtp_variant_pt;}
+    if (src_ua->evs_configuration_profile != IMS_UNDEF_CONFIG_8) {dest_ua->evs_configuration_profile = src_ua->evs_configuration_profile;}
+    if (src_ua->evs_configuration_profile_2 != IMS_UNDEF_CONFIG_8) {dest_ua->evs_configuration_profile_2 = src_ua->evs_configuration_profile_2;}
+    if (src_ua->call_barring_in_warning_header != IMS_UNDEF_CONFIG_8) {dest_ua->call_barring_in_warning_header = src_ua->call_barring_in_warning_header;}
+    if (src_ua->use_amr_bit_rate_downgrade != IMS_UNDEF_CONFIG_8) {dest_ua->use_amr_bit_rate_downgrade = src_ua->use_amr_bit_rate_downgrade;}
+    if (src_ua->re_calc_rr_rs_in_offer_answer != IMS_UNDEF_CONFIG_8) {dest_ua->re_calc_rr_rs_in_offer_answer = src_ua->re_calc_rr_rs_in_offer_answer;}
+    if (src_ua->send_bw_ind_when_recv_183_prack != IMS_UNDEF_CONFIG_8) {dest_ua->send_bw_ind_when_recv_183_prack = src_ua->send_bw_ind_when_recv_183_prack;}
+    if (src_ua->support_ringing_downgrade != IMS_UNDEF_CONFIG_8) {dest_ua->support_ringing_downgrade = src_ua->support_ringing_downgrade;}
+    if (src_ua->add_qos_when_offer_present != IMS_UNDEF_CONFIG_8) {dest_ua->add_qos_when_offer_present = src_ua->add_qos_when_offer_present;}
+    if (src_ua->call_normal_clear_timer_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->call_normal_clear_timer_timeout = src_ua->call_normal_clear_timer_timeout;}
+    if (src_ua->no_state_transition_when_183_withoutsdp != IMS_UNDEF_CONFIG_8) {dest_ua->no_state_transition_when_183_withoutsdp = src_ua->no_state_transition_when_183_withoutsdp;}
+    if (src_ua->use_org_nego_codec != IMS_UNDEF_CONFIG_8) {dest_ua->use_org_nego_codec = src_ua->use_org_nego_codec;}
+    if (src_ua->set_upgrade_des_strength_optional != IMS_UNDEF_CONFIG_8) {dest_ua->set_upgrade_des_strength_optional = src_ua->set_upgrade_des_strength_optional;}
+    if (src_ua->set_text_rtcp_0 != IMS_UNDEF_CONFIG_8) {dest_ua->set_text_rtcp_0 = src_ua->set_text_rtcp_0;}
+    if (src_ua->use_lower_anonymous != IMS_UNDEF_CONFIG_8) {dest_ua->use_lower_anonymous = src_ua->use_lower_anonymous;}
+    if (src_ua->reg_restore_try_next_pcscf != IMS_UNDEF_CONFIG_8) {dest_ua->reg_restore_try_next_pcscf = src_ua->reg_restore_try_next_pcscf;}
+    if (src_ua->reject_text_when_text_off != IMS_UNDEF_CONFIG_8) {dest_ua->reject_text_when_text_off = src_ua->reject_text_when_text_off;}
+    if (src_ua->UA_call_evs_mode_set[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->UA_call_evs_mode_set, src_ua->UA_call_evs_mode_set, sizeof(src_ua->UA_call_evs_mode_set));}
+    if (src_ua->rtcp_mux_support != IMS_UNDEF_CONFIG_8) {dest_ua->rtcp_mux_support = src_ua->rtcp_mux_support;}
+    if (src_ua->wfc_emerg_pidf_lng_lat_country != IMS_UNDEF_CONFIG_8) {dest_ua->wfc_emerg_pidf_lng_lat_country = src_ua->wfc_emerg_pidf_lng_lat_country;}
+    if (src_ua->ringing_state_oos_level != IMS_UNDEF_CONFIG_8) {dest_ua->ringing_state_oos_level = src_ua->ringing_state_oos_level;}
+    if (src_ua->release_pdn_when_ems_dereg != IMS_UNDEF_CONFIG_8) {dest_ua->release_pdn_when_ems_dereg = src_ua->release_pdn_when_ems_dereg;}
+    if (src_ua->add_phone_context_ignore_number_type!= IMS_UNDEF_CONFIG_8) {dest_ua->add_phone_context_ignore_number_type = src_ua->add_phone_context_ignore_number_type;}
+    if (src_ua->ims_notify_feature_enabled!= IMS_UNDEF_CONFIG_8) {dest_ua->ims_notify_feature_enabled = src_ua->ims_notify_feature_enabled;}
+    if (src_ua->support_combine_retry_algo != IMS_UNDEF_CONFIG_8) {dest_ua->support_combine_retry_algo = src_ua->support_combine_retry_algo;}
+    if (src_ua->query_other_sim_call_state != IMS_UNDEF_CONFIG_8) {dest_ua->query_other_sim_call_state = src_ua->query_other_sim_call_state;}
+    if (src_ua->use_pau_at_sdp_origin != IMS_UNDEF_CONFIG_8) {dest_ua->use_pau_at_sdp_origin = src_ua->use_pau_at_sdp_origin;}
+    if (src_ua->p_early_media_in_invite != IMS_UNDEF_CONFIG_8) {dest_ua->p_early_media_in_invite = src_ua->p_early_media_in_invite;}
+    if (src_ua->ect_refer_to_use_pai != IMS_UNDEF_CONFIG_8) {dest_ua->ect_refer_to_use_pai = src_ua->ect_refer_to_use_pai;}
+    if (src_ua->reged_with_notification != IMS_UNDEF_CONFIG_8) {dest_ua->reged_with_notification = src_ua->reged_with_notification;}
+    if (src_ua->reg_when_norsp_before_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->reg_when_norsp_before_timeout = src_ua->reg_when_norsp_before_timeout;}
+    if (src_ua->ect_refer_to_use_sip_uri != IMS_UNDEF_CONFIG_8) {dest_ua->ect_refer_to_use_sip_uri = src_ua->ect_refer_to_use_sip_uri;}
+    if (src_ua->cs_availability_query != IMS_UNDEF_CONFIG_8) {dest_ua->cs_availability_query = src_ua->cs_availability_query;}
+    if (src_ua->omit_err_rsp_for_prack != IMS_UNDEF_CONFIG_8) {dest_ua->omit_err_rsp_for_prack = src_ua->omit_err_rsp_for_prack;}
+    if (src_ua->reg_add_content_disposition != IMS_UNDEF_CONFIG_32) {dest_ua->reg_add_content_disposition = src_ua->reg_add_content_disposition;}
+    if (src_ua->reg_disable_pidf != IMS_UNDEF_CONFIG_8) {dest_ua->reg_disable_pidf = src_ua->reg_disable_pidf;}
+    if (src_ua->cancel_upgrade_force_to_audio != IMS_UNDEF_CONFIG_8) {dest_ua->cancel_upgrade_force_to_audio = src_ua->cancel_upgrade_force_to_audio;}
+    if (src_ua->no_auto_retry_errcode[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->no_auto_retry_errcode, src_ua->no_auto_retry_errcode, sizeof(src_ua->no_auto_retry_errcode));}
+    if (src_ua->delay_normal_or_em_reg_if_they_occur_simulta != IMS_UNDEF_CONFIG_8) {dest_ua->delay_normal_or_em_reg_if_they_occur_simulta = src_ua->delay_normal_or_em_reg_if_they_occur_simulta;}
+    if (src_ua->mod_session_req_timer_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->mod_session_req_timer_timeout = src_ua->mod_session_req_timer_timeout;}
+    if (src_ua->hold_unhold_send_eimscmode != IMS_UNDEF_CONFIG_8) {dest_ua->hold_unhold_send_eimscmode = src_ua->hold_unhold_send_eimscmode;}
+    if (src_ua->esipcpi_full_reason != IMS_UNDEF_CONFIG_8) {dest_ua->esipcpi_full_reason = src_ua->esipcpi_full_reason;}
+    if (src_ua->check_380_xml_with_no_action != IMS_UNDEF_CONFIG_8) {dest_ua->check_380_xml_with_no_action = src_ua->check_380_xml_with_no_action;}
+    if (src_ua->bypass_380_pai_check != IMS_UNDEF_CONFIG_8) {dest_ua->bypass_380_pai_check = src_ua->bypass_380_pai_check;}
+    if (src_ua->set_non_sendrecv_rtcp_0 != IMS_UNDEF_CONFIG_8) {dest_ua->set_non_sendrecv_rtcp_0 = src_ua->set_non_sendrecv_rtcp_0;}
+    if (src_ua->follow_mt_pt_list != IMS_UNDEF_CONFIG_8) {dest_ua->follow_mt_pt_list = src_ua->follow_mt_pt_list;}
+    if (src_ua->report_eimsreginfo_urc != IMS_UNDEF_CONFIG_8) {dest_ua->report_eimsreginfo_urc = src_ua->report_eimsreginfo_urc;}
+    if (src_ua->start_ringback_t_only_by_180 != IMS_UNDEF_CONFIG_8) {dest_ua->start_ringback_t_only_by_180 = src_ua->start_ringback_t_only_by_180;}
+    if (src_ua->open_pcscf_retry_count_limit != IMS_UNDEF_CONFIG_8) {dest_ua->open_pcscf_retry_count_limit = src_ua->open_pcscf_retry_count_limit;}
+    if (src_ua->conf_refer_order_by_call_id != IMS_UNDEF_CONFIG_8) {dest_ua->conf_refer_order_by_call_id = src_ua->conf_refer_order_by_call_id;}
+    if (src_ua->regard_180_without_pem_as_inactive != IMS_UNDEF_CONFIG_8) {dest_ua->regard_180_without_pem_as_inactive = src_ua->regard_180_without_pem_as_inactive;}
+    if (src_ua->always_fetch_1st_entry_in_hisInfo != IMS_UNDEF_CONFIG_8) {dest_ua->always_fetch_1st_entry_in_hisInfo = src_ua->always_fetch_1st_entry_in_hisInfo;}
+    if (src_ua->still_select_if_no_acceptable_pt != IMS_UNDEF_CONFIG_8) {dest_ua->still_select_if_no_acceptable_pt = src_ua->still_select_if_no_acceptable_pt;}
+    if (src_ua->rm_prcd_when_video_prcd_off != IMS_UNDEF_CONFIG_8) {dest_ua->rm_prcd_when_video_prcd_off = src_ua->rm_prcd_when_video_prcd_off;}
+    if (src_ua->mo_b1_timer_timeout != IMS_UNDEF_CONFIG_32) {dest_ua->mo_b1_timer_timeout = src_ua->mo_b1_timer_timeout;}
+    if (src_ua->mt_call_last_come_first_served_timer_timeout != IMS_UNDEF_CONFIG_32) {dest_ua->mt_call_last_come_first_served_timer_timeout = src_ua->mt_call_last_come_first_served_timer_timeout;}
+    if (src_ua->init_reg_guard_timer != IMS_UNDEF_CONFIG_8) {dest_ua->init_reg_guard_timer = src_ua->init_reg_guard_timer;}
+    if (src_ua->iot_mode != IMS_UNDEF_CONFIG_8) {dest_ua->iot_mode = src_ua->iot_mode;}
+    if (src_ua->scb_ntf_cs_protection != IMS_UNDEF_CONFIG_8) {dest_ua->scb_ntf_cs_protection = src_ua->scb_ntf_cs_protection;}
+    if (src_ua->dynamic_pdn_mtu != IMS_UNDEF_CONFIG_8) {dest_ua->dynamic_pdn_mtu = src_ua->dynamic_pdn_mtu;}
+    if (src_ua->disconnect_tcp_when_abnormal != IMS_UNDEF_CONFIG_8) {dest_ua->disconnect_tcp_when_abnormal = src_ua->disconnect_tcp_when_abnormal;}
+    if (src_ua->pending_sip_msg_in_oos_state != IMS_UNDEF_CONFIG_8) {dest_ua->pending_sip_msg_in_oos_state = src_ua->pending_sip_msg_in_oos_state;}
+    if (src_ua->no_additional_invite_after_downgrade != IMS_UNDEF_CONFIG_8) {dest_ua->no_additional_invite_after_downgrade = src_ua->no_additional_invite_after_downgrade;}
+    if (src_ua->retry_video_as_voice_on_failure != IMS_UNDEF_CONFIG_8) {dest_ua->retry_video_as_voice_on_failure = src_ua->retry_video_as_voice_on_failure;}    
+    if (src_ua->sit_tcp_2xx_rsp_retransmission != IMS_UNDEF_CONFIG_8) {dest_ua->sit_tcp_2xx_rsp_retransmission = src_ua->sit_tcp_2xx_rsp_retransmission;}
+    if (src_ua->wait_user_end_call != IMS_UNDEF_CONFIG_8) {dest_ua->wait_user_end_call = src_ua->wait_user_end_call;}
+    if (src_ua->delay_ecpi2_at_183 != IMS_UNDEF_CONFIG_8) {dest_ua->delay_ecpi2_at_183 = src_ua->delay_ecpi2_at_183;}
+    if (src_ua->add_199_feature_tag != IMS_UNDEF_CONFIG_8) {dest_ua->add_199_feature_tag = src_ua->add_199_feature_tag;}
+    if (src_ua->rm_civic_on_e911 != IMS_UNDEF_CONFIG_8) {dest_ua->rm_civic_on_e911 = src_ua->rm_civic_on_e911;}
+    if (src_ua->conf_call_final_notify_timer_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->conf_call_final_notify_timer_timeout = src_ua->conf_call_final_notify_timer_timeout;}
+    if (src_ua->rereg_guard_timer != IMS_UNDEF_CONFIG_8) {dest_ua->rereg_guard_timer = src_ua->rereg_guard_timer;}
+    if (src_ua->subscribe_guard_timer != IMS_UNDEF_CONFIG_8) {dest_ua->subscribe_guard_timer = src_ua->subscribe_guard_timer;}
+    if (src_ua->oos_guard_timer != IMS_UNDEF_CONFIG_8) {dest_ua->oos_guard_timer = src_ua->oos_guard_timer;}
+    if (src_ua->reg_reset_normal_tcp != IMS_UNDEF_CONFIG_8) {dest_ua->reg_reset_normal_tcp = src_ua->reg_reset_normal_tcp;}
+    if (src_ua->est_client_tcp_when_send_response != IMS_UNDEF_CONFIG_8) {dest_ua->est_client_tcp_when_send_response = src_ua->est_client_tcp_when_send_response;}
+    if (src_ua->precondition_in_support_header != IMS_UNDEF_CONFIG_8) {dest_ua->precondition_in_support_header = src_ua->precondition_in_support_header;}
+    if (src_ua->add_prcd_in_video_action_sdp != IMS_UNDEF_CONFIG_8) {dest_ua->add_prcd_in_video_action_sdp = src_ua->add_prcd_in_video_action_sdp;}
+    if (src_ua->curr_loc_dir_none_for_wifi != IMS_UNDEF_CONFIG_8) {dest_ua->curr_loc_dir_none_for_wifi = src_ua->curr_loc_dir_none_for_wifi;}
+    if (src_ua->ignore_mismatch_refer_notify != IMS_UNDEF_CONFIG_8) {dest_ua->ignore_mismatch_refer_notify = src_ua->ignore_mismatch_refer_notify;}
+    if (src_ua->t311_expired_release_call != IMS_UNDEF_CONFIG_8) {dest_ua->t311_expired_release_call = src_ua->t311_expired_release_call;}
+    if (src_ua->enable_amr_rateset_param_mode_set != IMS_UNDEF_CONFIG_8) {dest_ua->enable_amr_rateset_param_mode_set = src_ua->enable_amr_rateset_param_mode_set;}
+    if (src_ua->wait_user_end_call_no_rtppkt != IMS_UNDEF_CONFIG_8) {dest_ua->wait_user_end_call_no_rtppkt = src_ua->wait_user_end_call_no_rtppkt;}
+    if (src_ua->video_tag_for_all_calls != IMS_UNDEF_CONFIG_8) {dest_ua->video_tag_for_all_calls = src_ua->video_tag_for_all_calls;}
+    if (src_ua->send_183_without_sdp_when_no_100rel != IMS_UNDEF_CONFIG_8) {dest_ua->send_183_without_sdp_when_no_100rel = src_ua->send_183_without_sdp_when_no_100rel;}
+    if (src_ua->no_session_modify_retry_for_491 != IMS_UNDEF_CONFIG_8) {dest_ua->no_session_modify_retry_for_491 = src_ua->no_session_modify_retry_for_491;}
+    if (src_ua->hide_vattr_when_port_zero != IMS_UNDEF_CONFIG_8) {dest_ua->hide_vattr_when_port_zero = src_ua->hide_vattr_when_port_zero;}
+    if (src_ua->add_param_in_rm_prtcpnt != IMS_UNDEF_CONFIG_8) {dest_ua->add_param_in_rm_prtcpnt = src_ua->add_param_in_rm_prtcpnt;}
+    if (src_ua->emerg_reg_timer != IMS_UNDEF_CONFIG_32) {dest_ua->emerg_reg_timer = src_ua->emerg_reg_timer;}
+    if (src_ua->custom_em_ims_event_info != IMS_UNDEF_CONFIG_8) {dest_ua->custom_em_ims_event_info = src_ua->custom_em_ims_event_info;}
+    if (src_ua->always_report_remote_video_cap_support != IMS_UNDEF_CONFIG_8) {dest_ua->always_report_remote_video_cap_support = src_ua->always_report_remote_video_cap_support;}
+    if (src_ua->retry_ims_voice_if_488_no_sdp != IMS_UNDEF_CONFIG_8) {dest_ua->retry_ims_voice_if_488_no_sdp = src_ua->retry_ims_voice_if_488_no_sdp;}
+    if (src_ua->mo_update_retry_upper_limit != (kal_int32)IMS_UNDEF_CONFIG_32) {dest_ua->mo_update_retry_upper_limit = src_ua->mo_update_retry_upper_limit;}
+    if (src_ua->sdp_group_rtpmap_ptime != IMS_UNDEF_CONFIG_8) {dest_ua->sdp_group_rtpmap_ptime = src_ua->sdp_group_rtpmap_ptime;}
+    if (src_ua->sdp_group_rtpmap_fmtp != IMS_UNDEF_CONFIG_8) {dest_ua->sdp_group_rtpmap_fmtp = src_ua->sdp_group_rtpmap_fmtp;}
+    if (src_ua->in_reply_to_support != IMS_UNDEF_CONFIG_8) {dest_ua->in_reply_to_support = src_ua->in_reply_to_support;}
+    if (src_ua->ect_block_in_remote_hold != IMS_UNDEF_CONFIG_8) {dest_ua->ect_block_in_remote_hold = src_ua->ect_block_in_remote_hold;}
+    if (src_ua->ect_delay_target_unhold != IMS_UNDEF_CONFIG_8) {dest_ua->ect_delay_target_unhold = src_ua->ect_delay_target_unhold;}
+    if (src_ua->pcscf_usage_for_last_pcscf != IMS_UNDEF_CONFIG_8) {dest_ua->pcscf_usage_for_last_pcscf = src_ua->pcscf_usage_for_last_pcscf;}
+    if (src_ua->bypass_403_reason_phrase != IMS_UNDEF_CONFIG_8) {dest_ua->bypass_403_reason_phrase = src_ua->bypass_403_reason_phrase;}
+    if (src_ua->accept_wifi_call_if_audio_cap_0 != IMS_UNDEF_CONFIG_8) {dest_ua->accept_wifi_call_if_audio_cap_0 = src_ua->accept_wifi_call_if_audio_cap_0;}
+    if (src_ua->send_ecpi2_after_200ok_prack != IMS_UNDEF_CONFIG_8) {dest_ua->send_ecpi2_after_200ok_prack = src_ua->send_ecpi2_after_200ok_prack;}
+    if (src_ua->add_pani_in_ack != IMS_UNDEF_CONFIG_8) {dest_ua->add_pani_in_ack = src_ua->add_pani_in_ack;}
+    if (src_ua->wait_user_end_call_no_rtppkt_emc != IMS_UNDEF_CONFIG_8) {dest_ua->wait_user_end_call_no_rtppkt_emc = src_ua->wait_user_end_call_no_rtppkt_emc;}
+    if (src_ua->force_downgrade_waiting_final_resp != IMS_UNDEF_CONFIG_8) {dest_ua->force_downgrade_waiting_final_resp = src_ua->force_downgrade_waiting_final_resp;}
+    if (src_ua->mo_invite_to_18x_timer_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->mo_invite_to_18x_timer_timeout = src_ua->mo_invite_to_18x_timer_timeout;}
+    if (src_ua->wait_audio_rtp_for_crs_timer_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->wait_audio_rtp_for_crs_timer_timeout = src_ua->wait_audio_rtp_for_crs_timer_timeout;}
+    if (src_ua->stop_crs_if_no_video_or_audio != IMS_UNDEF_CONFIG_8) {dest_ua->stop_crs_if_no_video_or_audio = src_ua->stop_crs_if_no_video_or_audio;}
+    if (src_ua->reject_upgrade_if_more_than_1_call != IMS_UNDEF_CONFIG_8) {dest_ua->reject_upgrade_if_more_than_1_call = src_ua->reject_upgrade_if_more_than_1_call;}
+    if (src_ua->dereg_sms_disconnect_stack != IMS_UNDEF_CONFIG_8) {dest_ua->dereg_sms_disconnect_stack = src_ua->dereg_sms_disconnect_stack;}
+    if (src_ua->call_evoltesi_ringing_timer_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->call_evoltesi_ringing_timer_timeout = src_ua->call_evoltesi_ringing_timer_timeout;}
+    if (src_ua->address_strictly_compare != IMS_UNDEF_CONFIG_8) {dest_ua->address_strictly_compare = src_ua->address_strictly_compare;}
+    if (src_ua->confidence_level != IMS_UNDEF_CONFIG_32) {dest_ua->confidence_level = src_ua->confidence_level;}
+    if (src_ua->use_new_pcscf_for_reg != IMS_UNDEF_CONFIG_8) {dest_ua->use_new_pcscf_for_reg = src_ua->use_new_pcscf_for_reg;}
+    if (src_ua->new_reg_for_initial_request_type != IMS_UNDEF_CONFIG_8) {dest_ua->new_reg_for_initial_request_type = src_ua->new_reg_for_initial_request_type;}
+    if (src_ua->omit_sip_instance_in_contact != IMS_UNDEF_CONFIG_8) {dest_ua->omit_sip_instance_in_contact = src_ua->omit_sip_instance_in_contact;}
+    if (src_ua->media_ip_type != IMS_UNDEF_CONFIG_8) {dest_ua->media_ip_type = src_ua->media_ip_type;}
+    if (src_ua->play_local_tone_when_no_rtp_pkt_on_remote_hold != IMS_UNDEF_CONFIG_8) {dest_ua->play_local_tone_when_no_rtp_pkt_on_remote_hold= src_ua->play_local_tone_when_no_rtp_pkt_on_remote_hold;}
+    if (src_ua->stop_err_resp_retx_when_not_needed != IMS_UNDEF_CONFIG_8) {dest_ua->stop_err_resp_retx_when_not_needed = src_ua->stop_err_resp_retx_when_not_needed;}
+    if (src_ua->add_content_transfer_encoding_in_sms != IMS_UNDEF_CONFIG_8) {dest_ua->add_content_transfer_encoding_in_sms = src_ua->add_content_transfer_encoding_in_sms;}
+    if (src_ua->hold_before_add_to_conf != IMS_UNDEF_CONFIG_8) {dest_ua->hold_before_add_to_conf = src_ua->hold_before_add_to_conf;}
+    if (src_ua->sip_bye_retransmit_total_time != IMS_UNDEF_CONFIG_32) {dest_ua->sip_bye_retransmit_total_time = src_ua->sip_bye_retransmit_total_time;}
+    if (src_ua->call_sdp_ans_ack_timeout != IMS_UNDEF_CONFIG_8) {dest_ua->call_sdp_ans_ack_timeout = src_ua->call_sdp_ans_ack_timeout;}
+    if (src_ua->mt_processing_timeout != IMS_UNDEF_CONFIG_16) {dest_ua->mt_processing_timeout = src_ua->mt_processing_timeout;}
+    if (src_ua->support_invalid_audio_pt != IMS_UNDEF_CONFIG_8) {dest_ua->support_invalid_audio_pt = src_ua->support_invalid_audio_pt;}
+    if (src_ua->norm_sits_trans_timer_in_proceeding != IMS_UNDEF_CONFIG_32) {dest_ua->norm_sits_trans_timer_in_proceeding = src_ua->norm_sits_trans_timer_in_proceeding;}
+    if (src_ua->try_next_pcscf_5626_403 != IMS_UNDEF_CONFIG_8) {dest_ua->try_next_pcscf_5626_403 = src_ua->try_next_pcscf_5626_403;}
+    if (src_ua->block_refer_sending_if_max_num_of_participants != IMS_UNDEF_CONFIG_8) {dest_ua->block_refer_sending_if_max_num_of_participants = src_ua->block_refer_sending_if_max_num_of_participants;}
+    if (src_ua->link_mtu_size != IMS_UNDEF_CONFIG_32) {dest_ua->link_mtu_size = src_ua->link_mtu_size;}
+    if (src_ua->reject_mt_call_if_other_ps_id_has_active_call != IMS_UNDEF_CONFIG_8) {dest_ua->reject_mt_call_if_other_ps_id_has_active_call = src_ua->reject_mt_call_if_other_ps_id_has_active_call;}
+    if (src_ua->tcp_keepalive_interval != IMS_UNDEF_CONFIG_32) {dest_ua->tcp_keepalive_interval = src_ua->tcp_keepalive_interval;}
+    if (src_ua->call_invite_no_rsp_ran_prio_req_timer_timeout != IMS_UNDEF_CONFIG_16) {dest_ua->call_invite_no_rsp_ran_prio_req_timer_timeout = src_ua->call_invite_no_rsp_ran_prio_req_timer_timeout;}
+    if (src_ua->mo_invite_retry_cnt_limit != IMS_UNDEF_CONFIG_16) {dest_ua->mo_invite_retry_cnt_limit = src_ua->mo_invite_retry_cnt_limit;}
+    if (src_ua->mo_invite_retry_dur_limit != IMS_UNDEF_CONFIG_16) {dest_ua->mo_invite_retry_dur_limit = src_ua->mo_invite_retry_dur_limit;}
+    if (src_ua->call_evs_offer_fields != IMS_UNDEF_CONFIG_32) {dest_ua->call_evs_offer_fields = src_ua->call_evs_offer_fields;}
+    if (src_ua->call_evs_offer_fields_2 != IMS_UNDEF_CONFIG_32) {dest_ua->call_evs_offer_fields_2 = src_ua->call_evs_offer_fields_2;}
+    if (src_ua->cmr_2 != (kal_int8)IMS_UNDEF_CONFIG_8) {dest_ua->cmr_2 = src_ua->cmr_2;}
+    if (src_ua->hf_only_2 != IMS_UNDEF_CONFIG_8) {dest_ua->hf_only_2 = src_ua->hf_only_2;}
+    if (src_ua->dtx_2 != IMS_UNDEF_CONFIG_8) {dest_ua->dtx_2 = src_ua->dtx_2;}
+    if (src_ua->dtx_recv_2 != IMS_UNDEF_CONFIG_8) {dest_ua->dtx_recv_2 = src_ua->dtx_recv_2;}
+    if (src_ua->ch_send_2 != IMS_UNDEF_CONFIG_8) {dest_ua->ch_send_2 = src_ua->ch_send_2;}
+    if (src_ua->ch_recv_2 != IMS_UNDEF_CONFIG_8) {dest_ua->ch_recv_2 = src_ua->ch_recv_2;}
+    if (src_ua->ch_aw_recv_2 != (kal_int8)IMS_UNDEF_CONFIG_8) {dest_ua->ch_aw_recv_2 = src_ua->ch_aw_recv_2;}
+    if (src_ua->support_from_change_tag != IMS_UNDEF_CONFIG_8) {dest_ua->support_from_change_tag = src_ua->support_from_change_tag;}
+    if (src_ua->tir_privacy_in_mt_call_resp != IMS_UNDEF_CONFIG_8) {dest_ua->tir_privacy_in_mt_call_resp = src_ua->tir_privacy_in_mt_call_resp;}
+    if (src_ua->use_local_conf_participant_list_in_srvcc != IMS_UNDEF_CONFIG_8) {dest_ua->use_local_conf_participant_list_in_srvcc = src_ua->use_local_conf_participant_list_in_srvcc;}
+    if (src_ua->disable_evs_based_on_mcc_table[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->disable_evs_based_on_mcc_table, src_ua->disable_evs_based_on_mcc_table, sizeof(src_ua->disable_evs_based_on_mcc_table));}
+    if (src_ua->disable_evs_based_on_geo_table[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->disable_evs_based_on_geo_table, src_ua->disable_evs_based_on_geo_table, sizeof(src_ua->disable_evs_based_on_geo_table));}
+    if (src_ua->emergency_call_testing_number[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->emergency_call_testing_number, src_ua->emergency_call_testing_number, sizeof(src_ua->emergency_call_testing_number));}
+    if (src_ua->disable_response_source != IMS_UNDEF_CONFIG_8) {dest_ua->disable_response_source = src_ua->disable_response_source;}
+    if (src_ua->stir_shaken_for_privacy != IMS_UNDEF_CONFIG_8) {dest_ua->stir_shaken_for_privacy = src_ua->stir_shaken_for_privacy;}
+    if (src_ua->video_add_plus_one != IMS_UNDEF_CONFIG_8) {dest_ua->video_add_plus_one = src_ua->video_add_plus_one;}
+    if (src_ua->always_add_user_phone_in_conf_refer != IMS_UNDEF_CONFIG_8) {dest_ua->always_add_user_phone_in_conf_refer = src_ua->always_add_user_phone_in_conf_refer;}
+    if(src_ua->mo_f1_timer_timeout != IMS_UNDEF_CONFIG_32) {dest_ua->mo_f1_timer_timeout = src_ua->mo_f1_timer_timeout;}
+    if (src_ua->normal_call_csfb_failure_code_table_after_tone[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_ua->normal_call_csfb_failure_code_table_after_tone, src_ua->normal_call_csfb_failure_code_table_after_tone, sizeof(src_ua->normal_call_csfb_failure_code_table_after_tone));}
+    if (src_ua->UA_call_codec_order4 != IMS_UNDEF_CONFIG_8) {dest_ua->UA_call_codec_order4 = src_ua->UA_call_codec_order4;}
+    if (src_ua->send_media_mod_after_active != IMS_UNDEF_CONFIG_8) {dest_ua->send_media_mod_after_active = src_ua->send_media_mod_after_active;}
+    if (src_ua->register_event_subscribe_support != IMS_UNDEF_CONFIG_8) {dest_ua->register_event_subscribe_support = src_ua->register_event_subscribe_support;}
+
+    /* nvram_imc_struct */
+    if (src_imc->resource_retain_timer != IMS_UNDEF_CONFIG_32) {dest_imc->resource_retain_timer = src_imc->resource_retain_timer;}
+    if (src_imc->emergency_pdn_retain_timer != IMS_UNDEF_CONFIG_32) {dest_imc->emergency_pdn_retain_timer = src_imc->emergency_pdn_retain_timer;}
+    if (src_imc->auto_re_reg_timer != IMS_UNDEF_CONFIG_32) {dest_imc->auto_re_reg_timer = src_imc->auto_re_reg_timer;}
+    if (src_imc->auto_re_reg_base_timer != IMS_UNDEF_CONFIG_32) {dest_imc->auto_re_reg_base_timer = src_imc->auto_re_reg_base_timer;}
+    if (src_imc->auto_re_reg_max_timer != IMS_UNDEF_CONFIG_32) {dest_imc->auto_re_reg_max_timer = src_imc->auto_re_reg_max_timer;}
+    if (src_imc->poweroff_detach_timer != IMS_UNDEF_CONFIG_32) {dest_imc->poweroff_detach_timer = src_imc->poweroff_detach_timer;}
+    if (src_imc->poweroff_ims_dereg_timer != IMS_UNDEF_CONFIG_32) {dest_imc->poweroff_ims_dereg_timer = src_imc->poweroff_ims_dereg_timer;}
+    if (src_imc->emergency_reg_retain_timer != IMS_UNDEF_CONFIG_32) {dest_imc->emergency_reg_retain_timer = src_imc->emergency_reg_retain_timer;}
+    if (src_imc->pcscf_priority_list[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_imc->pcscf_priority_list, src_imc->pcscf_priority_list, sizeof(src_imc->pcscf_priority_list));}
+    if (src_imc->set_pcscf_discovery_via_nas != IMS_UNDEF_CONFIG_8) {dest_imc->set_pcscf_discovery_via_nas = src_imc->set_pcscf_discovery_via_nas;}
+    if (src_imc->voice_bearer_ctrl != IMS_UNDEF_CONFIG_8) {dest_imc->voice_bearer_ctrl = src_imc->voice_bearer_ctrl;}
+    if (src_imc->default_pcscf_address_is_v4 != IMS_UNDEF_CONFIG_8) {dest_imc->default_pcscf_address_is_v4 = src_imc->default_pcscf_address_is_v4;}
+    if (src_imc->force_user_account_by_manual != IMS_UNDEF_CONFIG_8) {dest_imc->force_user_account_by_manual = src_imc->force_user_account_by_manual;}
+    if (src_imc->set_ue_im_cn_signaling_flag != IMS_UNDEF_CONFIG_8) {dest_imc->set_ue_im_cn_signaling_flag = src_imc->set_ue_im_cn_signaling_flag;}
+    if (src_imc->check_nw_im_cn_signaling_flag != IMS_UNDEF_CONFIG_8) {dest_imc->check_nw_im_cn_signaling_flag = src_imc->check_nw_im_cn_signaling_flag;}
+    if (src_imc->ims_signaling_qci != IMS_UNDEF_CONFIG_8) {dest_imc->ims_signaling_qci = src_imc->ims_signaling_qci;}
+    if (src_imc->ims_voice_qci != IMS_UNDEF_CONFIG_8) {dest_imc->ims_voice_qci = src_imc->ims_voice_qci;}
+    if (src_imc->ims_video_qci != IMS_UNDEF_CONFIG_8) {dest_imc->ims_video_qci = src_imc->ims_video_qci;}
+    if (src_imc->ims_text_qci != IMS_UNDEF_CONFIG_16) {dest_imc->ims_text_qci = src_imc->ims_text_qci;}
+    if (src_imc->ims_v4v6_preference != IMS_UNDEF_CONFIG_8) {dest_imc->ims_v4v6_preference = src_imc->ims_v4v6_preference;}
+    if (src_imc->pcscf_manual_support != IMS_UNDEF_CONFIG_8) {dest_imc->pcscf_manual_support = src_imc->pcscf_manual_support;}
+    if (src_imc->pcscf_mo_support != IMS_UNDEF_CONFIG_8) {dest_imc->pcscf_mo_support = src_imc->pcscf_mo_support;}
+    if (src_imc->pcscf_sim_support != IMS_UNDEF_CONFIG_8) {dest_imc->pcscf_sim_support = src_imc->pcscf_sim_support;}
+    if (src_imc->pcscf_pco_renew_support != IMS_UNDEF_CONFIG_8) {dest_imc->pcscf_pco_renew_support = src_imc->pcscf_pco_renew_support;}
+    if (src_imc->emergency_call_learning_support != IMS_UNDEF_CONFIG_8) {dest_imc->emergency_call_learning_support = src_imc->emergency_call_learning_support;}
+    if (src_imc->home_detected_emergency_call_support != IMS_UNDEF_CONFIG_8) {dest_imc->home_detected_emergency_call_support = src_imc->home_detected_emergency_call_support;}
+    if (src_imc->sms_support != IMS_UNDEF_CONFIG_8) {dest_imc->sms_support = src_imc->sms_support;}
+    if (src_imc->voice_support != IMS_UNDEF_CONFIG_8) {dest_imc->voice_support = src_imc->voice_support;}
+    if (src_imc->wifi_voice_support != IMS_UNDEF_CONFIG_8) {dest_imc->wifi_voice_support = src_imc->wifi_voice_support;}
+    if (src_imc->video_over_ps_support != IMS_UNDEF_CONFIG_8) {dest_imc->video_over_ps_support = src_imc->video_over_ps_support;}
+    if (src_imc->wifi_video_over_ps_support != IMS_UNDEF_CONFIG_8) {dest_imc->wifi_video_over_ps_support = src_imc->wifi_video_over_ps_support;}
+    if (src_imc->ussd_support != IMS_UNDEF_CONFIG_8) {dest_imc->ussd_support = src_imc->ussd_support;}
+    if (src_imc->resource_allocation_mode != IMS_UNDEF_CONFIG_8) {dest_imc->resource_allocation_mode = src_imc->resource_allocation_mode;}
+    if (src_imc->icsi_resource_allocation_mode_1 != IMS_UNDEF_CONFIG_8) {dest_imc->icsi_resource_allocation_mode_1 = src_imc->icsi_resource_allocation_mode_1;}
+    if (src_imc->icsi_resource_allocation_mode_2 != IMS_UNDEF_CONFIG_8) {dest_imc->icsi_resource_allocation_mode_2 = src_imc->icsi_resource_allocation_mode_2;}
+    if (src_imc->icsi_resource_allocation_mode_3 != IMS_UNDEF_CONFIG_8) {dest_imc->icsi_resource_allocation_mode_3 = src_imc->icsi_resource_allocation_mode_3;}
+    if (src_imc->icsi_resource_allocation_mode_4 != IMS_UNDEF_CONFIG_8) {dest_imc->icsi_resource_allocation_mode_4 = src_imc->icsi_resource_allocation_mode_4;}
+    if (src_imc->mncmcc_pass_flag != IMS_UNDEF_CONFIG_8) {dest_imc->mncmcc_pass_flag = src_imc->mncmcc_pass_flag;}
+    if (src_imc->ims_reg_allowed_at_23g != IMS_UNDEF_CONFIG_8) {dest_imc->ims_reg_allowed_at_23g = src_imc->ims_reg_allowed_at_23g;}
+    if (src_imc->unsync_cfg != IMS_UNDEF_CONFIG_8) {dest_imc->unsync_cfg = src_imc->unsync_cfg;}
+    if (src_imc->wifi_em_reg_by_em_pdn != IMS_UNDEF_CONFIG_8) {dest_imc->wifi_em_reg_by_em_pdn = src_imc->wifi_em_reg_by_em_pdn;}
+    if (src_imc->allow_emergency_dereg != IMS_UNDEF_CONFIG_8) {dest_imc->allow_emergency_dereg = src_imc->allow_emergency_dereg;}
+    if (src_imc->send_sip_dereg_at_23g != IMS_UNDEF_CONFIG_8) {dest_imc->send_sip_dereg_at_23g = src_imc->send_sip_dereg_at_23g;}
+    if (src_imc->manual_cell_id[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_imc->manual_cell_id, src_imc->manual_cell_id, sizeof(src_imc->manual_cell_id));}
+    if (src_imc->pcscf_manual_list[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_imc->pcscf_manual_list, src_imc->pcscf_manual_list, sizeof(src_imc->pcscf_manual_list));}
+    if (src_imc->default_psismsc[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_imc->default_psismsc, src_imc->default_psismsc, sizeof(src_imc->default_psismsc));}
+    if (src_imc->manual_impi[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_imc->manual_impi, src_imc->manual_impi, sizeof(src_imc->manual_impi));}
+    if (src_imc->manual_impu[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_imc->manual_impu, src_imc->manual_impu, sizeof(src_imc->manual_impu));}
+    if (src_imc->manual_domain_name[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_imc->manual_domain_name, src_imc->manual_domain_name, sizeof(src_imc->manual_domain_name));}
+    if (src_imc->mncmcc_whitelist[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_imc->mncmcc_whitelist, src_imc->mncmcc_whitelist, sizeof(src_imc->mncmcc_whitelist));}
+    if (src_imc->clock_seq != IMS_UNDEF_CONFIG_16) {dest_imc->clock_seq = src_imc->clock_seq;}
+    if (src_imc->uuid[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_imc->uuid, src_imc->uuid, sizeof(src_imc->uuid));}
+    if (src_imc->nw_vops_rule != IMS_UNDEF_CONFIG_8) {dest_imc->nw_vops_rule = src_imc->nw_vops_rule;}
+    if (src_imc->location_info_support != IMS_UNDEF_CONFIG_8) {dest_imc->location_info_support = src_imc->location_info_support;}
+    if (src_imc->loc_info_query_timer != IMS_UNDEF_CONFIG_8) {dest_imc->loc_info_query_timer = src_imc->loc_info_query_timer;}
+    if (src_imc->loc_info_refresh_timer != IMS_UNDEF_CONFIG_8) {dest_imc->loc_info_refresh_timer = src_imc->loc_info_refresh_timer;}
+    if (src_imc->ecc_guard_timer != IMS_UNDEF_CONFIG_8) {dest_imc->ecc_guard_timer = src_imc->ecc_guard_timer;}
+    if (src_imc->ignore_sgn_qci_check != IMS_UNDEF_CONFIG_8) {dest_imc->ignore_sgn_qci_check = src_imc->ignore_sgn_qci_check;}
+    if (src_imc->ignore_media_qos_check != IMS_UNDEF_CONFIG_32) {dest_imc->ignore_media_qos_check = src_imc->ignore_media_qos_check;}
+    if (src_imc->default_fallback_support != IMS_UNDEF_CONFIG_8) {dest_imc->default_fallback_support = src_imc->default_fallback_support;}
+    if (src_imc->dedicated_fallback_support != IMS_UNDEF_CONFIG_8) {dest_imc->dedicated_fallback_support = src_imc->dedicated_fallback_support;}
+    if (src_imc->restore_pcscf != IMS_UNDEF_CONFIG_8) {dest_imc->restore_pcscf = src_imc->restore_pcscf;}
+    if (src_imc->not_acquire_audio_rtcp != IMS_UNDEF_CONFIG_8) {dest_imc->not_acquire_audio_rtcp = src_imc->not_acquire_audio_rtcp;}
+    if (src_imc->not_acquire_video_rtcp != IMS_UNDEF_CONFIG_8) {dest_imc->not_acquire_video_rtcp = src_imc->not_acquire_video_rtcp;}
+    if (src_imc->silent_deact != IMS_UNDEF_CONFIG_8) {dest_imc->silent_deact = src_imc->silent_deact;}
+    if (src_imc->imcb_setting_string[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_imc->imcb_setting_string, src_imc->imcb_setting_string, sizeof(src_imc->imcb_setting_string));}
+    if (src_imc->pcscf_home_policy_list[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_imc->pcscf_home_policy_list, src_imc->pcscf_home_policy_list, sizeof(src_imc->pcscf_home_policy_list));}
+    if (src_imc->pcscf_visit_policy_list[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_imc->pcscf_visit_policy_list, src_imc->pcscf_visit_policy_list, sizeof(src_imc->pcscf_visit_policy_list));}
+    if (src_imc->sgn_selection_weight[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_imc->sgn_selection_weight, src_imc->sgn_selection_weight, sizeof(src_imc->sgn_selection_weight));}
+    if (src_imc->silent_pdn_deact != IMS_UNDEF_CONFIG_8) {dest_imc->silent_pdn_deact = src_imc->silent_pdn_deact;}
+    if (src_imc->dereg_defer_pdn_release_timer != IMS_UNDEF_CONFIG_32) {dest_imc->dereg_defer_pdn_release_timer = src_imc->dereg_defer_pdn_release_timer;}
+    if (src_imc->timerF_expiry != IMS_UNDEF_CONFIG_8) {dest_imc->timerF_expiry = src_imc->timerF_expiry;}
+    if (src_imc->timerB_expiry != IMS_UNDEF_CONFIG_8) {dest_imc->timerB_expiry = src_imc->timerB_expiry;}
+    if (src_imc->pdn_rej_handle[0] != IMS_UNDEF_CONFIG_8) {kal_mem_cpy(dest_imc->pdn_rej_handle, src_imc->pdn_rej_handle, sizeof(src_imc->pdn_rej_handle));}
+    if (src_imc->video_resource_retain_timer != IMS_UNDEF_CONFIG_32) {dest_imc->video_resource_retain_timer = src_imc->video_resource_retain_timer;}
+    if (src_imc->video_default_fallback_support != IMS_UNDEF_CONFIG_8) {dest_imc->video_default_fallback_support = src_imc->video_default_fallback_support;}
+    if (src_imc->enable_audio_precondition != IMS_UNDEF_CONFIG_8) {dest_imc->enable_audio_precondition = src_imc->enable_audio_precondition;}
+    if (src_imc->enable_video_precondition != IMS_UNDEF_CONFIG_8) {dest_imc->enable_video_precondition = src_imc->enable_video_precondition;}
+    if (src_imc->enable_text_precondition != IMS_UNDEF_CONFIG_8) {dest_imc->enable_text_precondition = src_imc->enable_text_precondition;}
+    if (src_imc->video_dedicated_fallback_support != IMS_UNDEF_CONFIG_8) {dest_imc->video_dedicated_fallback_support = src_imc->video_dedicated_fallback_support;}
+    if (src_imc->normal_pdn_retry_count != IMS_UNDEF_CONFIG_8) {dest_imc->normal_pdn_retry_count = src_imc->normal_pdn_retry_count;}
+    if (src_imc->ext_timer_config[0] != IMS_UNDEF_CONFIG_32) {kal_mem_cpy(dest_imc->ext_timer_config, src_imc->ext_timer_config, sizeof(src_imc->ext_timer_config));}
+    if (src_imc->reset_retry_after_timer_criteria != IMS_UNDEF_CONFIG_32) {dest_imc->reset_retry_after_timer_criteria = src_imc->reset_retry_after_timer_criteria;}
+    if (src_imc->not_decouple_dereg_and_pdn_deact != IMS_UNDEF_CONFIG_8) {dest_imc->not_decouple_dereg_and_pdn_deact = src_imc->not_decouple_dereg_and_pdn_deact;}
+    if (src_imc->disable_isim_application != IMS_UNDEF_CONFIG_8) {dest_imc->disable_isim_application = src_imc->disable_isim_application;}
+    if (src_imc->open_volte_cc != IMS_UNDEF_CONFIG_8) {dest_imc->open_volte_cc = src_imc->open_volte_cc;}
+    if (src_imc->e911_resource_retain_timer != IMS_UNDEF_CONFIG_32) {dest_imc->e911_resource_retain_timer = src_imc->e911_resource_retain_timer;}
+    if (src_imc->rfc5626_flow_recovery != IMS_UNDEF_CONFIG_8) {dest_imc->rfc5626_flow_recovery = src_imc->rfc5626_flow_recovery;}
+    if (src_imc->ims_estab_timer != IMS_UNDEF_CONFIG_8) {dest_imc->ims_estab_timer = src_imc->ims_estab_timer;}
+    if (src_imc->switch_prefer_rat_dereg != IMS_UNDEF_CONFIG_8) {dest_imc->switch_prefer_rat_dereg = src_imc->switch_prefer_rat_dereg;}
+    if (src_imc->empty_pcscf_list_fail_cause != IMS_UNDEF_CONFIG_8) {dest_imc->empty_pcscf_list_fail_cause = src_imc->empty_pcscf_list_fail_cause;}
+    if (src_imc->no_ims_reg_during_active_cs_call != IMS_UNDEF_CONFIG_8) {dest_imc->no_ims_reg_during_active_cs_call = src_imc->no_ims_reg_during_active_cs_call;}
+    if (src_imc->srvcc_no_ims_dereg_until_call_rel != IMS_UNDEF_CONFIG_8) {dest_imc->srvcc_no_ims_dereg_until_call_rel = src_imc->srvcc_no_ims_dereg_until_call_rel;}
+    if (src_imc->bearer_matching_preference != IMS_UNDEF_CONFIG_8) {dest_imc->bearer_matching_preference = src_imc->bearer_matching_preference;}
+    if (src_imc->pdn_retry_pre_backoff_count != IMS_UNDEF_CONFIG_32) {dest_imc->pdn_retry_pre_backoff_count = src_imc->pdn_retry_pre_backoff_count;}
+    if (src_imc->pdn_retry_base_time != IMS_UNDEF_CONFIG_32) {dest_imc->pdn_retry_base_time = src_imc->pdn_retry_base_time;}
+    if (src_imc->pdn_retry_max_time != IMS_UNDEF_CONFIG_32) {dest_imc->pdn_retry_max_time = src_imc->pdn_retry_max_time;}
+    if (src_imc->pdn_retry_backoff_enable != IMS_UNDEF_CONFIG_8) {dest_imc->pdn_retry_backoff_enable = src_imc->pdn_retry_backoff_enable;}
+    if (src_imc->enable_ddd_feature != IMS_UNDEF_CONFIG_8) {dest_imc->enable_ddd_feature = src_imc->enable_ddd_feature;}
+    if (src_imc->rel_hps_threshold != IMS_UNDEF_CONFIG_32) {dest_imc->rel_hps_threshold = src_imc->rel_hps_threshold;}
+    if (src_imc->wait_for_sgn_timer != IMS_UNDEF_CONFIG_32) {dest_imc->wait_for_sgn_timer = src_imc->wait_for_sgn_timer;}
+    if (src_imc->att_family != IMS_UNDEF_CONFIG_8) {dest_imc->att_family = src_imc->att_family;}
+    if (src_imc->impu_change_dereg!= IMS_UNDEF_CONFIG_8) {dest_imc->impu_change_dereg= src_imc->impu_change_dereg;}
+    if (src_imc->rel_emc_pdn_afr_timer_expr!= IMS_UNDEF_CONFIG_8) {dest_imc->rel_emc_pdn_afr_timer_expr= src_imc->rel_emc_pdn_afr_timer_expr;}
+    if (src_imc->ignore_media_qci_check != IMS_UNDEF_CONFIG_32) {dest_imc->ignore_media_qci_check = src_imc->ignore_media_qci_check;}
+    if (src_imc->audio_bearer_lost_retain_timer != IMS_UNDEF_CONFIG_32) {dest_imc->audio_bearer_lost_retain_timer = src_imc->audio_bearer_lost_retain_timer;}
+    if (src_imc->video_bearer_lost_retain_timer != IMS_UNDEF_CONFIG_32) {dest_imc->video_bearer_lost_retain_timer = src_imc->video_bearer_lost_retain_timer;}
+    if (src_imc->text_bearer_lost_retain_timer != IMS_UNDEF_CONFIG_32) {dest_imc->text_bearer_lost_retain_timer = src_imc->text_bearer_lost_retain_timer;}
+    if (src_imc->ims_progress_slow_timer != IMS_UNDEF_CONFIG_32) {dest_imc->ims_progress_slow_timer = src_imc->ims_progress_slow_timer;}
+    if (src_imc->emc_dereg_while_volte_off != IMS_UNDEF_CONFIG_8) {dest_imc->emc_dereg_while_volte_off = src_imc->emc_dereg_while_volte_off;}
+    if (src_imc->detach_reattach_backoff_timer != IMS_UNDEF_CONFIG_32) {dest_imc->detach_reattach_backoff_timer = src_imc->detach_reattach_backoff_timer;}
+    if (src_imc->max_RFC5626_retry_count_403 != IMS_UNDEF_CONFIG_8) {dest_imc->max_RFC5626_retry_count_403 = src_imc->max_RFC5626_retry_count_403;}
+    if (src_imc->all_pcscf_fail_retry_max_num != IMS_UNDEF_CONFIG_8) {dest_imc->all_pcscf_fail_retry_max_num = src_imc->all_pcscf_fail_retry_max_num;}
+    if (src_imc->unlock_ims_permanent_reg_receive_tau != IMS_UNDEF_CONFIG_8) {dest_imc->unlock_ims_permanent_reg_receive_tau = src_imc->unlock_ims_permanent_reg_receive_tau;}
+    if (src_imc->reg_abnormal_reg_fail_report_timer != IMS_UNDEF_CONFIG_32) {dest_imc->reg_abnormal_reg_fail_report_timer = src_imc->reg_abnormal_reg_fail_report_timer;}
+    if (src_imc->reg_abnormal_reg_slow_report_timer != IMS_UNDEF_CONFIG_32) {dest_imc->reg_abnormal_reg_slow_report_timer = src_imc->reg_abnormal_reg_slow_report_timer;}
+    if (src_imc->reg_abnormal_dereg_report_timer != IMS_UNDEF_CONFIG_32) {dest_imc->reg_abnormal_dereg_report_timer = src_imc->reg_abnormal_dereg_report_timer;}
+    if (src_imc->emergency_call_category_mapping != IMS_UNDEF_CONFIG_32) {dest_imc->emergency_call_category_mapping = src_imc->emergency_call_category_mapping;}
+    if (src_imc->block_reg_when_isim_params_no_avail != IMS_UNDEF_CONFIG_8) {dest_imc->block_reg_when_isim_params_no_avail = src_imc->block_reg_when_isim_params_no_avail;}
+    if (src_imc->pcscf_reselect_flag != IMS_UNDEF_CONFIG_8) {dest_imc->pcscf_reselect_flag = src_imc->pcscf_reselect_flag;}
+    if (src_imc->unlock_reg_on_plmn_change != IMS_UNDEF_CONFIG_8) {dest_imc->unlock_reg_on_plmn_change = src_imc->unlock_reg_on_plmn_change;}
+    if (src_imc->oos_hysteresis_interval != IMS_UNDEF_CONFIG_32) {dest_imc->oos_hysteresis_interval = src_imc->oos_hysteresis_interval;}
+    if (src_imc->text_default_fallback_support != IMS_UNDEF_CONFIG_8) {dest_imc->text_default_fallback_support = src_imc->text_default_fallback_support;}
+    if (src_imc->nr_recovery_support != IMS_UNDEF_CONFIG_8) {dest_imc->nr_recovery_support = src_imc->nr_recovery_support;}
+    if (src_imc->nr_recovery_guard_timer != IMS_UNDEF_CONFIG_32) {dest_imc->nr_recovery_guard_timer = src_imc->nr_recovery_guard_timer;}
+    if (src_imc->ecc_use_normal_pcscf != IMS_UNDEF_CONFIG_32) {dest_imc->ecc_use_normal_pcscf = src_imc->ecc_use_normal_pcscf;}
+    if (src_imc->deactivate_video_when_early_media_off != IMS_UNDEF_CONFIG_8) {dest_imc->deactivate_video_when_early_media_off = src_imc->deactivate_video_when_early_media_off;}    
+    if (src_imc->epsfb_timer != IMS_UNDEF_CONFIG_8) {dest_imc->epsfb_timer = src_imc->epsfb_timer;}
+    if (src_imc->nr_normal_pdn_retry_count != IMS_UNDEF_CONFIG_8) {dest_imc->nr_normal_pdn_retry_count = src_imc->nr_normal_pdn_retry_count;}
+    if (src_imc->nr_quick_disable_support != IMS_UNDEF_CONFIG_8) {dest_imc->nr_quick_disable_support = src_imc->nr_quick_disable_support;}
+    if (src_imc->is_ims_retry_status != IMS_UNDEF_CONFIG_8) {dest_imc->is_ims_retry_status = src_imc->is_ims_retry_status;}
+    if (src_imc->is_ims_retry_watchdog_timer != IMS_UNDEF_CONFIG_32) {dest_imc->is_ims_retry_watchdog_timer = src_imc->is_ims_retry_watchdog_timer;}
+    if (src_imc->dereg_when_sim_refresh != IMS_UNDEF_CONFIG_8) {dest_imc->dereg_when_sim_refresh = src_imc->dereg_when_sim_refresh;}
+    if (src_imc->isim_invalidation_rules != IMS_UNDEF_CONFIG_8) {dest_imc->isim_invalidation_rules = src_imc->isim_invalidation_rules;}
+    if(src_imc->allow_call_while_registering != IMS_UNDEF_CONFIG_8) {dest_imc->allow_call_while_registering = src_imc->allow_call_while_registering;}
+    return;
+}
+
+extern imcf_bool is_test_mode_enable;
+nvram_ef_ims_profile_record_struct* imc_nvram_customization(kal_uint16 op_id, sim_interface_enum sim_slot_id, kal_bool with_imsi_info, kal_uint8 imsi_mnc_len, 
+    kal_uint8 *mccmnc, kal_uint32 special_profile) {
+    nvram_ef_ims_profile_record_struct *nvram_ims_profile_ptr = NULL;
+    nvram_ef_ims_profile_record_struct *nvram_tmp_ims_profile_ptr = NULL;
+    kal_uint16 record_idx = sim_slot_id+1;
+    sim_interface_enum ps_id = l4c_gemini_get_switched_sim_id(sim_slot_id);
+    mcf_ota_result_e rv = MCF_OTA_R_MAX;
+
+    // Allocate buffer to read NVRAM setting
+    nvram_ims_profile_ptr = (nvram_ef_ims_profile_record_struct*)get_ctrl_buffer(sizeof(kal_uint8) * NVRAM_EF_IMS_PROFILE_SIZE);
+    nvram_tmp_ims_profile_ptr = (nvram_ef_ims_profile_record_struct*)get_ctrl_buffer(sizeof(kal_uint8) * NVRAM_EF_IMS_PROFILE_SIZE);
+
+    /* Level1 - Runtime Default Value*/
+    //**************************************************************
+    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+    //**************************************************************
+
+    /* Level2 - MCF: NVRAM-OTA */
+    //**************************************************************
+    if (!is_test_mode_enable) {
+        memset((void *)nvram_tmp_ims_profile_ptr, 0xff, sizeof(nvram_ef_ims_profile_record_struct));
+
+        rv = mcf_read_ota_buffer(NVRAM_EF_IMS_PROFILE_LID, record_idx, (kal_uint8 *)nvram_tmp_ims_profile_ptr, sizeof(nvram_ef_ims_profile_record_struct));
+        if (rv == MCF_OTA_R_SUCCESS) {
+            imc_set_diff_configuration(nvram_tmp_ims_profile_ptr, nvram_ims_profile_ptr);
+            dump_ims_profile_structure_difference(ps_id, MCF_OTA_DEFAULT, nvram_tmp_ims_profile_ptr);
+        }
+    }
+
+    /* Level3 - Operator Customization */
+    //**************************************************************
+    switch (op_id) {
+        case 1: /* CMCC */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code             = 0x0001;      //operator_code = 1(CMCC)
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code  = 603;
+            nvram_ims_profile_ptr->ua_config.UA_call_no_resource_code  = 580;
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer    = 6000;  // 6000ms (6 seconds)
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule             = 0x14;           // 10100, relied on but not in call
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery    = 1;
+            nvram_ims_profile_ptr->imc_config.nr_recovery_support      = 1;
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.mncmcc_whitelist,
+                    "21220034602023460207346022734602303460231346023334602013001300130013000300020834602993460",    //<num><mnc_len><MNC><mcc_len><MCC>
+                    sizeof (nvram_ims_profile_ptr->imc_config.mncmcc_whitelist)
+                    );
+            nvram_ims_profile_ptr->imc_config.unlock_ims_permanent_reg_receive_tau = 0x06;
+            nvram_ims_profile_ptr->imc_config.emergency_reg_retain_timer           = 10000; // 10s
+            nvram_ims_profile_ptr->imc_config.deactivate_video_when_early_media_off = 1;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg       = 1;
+            nvram_ims_profile_ptr->imc_config.dereg_when_sim_refresh        = 1;
+            
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.custom_em_ims_event_info       = 1;
+            
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.add_3gpp_ims_in_Accept         = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.when_stop_tcall                = 100;
+            nvram_ims_profile_ptr->ua_config.check_contact_380              = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context= 0;
+            nvram_ims_profile_ptr->ua_config.reject_mtcall_when_vilte       = 1;
+            nvram_ims_profile_ptr->ua_config.not_add_SDP_in_OPTIONS         = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                 = 96;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 120;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 6;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec          = 0;
+            nvram_ims_profile_ptr->ua_config.add_audio_video_in_delay_media = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf=1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall       = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer           = 0x0F;
+            nvram_ims_profile_ptr->ua_config.bypass_conf_qos_check_in_delay_media = 1;
+            nvram_ims_profile_ptr->ua_config.auto_unhold_when_rcv_recvonly  = 1;
+            nvram_ims_profile_ptr->ua_config.err_handling_for_video_via_update = 0;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout  = 30;
+            nvram_ims_profile_ptr->ua_config.disable_ul_rtp_in_early_state  = 1;
+            nvram_ims_profile_ptr->ua_config.support_early_upgrade          = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+            nvram_ims_profile_ptr->ua_config.support_video_early_media      = 1;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature         = 1;
+            nvram_ims_profile_ptr->ua_config.upgrade_with_Tupo              = 1;
+            nvram_ims_profile_ptr->ua_config.need_revise_rtp_dir            = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                         = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                    = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                    = 6;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable           = 0x000F;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                     = 0xff;
+            nvram_ims_profile_ptr->ua_config.delay_unhold_call              = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.call_barring_in_warning_header = 1;
+            nvram_ims_profile_ptr->ua_config.support_ringing_downgrade      = 1;
+            nvram_ims_profile_ptr->ua_config.add_qos_when_offer_present     = 1;
+            nvram_ims_profile_ptr->ua_config.call_normal_clear_timer_timeout= 1;
+            nvram_ims_profile_ptr->ua_config.no_state_transition_when_183_withoutsdp = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align               = 0;
+            nvram_ims_profile_ptr->ua_config.conference_desub_time          = 2;
+            nvram_ims_profile_ptr->ua_config.follow_mt_pt_list              = 1;
+            nvram_ims_profile_ptr->ua_config.start_ringback_t_only_by_180   = 1;
+            nvram_ims_profile_ptr->ua_config.conf_refer_order_by_call_id    = 1;
+            nvram_ims_profile_ptr->ua_config.regard_180_without_pem_as_inactive = 1;
+            nvram_ims_profile_ptr->ua_config.always_fetch_1st_entry_in_hisInfo  = 1;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.UA_reg_keep_alive              = 3;
+            nvram_ims_profile_ptr->ua_config.disconnect_tcp_when_abnormal   = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_req_timer_timeout  = 0;
+            nvram_ims_profile_ptr->ua_config.precondition_in_support_header = 3;
+            nvram_ims_profile_ptr->ua_config.add_prcd_in_video_action_sdp   = 1;
+            nvram_ims_profile_ptr->ua_config.ignore_mismatch_refer_notify   = 1;
+            nvram_ims_profile_ptr->ua_config.no_session_modify_retry_for_491 = 1;
+            nvram_ims_profile_ptr->ua_config.always_report_remote_video_cap_support = 1;
+            nvram_ims_profile_ptr->ua_config.mo_update_retry_upper_limit    = 1;
+            nvram_ims_profile_ptr->ua_config.refer_delay_timer              = 30;
+            nvram_ims_profile_ptr->ua_config.wait_audio_rtp_for_crs_timer_timeout = 3;
+            nvram_ims_profile_ptr->ua_config.stop_crs_if_no_video_or_audio  = 1;
+            nvram_ims_profile_ptr->ua_config.max_hold_unhold_retry_cnt      = 2;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.support_invalid_audio_pt       = 1;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_resp      = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_username          = 0;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                   = 0;
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec              = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_reset_tcp_client         = 1;
+            nvram_ims_profile_ptr->ua_config.treg                           = 64;
+            nvram_ims_profile_ptr->ua_config.rereg_23g4                     = 1;
+            nvram_ims_profile_ptr->ua_config.resub_23g4                     = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403               = 1;
+            nvram_ims_profile_ptr->ua_config.keep_alive_mode                = 2;
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype        = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport         = 0;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403    = 0;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_invite    = 4;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inReg        = 1;
+            nvram_ims_profile_ptr->ua_config.access_network_info_type       = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo              = 0x33;
+            nvram_ims_profile_ptr->ua_config.register_cap_whenever          = 1;
+            nvram_ims_profile_ptr->ua_config.query_other_sim_call_state     = 1;
+            nvram_ims_profile_ptr->ua_config.open_pcscf_retry_count_limit   = 1;
+            nvram_ims_profile_ptr->ua_config.scb_ntf_cs_protection          = 1;
+            nvram_ims_profile_ptr->ua_config.reg_reset_normal_tcp           = 1;
+            nvram_ims_profile_ptr->ua_config.stop_err_resp_retx_when_not_needed = 1;
+            nvram_ims_profile_ptr->ua_config.sip_bye_retransmit_total_time  = 32000;
+            nvram_ims_profile_ptr->ua_config.link_mtu_size                  = 1280;
+            
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.mo_retry_after_504             = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_sms_disconnect_stack     = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.nr_quick_disable_support      = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //CMCC: "N,33,16,0;N,*,0,1;E,*,0,1;"
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp        = 1;
+            nvram_ims_profile_ptr->imc_config.wait_for_sgn_timer            = 0xFFFFFFFE;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable      = 1;
+            break;
+        }
+        case 2: /* CU */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code             = 0x0002;      //operator_code = 2(CU)
+            nvram_ims_profile_ptr->ua_config.UA_call_no_resource_code  = 580;
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer    = 6000;  // 6000ms (6 seconds)
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule             = 0x14;           // 10100, relied on but not in call
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery    = 1;
+            nvram_ims_profile_ptr->imc_config.nr_recovery_support      = 1;
+            nvram_ims_profile_ptr->imc_config.unlock_ims_permanent_reg_receive_tau = 0x02;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.emergency_reg_retain_timer           = 10000; // 10s
+            nvram_ims_profile_ptr->imc_config.deactivate_video_when_early_media_off = 1;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg       = 1;
+            nvram_ims_profile_ptr->imc_config.dereg_when_sim_refresh        = 1;
+            
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.add_3gpp_ims_in_Accept         = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.when_stop_tcall                = 100;
+            nvram_ims_profile_ptr->ua_config.check_contact_380              = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context= 0;
+            nvram_ims_profile_ptr->ua_config.reject_mtcall_when_vilte       = 1;
+            nvram_ims_profile_ptr->ua_config.not_add_SDP_in_OPTIONS         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall       = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+            nvram_ims_profile_ptr->ua_config.need_revise_rtp_dir            = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout  = 30;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 6;
+            nvram_ims_profile_ptr->ua_config.br_end                         = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                    = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                    = 6;
+            nvram_ims_profile_ptr->ua_config.delay_unhold_call              = 1;
+            nvram_ims_profile_ptr->ua_config.support_ringing_downgrade      = 1;
+            nvram_ims_profile_ptr->ua_config.add_qos_when_offer_present     = 1;
+            nvram_ims_profile_ptr->ua_config.call_normal_clear_timer_timeout= 1;
+            nvram_ims_profile_ptr->ua_config.no_state_transition_when_183_withoutsdp = 1;
+            nvram_ims_profile_ptr->ua_config.call_barring_in_warning_header = 1;
+            nvram_ims_profile_ptr->ua_config.err_handling_for_video_via_update = 0;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec          = 0;
+            nvram_ims_profile_ptr->ua_config.auto_unhold_when_rcv_recvonly  = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 120;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf  = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                 = 96;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align               = 0;
+            nvram_ims_profile_ptr->ua_config.conference_desub_time          = 2;
+            nvram_ims_profile_ptr->ua_config.use_amr_bit_rate_downgrade     = 1;
+            nvram_ims_profile_ptr->ua_config.re_calc_rr_rs_in_offer_answer  = 1;
+            nvram_ims_profile_ptr->ua_config.follow_mt_pt_list              = 1;
+            nvram_ims_profile_ptr->ua_config.start_ringback_t_only_by_180   = 1;
+            nvram_ims_profile_ptr->ua_config.conf_refer_order_by_call_id    = 1;
+            nvram_ims_profile_ptr->ua_config.regard_180_without_pem_as_inactive = 1;
+            nvram_ims_profile_ptr->ua_config.always_fetch_1st_entry_in_hisInfo  = 1;
+            nvram_ims_profile_ptr->ua_config.rm_prcd_when_video_prcd_off    = 1;
+            nvram_ims_profile_ptr->ua_config.disconnect_tcp_when_abnormal   = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_req_timer_timeout  = 0;
+            nvram_ims_profile_ptr->ua_config.support_video_early_media      = 1;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.UA_reg_keep_alive              = 3;
+            nvram_ims_profile_ptr->ua_config.precondition_in_support_header = 3;
+            nvram_ims_profile_ptr->ua_config.add_prcd_in_video_action_sdp   = 1;
+            nvram_ims_profile_ptr->ua_config.disable_ul_rtp_in_early_state  = 1;
+            nvram_ims_profile_ptr->ua_config.ignore_mismatch_refer_notify   = 1;
+            nvram_ims_profile_ptr->ua_config.no_session_modify_retry_for_491 = 1;
+            nvram_ims_profile_ptr->ua_config.always_report_remote_video_cap_support = 1;
+            nvram_ims_profile_ptr->ua_config.mo_update_retry_upper_limit    = 1;
+            nvram_ims_profile_ptr->ua_config.refer_delay_timer              = 30;
+            nvram_ims_profile_ptr->ua_config.wait_audio_rtp_for_crs_timer_timeout = 3;
+            nvram_ims_profile_ptr->ua_config.max_hold_unhold_retry_cnt      = 2;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.support_invalid_audio_pt       = 1;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_resp      = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_username          = 0;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                   = 0;
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec              = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_reset_tcp_client         = 1;
+            nvram_ims_profile_ptr->ua_config.treg                           = 0;
+            nvram_ims_profile_ptr->ua_config.rereg_23g4                     = 1;
+            nvram_ims_profile_ptr->ua_config.resub_23g4                     = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403               = 1;
+            nvram_ims_profile_ptr->ua_config.keep_alive_mode                = 2;
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype        = 1;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403    = 0;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inReg        = 1;
+            nvram_ims_profile_ptr->ua_config.register_cap_whenever          = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport         = 0;
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_invite    = 4;
+            nvram_ims_profile_ptr->ua_config.query_other_sim_call_state     = 1;
+            nvram_ims_profile_ptr->ua_config.scb_ntf_cs_protection          = 1;
+            nvram_ims_profile_ptr->ua_config.reg_reset_normal_tcp           = 1;
+            nvram_ims_profile_ptr->ua_config.stop_err_resp_retx_when_not_needed = 1;
+            nvram_ims_profile_ptr->ua_config.link_mtu_size                  = 1280;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.mo_retry_after_504             = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_sms_disconnect_stack     = 0;
+            nvram_ims_profile_ptr->ua_config.sip_bye_retransmit_total_time  = 32000;
+
+            /*IMCB*/
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp        = 1;
+            nvram_ims_profile_ptr->imc_config.wait_for_sgn_timer            = 0xFFFFFFFE;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable      = 1;
+            nvram_ims_profile_ptr->ua_config.open_pcscf_retry_count_limit   = 1;
+            nvram_ims_profile_ptr->imc_config.nr_quick_disable_support      = 1;
+            break;
+        }
+        case 3: /* Orange */
+        {
+            /* Orange global configurations */
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0003; //operator_code = 3(Orange)
+
+            nvram_ims_profile_ptr->imc_config.sms_support                       = 0;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg           = 1;      //IMS deregistartion when forced RAT selection is done
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;      // not to initiate VoWiFi registration during an active CS call
+                                                                                          // WIFI_MOB_15 and MOB_VS_WP_10
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.disable_amr_params_in_wfc_call     = 0x7;    // disable amr-mode-change-period and amr-mode-change-neighbor parameters
+                                                                                          // and force to use default maxptime value from NVRAM in SDP in WFC
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant            = 0x1111; // Orange global requirement: MED_RTPSDP_25
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.esipcpi_full_reason                = 1;      // Orange global requirement: IMS_CALL_26, IMS_CALL_28
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_invite        = 3;      // Orange global requirement: IMS_CALL_60
+            nvram_ims_profile_ptr->ua_config.cs_availability_query              = 1;      // Orange global requirement: IMS_CALL_65, IMS_CALL_75
+            nvram_ims_profile_ptr->ua_config.when_stop_tcall                    = 100;
+            nvram_ims_profile_ptr->ua_config.set_zero_cell_id_in_wifi           = 1;      // Orange global requirement: IMS_CALL_91
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype            = 1;
+            nvram_ims_profile_ptr->ua_config.reg_add_content_disposition        = 1;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                       = 0;      // Orange global requirement: MOB_VS_03 and MOB_VS_04
+            nvram_ims_profile_ptr->ua_config.est_client_tcp_when_send_response  = 0;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x00;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);            //Orange: "N,33,18,0;N,27,18,0;N,*,0,1;E,*,0,1;"
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,18,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* France */
+                if (strncmp((char *)&mccmnc[0], "208", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.location_info_support         = 1;      //lbs location info service: on
+                    nvram_ims_profile_ptr->imc_config.sms_support                   = 1;
+                    nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g        = 2;      //IMS reg maintained at 23G (MOB_VS_08 & MOB_VS_09)
+
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery         = 1;
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.sendrecv_before_prcd           = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+                    nvram_ims_profile_ptr->ua_config.wfc_emerg_pidf_country         = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+                    nvram_ims_profile_ptr->ua_config.add_3gpp_ims_in_Accept         = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 180;
+                    nvram_ims_profile_ptr->ua_config.sip_dscp                       = 0x00;
+                    nvram_ims_profile_ptr->ua_config.audio_dscp                     = 0x00;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 20;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                    nvram_ims_profile_ptr->ua_config.when_stop_tcall                = 100;
+
+#ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.evs_fmtp_variant_pt                = 125;
+                    nvram_ims_profile_ptr->ua_config.evs_configuration_profile          = 4;      // EVS Configuration B2: br=9.6-24.4; bw=swb
+                    nvram_ims_profile_ptr->ua_config.evs_configuration_profile_2        = 1;      // EVS Configuration A2: br=5.9-24.4; bw=nb-swb
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv_2                       = 0;
+#endif /* __EVS_SUPPORT__ */
+               
+                    memset(&nvram_ims_profile_ptr->ua_config.required_loc_info_num_set[0],0,128);
+                    strncpy((char *)nvram_ims_profile_ptr->ua_config.required_loc_info_num_set,
+                            "112,15,17,18,115,119,191,196,197,116000,116117",
+                            sizeof (nvram_ims_profile_ptr->ua_config.required_loc_info_num_set)-1
+                            );
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.contact_with_transport         = 0;
+                    nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail            = 0;
+                    nvram_ims_profile_ptr->ua_config.wfc_refresh_23g                = 1;
+                    nvram_ims_profile_ptr->ua_config.pidf_country                   = 1;
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani       = 1;
+                    nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+                    nvram_ims_profile_ptr->ua_config.reg_disable_pidf               = 0x0F;   // Disable all
+                    nvram_ims_profile_ptr->ua_config.emergency_use_imsi             = 1;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+                    nvram_ims_profile_ptr->ua_config.dynamic_pdn_mtu                = 1;
+                    nvram_ims_profile_ptr->ua_config.register_cap_whenever          = 1;
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase       = 1;
+
+                    /* SMS */
+                    nvram_ims_profile_ptr->ua_config.sms_network_types              = 0x03;   //(LTE+WIFI)
+
+                    /* IMCB */
+                }
+                /* Spain */
+                else if (strncmp((char *)&mccmnc[0], "214", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;        //v4_prefer
+                    nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+                    nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 4000;     //resource_retain_timer = 4000ms (4 seconds)
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 60;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 60;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.disable_conf_call_prcd             = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.sendrecv_before_conf_call_prcd     = 1;
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+                    nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+                    nvram_ims_profile_ptr->ua_config.sip_dscp                           = 0x00;
+                    nvram_ims_profile_ptr->ua_config.audio_dscp                         = 0x00;
+                    nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 1;
+                    nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x0f;     // Disable PIDF from all calls
+#ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.evs_fmtp_variant_pt                = 125;
+                    nvram_ims_profile_ptr->ua_config.evs_configuration_profile          = 4;      // EVS Configuration B2: br=9.6-24.4; bw=swb
+                    nvram_ims_profile_ptr->ua_config.evs_configuration_profile_2        = 1;      // EVS Configuration A2: br=5.9-24.4; bw=nb-swb
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv_2                       = 0;
+#endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase           = 1;
+
+                    /* IMCB */
+                }
+                /* Romania */
+                else if (strncmp((char *)&mccmnc[0], "226", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                     = 118;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_oct_pt                 = 96;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt                  = 116;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_oct_pt              = 107;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt              = 111;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F; // enable SRVCC, aSRVCC, bSRVCC and mid-sRVCC
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.sip_dscp                           = 0x30;
+                    nvram_ims_profile_ptr->ua_config.audio_dscp                         = 0x30;
+                    nvram_ims_profile_ptr->ua_config.use_org_sdp_for_invite_without_sdp = 1;
+#ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.evs_fmtp_variant_pt                = 125;
+                    nvram_ims_profile_ptr->ua_config.evs_configuration_profile          = 4;      // EVS Configuration B2: br=9.6-24.4; bw=swb
+                    nvram_ims_profile_ptr->ua_config.evs_configuration_profile_2        = 1;      // EVS Configuration A2: br=5.9-24.4; bw=nb-swb
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv_2                       = 0;
+#endif /* __EVS_SUPPORT__ */
+                    nvram_ims_profile_ptr->ua_config.use_local_conf_participant_list_in_srvcc = 1;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase           = 1;
+
+                    /* IMCB */
+                }
+                /* Poland */
+                else if (strncmp((char *)&mccmnc[0], "260", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 2;      //IMS reg maintained at 23G (MOB_VS_08 & MOB_VS_09)
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+                    nvram_ims_profile_ptr->ua_config.sip_dscp                           = 0x30;
+                    nvram_ims_profile_ptr->ua_config.audio_dscp                         = 0x30;
+                    nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+                    nvram_ims_profile_ptr->ua_config.ignore_380_emg_xml                 = 1;
+#ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.evs_fmtp_variant_pt                = 125;
+                    nvram_ims_profile_ptr->ua_config.evs_configuration_profile          = 4;      // EVS Configuration B2: br=9.6-24.4; bw=swb
+                    nvram_ims_profile_ptr->ua_config.evs_configuration_profile_2        = 1;      // EVS Configuration A2: br=5.9-24.4; bw=nb-swb
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv_2                       = 0;
+#endif /* __EVS_SUPPORT__ */
+                    nvram_ims_profile_ptr->ua_config.block_refer_sending_if_max_num_of_participants = 1;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                    nvram_ims_profile_ptr->ua_config.register_cap_whenever              = 1;
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase           = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                  = 0x33;     // disable 3des encryption
+
+                    /* SMS */
+                    nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x03;   //(LTE+WIFI)
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.dedicated_fallback_support        = 1;
+                }
+                /* Egypt */
+                else if (strncmp((char *)&mccmnc[0], "602", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;//support
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_On_Demand    = 0;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;/*3600s*/
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;//disable
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 60;//60S
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 60;//60S
+                    /* need confirm,network will send BYE to host after to host after invatation complete*/
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.sendrecv_before_prcd               = 1;
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.sip_dscp                           = 0x30;
+                    nvram_ims_profile_ptr->ua_config.audio_dscp                         = 0x30;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500; 
+                }
+                /* Morocco */
+                else if (strncmp((char *)&mccmnc[0], "604", 3) == 0) {
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMC */
+                    
+                    /* CALL */
+                    nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none            = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+                    
+                    /* SMS */
+                    nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x00;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;
+                }
+                /* Slovakia */
+                else if (strncmp((char *)&mccmnc[0], "231", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    nvram_ims_profile_ptr->imc_config.sms_support                       = 1;
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 95;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F; // enable SRVCC, aSRVCC, bSRVCC and mid-sRVCC
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_req           = 1;
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_resp          = 1;
+                    nvram_ims_profile_ptr->ua_config.sip_dscp                           = 0x30;
+                    nvram_ims_profile_ptr->ua_config.audio_dscp                         = 0x30;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.enable_in_band_tone_in_hold        = 0;
+                    nvram_ims_profile_ptr->ua_config.ignore_380_emg_xml                 = 1;
+#ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.evs_fmtp_variant_pt                = 125;
+                    nvram_ims_profile_ptr->ua_config.evs_configuration_profile          = 4;      // EVS Configuration B2: br=9.6-24.4; bw=swb
+                    nvram_ims_profile_ptr->ua_config.evs_configuration_profile_2        = 1;      // EVS Configuration A2: br=5.9-24.4; bw=nb-swb
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv_2                       = 0;
+#endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1300;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 2000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 16000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 17000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                     = 128000;
+                    nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                = 0;
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase           = 1;
+                    
+                    /* SMS */
+                    nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x03;   //(LTE+WIFI)
+
+                    /* IMCB */
+                }
+                /* Belgium */
+                else if (strncmp((char *)&mccmnc[0], "206", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;      // v4_prefer
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x12;   //10010, not to register on IMS, de-register if IMS registration exist
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x0007; // enable SRVCC, aSRVCC and mid-SRVCC
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+                    nvram_ims_profile_ptr->ua_config.sip_dscp                           = 0x30;
+                    nvram_ims_profile_ptr->ua_config.audio_dscp                         = 0x30;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_without_target_hold            = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.ignore_380_emg_xml                 = 1;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                    nvram_ims_profile_ptr->ua_config.pidf_country                       = 1;
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase           = 1;
+
+                    /* IMCB */
+                }
+                else if (strncmp((char *)&mccmnc[0], "416", 3) == 0) {  /*Orange/Jordan*/
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2; 
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.evs_configuration_profile          = 4;      
+                    nvram_ims_profile_ptr->ua_config.evs_configuration_profile_2        = 1;      
+                #endif
+                }
+                /*Tunisia*/
+                else if (strncmp((char *)&mccmnc[0], "605", 3) == 0) {
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;
+                    /* Call */ 
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP    = 1;
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+                }
+                /* Moldova */
+                else if (strncmp((char *)&mccmnc[0], "259", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.sip_dscp                           = 0x30;
+                    nvram_ims_profile_ptr->ua_config.audio_dscp                         = 0x30;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_without_target_hold            = 1;
+                    nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+                    nvram_ims_profile_ptr->ua_config.ignore_380_emg_xml                 = 1;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F; // enable SRVCC, aSRVCC, bSRVCC and mid-sRVCC
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase           = 1;
+
+                    /* SMS */
+
+                    /* IMCB */
+                }
+                /* Luxembourg */
+                else if (strncmp((char *)&mccmnc[0], "270", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+                    nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;      // v4_prefer
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x12;   //10010, not to register on IMS, de-register if IMS registration exist
+
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x0003; // enable SRVCC, aSRVCC
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+                    nvram_ims_profile_ptr->ua_config.sip_dscp                           = 0x30;
+                    nvram_ims_profile_ptr->ua_config.audio_dscp                         = 0x30;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_without_target_hold            = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.ignore_380_emg_xml                 = 1;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                    nvram_ims_profile_ptr->ua_config.pidf_country                       = 1;
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase           = 1;
+
+                    /* IMCB */
+                }
+                else if (strncmp((char *)&mccmnc[0], "340", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    #ifdef __EVS_SUPPORT__
+                        nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+                        nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+                        nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+                        nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+                        nvram_ims_profile_ptr->ua_config.evs_configuration_profile      = 4;      // EVS Configuration B2: br=9.6-24.4; bw=swb
+                        nvram_ims_profile_ptr->ua_config.evs_configuration_profile_2    = 1;      // EVS Configuration A2: br=5.9-24.4; bw=nb-swb
+                    #endif /* __EVS_SUPPORT__ */
+                }
+                else if (strncmp((char *)&mccmnc[0], "647", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    #ifdef __EVS_SUPPORT__
+                        nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+                        nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+                        nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+                        nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+                        nvram_ims_profile_ptr->ua_config.evs_configuration_profile      = 4;      // EVS Configuration B2: br=9.6-24.4; bw=swb
+                        nvram_ims_profile_ptr->ua_config.evs_configuration_profile_2    = 1;      // EVS Configuration A2: br=5.9-24.4; bw=nb-swb
+                    #endif /* __EVS_SUPPORT__ */
+                    /* SMS */
+                    nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x03;   //(LTE+WIFI)
+                }
+                /* Orange/Senegal */
+                else if (strncmp((char *)&mccmnc[0], "608", 3) == 0) {
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1100;
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set[0],0,16);
+                    strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set,
+                    "0,2,4,7", sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set)-1);
+                    #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.evs_configuration_profile          = 4;      // EVS Configuration B2: br=9.6-24.4; bw=swb
+                    nvram_ims_profile_ptr->ua_config.evs_configuration_profile_2        = 1;      // EVS Configuration A2: br=5.9-24.4; bw=nb-swb
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv_2                       = 0;
+                    #endif
+                }
+            }
+            break;
+        }
+        case 5: /* DTAG */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0005; // operator_code = 5(DTAG/TMOEU)
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 2;      // IMS reg maintained at 23G but initial reg not initiated
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1300;   // TMOEU TISD 2018.1-3
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;      // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;      // lbs location info service: on
+            nvram_ims_profile_ptr->imc_config.unlock_reg_on_plmn_change         = 1;
+            nvram_ims_profile_ptr->imc_config.empty_pcscf_list_fail_cause       = 18;     // IMS_PDN_Fatal_Fail
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.follow_nw_ims_vops_support         = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 130;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 130;
+            nvram_ims_profile_ptr->ua_config.oos_end_reset_tcp_client           = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.decouple_conf_srvcc_mid_call_cap   = 1;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x0A;   // PIDF_WFC_EMERG_ENABLE and PIDF_VOLTE_EMERG_ENABLE
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req           = 1;      // TMOEU TISD 2018.1-3
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_resp          = 1;      // TMOEU TISD 2018.1-3
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F; // enable SRVCC, aSRVCC, midSRVCC, bSRVCC
+            nvram_ims_profile_ptr->ua_config.add_199_feature_tag                = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 5;      // MTR-32456
+            nvram_ims_profile_ptr->ua_config.when_stop_tcall                    = 100;    // MTR-32456. Notice: if timer needed between 100 and 18x please consider to set mo_invite_to_bw_cnf_timer_timeout for example 20s
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0;
+#endif /* __EVS_SUPPORT__ */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.rereg_in_oos_end                   = 1;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                       = 0;
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;     // TMOEU TISD 2018.1-3
+            nvram_ims_profile_ptr->ua_config.emerg_reg_timer                    = 5;     // MTR-32225
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 2;     // MTR-33764 & MTR-35202
+            nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase           = 1;
+            nvram_ims_profile_ptr->ua_config.pcscf_usage_for_last_pcscf         = 1;
+            nvram_ims_profile_ptr->ua_config.try_same_pcscf_if_retry_after      = 1;     // MTR-31986
+
+            /* SMS */
+            nvram_ims_profile_ptr->imc_config.sms_support                       = 1;
+            nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x03;  //(LTE+WIFI)
+            nvram_ims_profile_ptr->ua_config.sms_follow_nw_ims_vops_support     = 1;
+            nvram_ims_profile_ptr->ua_config.sms_support_in_23g                 = 0;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //DTAG: "N,33,16,0;N,30,16,0;N,*,0,1;E,*,0,1;"
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,30,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Germany */
+                if (strncmp((char *)&mccmnc[0], "262", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.ussd_support                  = 1;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype        = 1;
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani       = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;
+                    nvram_ims_profile_ptr->ua_config.set_homeuri_from_pau           = 1;
+                    nvram_ims_profile_ptr->ua_config.wfc_emerg_pidf_country         = 1;
+                    nvram_ims_profile_ptr->ua_config.ecall_get_puid_from_normal_ims_reg = 1;  // copy UID from normal IMS registration
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                    nvram_ims_profile_ptr->ua_config.call_callend_timer_timeout     = 2;        // 2 seconds
+                    nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                = 0x08;  // Add CNI to emergency call dialog only
+                    nvram_ims_profile_ptr->ua_config.wait_second_invite_for_hold    = 1;
+                    nvram_ims_profile_ptr->ua_config.reg_disable_pidf               = 0x0E;   // Enable WFC emergency reg only
+                    nvram_ims_profile_ptr->ua_config.ect_enable                     = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai           = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri       = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo              = 0x33;     // NULL + AES
+                }
+                /* Czech */
+                else if (strncmp((char *)&mccmnc[0], "230", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.ussd_support                  = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                    nvram_ims_profile_ptr->ua_config.set_homeuri_from_pau           = 1;
+                    nvram_ims_profile_ptr->ua_config.ecall_get_puid_from_normal_ims_reg = 1;  // copy UID from normal IMS registration
+                    nvram_ims_profile_ptr->ua_config.ignore_380_emg_xml             = 1;
+                }
+                /* Poland */
+                else if (strncmp((char *)&mccmnc[0], "260", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.ussd_support                  = 1;
+                    nvram_ims_profile_ptr->imc_config.emergency_call_category_mapping = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer          = 1800;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se         = 90;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                 = 118;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt              = 116;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt             = 98;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt          = 97;
+                    nvram_ims_profile_ptr->ua_config.UA_call_evs_pt                 = 126;
+                    nvram_ims_profile_ptr->ua_config.set_homeuri_from_pau           = 1;
+                    nvram_ims_profile_ptr->ua_config.remove_aconf_when_reinvite_without_sdp = 1; // remove a=conf attribute
+                    nvram_ims_profile_ptr->ua_config.ecall_get_puid_from_normal_ims_reg = 1;  // copy UID from normal IMS registration
+                    nvram_ims_profile_ptr->ua_config.ignore_380_emg_xml             = 1;
+                    nvram_ims_profile_ptr->ua_config.reg_disable_pidf               = 0x0E;   // Enable WFC emergency reg
+                    nvram_ims_profile_ptr->ua_config.reuse_transport_methods        = 0x00000250;
+                    nvram_ims_profile_ptr->ua_config.prefer_original_codec          = 0;
+                    nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall       = 1;
+                    memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set[0],0,16);
+                    strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set,  
+                        "0,1,2", sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set)-1);
+                }
+                /* Greece (Cosmote) */
+                else if (strncmp((char *)&mccmnc[0], "202", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.register_expiry                = 3600;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer          = 1800;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se         = 90;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                = 500;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                = 4000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                = 5000;
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                 = 118;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt              = 116;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt             = 110;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt          = 111;
+                    nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp = 0;
+                    nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall       = 1;
+                    nvram_ims_profile_ptr->ua_config.call_id_with_host_inReg        = 1;
+                    nvram_ims_profile_ptr->ua_config.set_homeuri_from_pau           = 1;
+                    nvram_ims_profile_ptr->ua_config.ecall_get_puid_from_normal_ims_reg = 1;  // copy UID from normal IMS registration
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+                    nvram_ims_profile_ptr->ua_config.prefer_original_codec          = 0;
+                    nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 1;
+
+                    /* IMCB */
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //Cosmote "N,33,16,0;N,30,16,0;N,*,0,1;E,*,0,1;"
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,16,0;N,30,16,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                }
+                /* Netherlands */
+                else if (strncmp((char *)&mccmnc[0], "204", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.oir_privacy_to_header              = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 600000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 3000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 16000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 17000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                     = 192000;
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+
+                    /* IMCB */
+
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,18,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x03;
+                }
+                /* Hungary */
+                else if (strncmp((char *)&mccmnc[0], "216", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                     = 118;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt                  = 116;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt                 = 110;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt              = 111;
+                    nvram_ims_profile_ptr->ua_config.set_homeuri_from_pau               = 1;
+                    nvram_ims_profile_ptr->ua_config.ecall_get_puid_from_normal_ims_reg = 1;  // copy UID from normal IMS registration
+                    nvram_ims_profile_ptr->ua_config.enable_in_band_tone_in_hold        = 0;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                }
+                /* Croatia */
+                else if (strncmp((char *)&mccmnc[0], "219", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 15;
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_resp          = 0;
+                }
+                /* Slovakia */
+                else if (strncmp((char *)&mccmnc[0], "231", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+                }
+                /* Austria */
+                else if (strncmp((char *)&mccmnc[0], "232", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant            = 0x1111;
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.dedicated_fallback_support        = 1;
+                }
+                /* Macedonia */
+                else if (strncmp((char *)&mccmnc[0], "294", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.sms_support                       = 0;
+                    nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x00;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 15;
+                }
+                /* Albania */
+                else if (strncmp((char *)&mccmnc[0], "276", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 0;
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;      // v4_prefer
+                    nvram_ims_profile_ptr->imc_config.sms_support                       = 0;
+                    nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x00;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F; // enable SRVCC, aSRVCC, midSRVCC, bSRVCC
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 15;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 1800;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                }
+                /* Romania */
+                else if (strncmp((char *)&mccmnc[0], "226", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 0;
+                    nvram_ims_profile_ptr->imc_config.sms_support                       = 0;
+                    nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x00;
+                }
+            }
+            break;
+        }
+        case 6: /* Vodafone */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                     = 0x0006;      //operator_code = 6(VDF)
+
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call = 1;           // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery            = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                 = 1;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp    = 0;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall               = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                         = 0;
+            nvram_ims_profile_ptr->ua_config.no_auto_retry_for_mo_call              = 1;
+            nvram_ims_profile_ptr->ua_config.reject_no_answer_resp_code             = 480;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timeout_code              = 480;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call         = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1             = 0;
+            nvram_ims_profile_ptr->ua_config.ect_enable                             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani               = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                       = 1;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                           = 0;
+            nvram_ims_profile_ptr->ua_config.rereg_in_oos_end                       = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inReg                = 1;
+            nvram_ims_profile_ptr->ua_config.oos_end_reset_tcp_client               = 1;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port                 = 0;
+            nvram_ims_profile_ptr->ua_config.check_reg_contact                      = 0;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host               = 1;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //VDF: "N,33,16,0;N,27,18,0;N,26,18,0;N,*,0,1;E,*,0,1;"
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,18,0;N,26,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* VDF Greece */
+                if (strncmp((char *)&mccmnc[0], "202", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0006;     //operator_code = 6(Vodafone)
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 240;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 240;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_resp          = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_without_target_hold            = 1;
+                    nvram_ims_profile_ptr->ua_config.oir_privacy_to_header              = 1;
+                    nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.evs_configuration_profile          = 1;
+                    nvram_ims_profile_ptr->ua_config.evs_configuration_profile_2        = 1;
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.evs_fmtp_variant_pt                = 125;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv_2                       = 0;
+                #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1390;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase           = 1;
+
+                    /* IMCB */
+
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;   
+                }  
+                /* VDF Netherlands */
+                else if (strncmp((char *)&mccmnc[0], "204", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                  = 0x14;           // 10100, relied on but not in call
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+                    nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn         = 1;              // Allow WiFi emergency PDN creation
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1200;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 180;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                = 1000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                = 4000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                = 5000;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                 = 100;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt              = 105;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt             = 97;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt          = 98;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+                    nvram_ims_profile_ptr->ua_config.join_send_bye                  = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer           = 0; // disabled for hold, conference and alerting call types
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 20;
+                    nvram_ims_profile_ptr->ua_config.sip_dscp                       = 0x30;
+                    nvram_ims_profile_ptr->ua_config.audio_dscp                     = 0x30;
+                    nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail            = 0;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+                    nvram_ims_profile_ptr->ua_config.br_begin                       = 3;
+                    nvram_ims_profile_ptr->ua_config.br_send_begin                  = 3;
+                    nvram_ims_profile_ptr->ua_config.br_recv_begin                  = 3;
+                    nvram_ims_profile_ptr->ua_config.br_end                         = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                    = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                    = 6;
+                #endif /* __EVS_SUPPORT__ */
+                    nvram_ims_profile_ptr->ua_config.ect_enable                     = 0;
+                    nvram_ims_profile_ptr->ua_config.no_auto_retry_for_mo_call      = 0;
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase       = 1;
+                }
+                /* VDF Spain */
+                else if (strncmp((char *)&mccmnc[0], "214", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery         = 1;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 20;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 120;
+                    nvram_ims_profile_ptr->ua_config.join_send_bye                  = 0;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer          = 900;
+                    nvram_ims_profile_ptr->ua_config.short_code_support             = 1;
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_req       = 1;
+                    nvram_ims_profile_ptr->ua_config.send_refer_to_conf_uri         = 1;
+                    nvram_ims_profile_ptr->ua_config.delay_unhold_call              = 1;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 1;
+                    nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable = 1;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                = 3600;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                = 500;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                = 4000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                = 5000;
+#ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                         = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                    = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                    = 6;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                     = 0;
+#endif /* __EVS_SUPPORT__ */
+                    nvram_ims_profile_ptr->ua_config.reuse_transport_methods        = 0x00000254; // REFER, CANCEL, ACK, SUBSCRIBE
+                    nvram_ims_profile_ptr->ua_config.always_add_user_phone_in_conf_refer = 1;
+                    
+                    memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set[0],0,16);
+                    strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set,
+                    "0,2,4,7", sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set)-1);
+                    
+                    memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+                    strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,
+                    "0,1,2,7", sizeof (nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1);
+                    nvram_ims_profile_ptr->ua_config.ect_delay_target_unhold        = 2;
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase       = 1;
+                    nvram_ims_profile_ptr->ua_config.oos_end_reset_tcp_client       = 1;
+                    nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail            = 0;
+                }
+                /* VDF Hungary */
+                else if (strncmp((char *)&mccmnc[0], "216", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 3;        // IMS reg maintained but initial reg not allowed
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+                    
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+                    nvram_ims_profile_ptr->ua_config.enable_in_band_tone_in_hold        = 0;
+                    nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+                    nvram_ims_profile_ptr->ua_config.delay_unhold_call                  = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_block_in_remote_hold           = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_delay_target_unhold            = 2;
+                #ifdef __EVS_SUPPORT__            
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                #endif /* __EVS_SUPPORT__ */
+                    /* Reg */
+                    
+                    /*IMCB*/
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;        //v4_prefer
+                }
+                /* VDF Italy */
+                else if (strncmp((char *)&mccmnc[0], "222", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery         = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                    nvram_ims_profile_ptr->ua_config.check_conference_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 20;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 120;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer          = 900;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se         = 90;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt             = 101;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt          = 102;
+                    nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai           = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri       = 1;
+                    nvram_ims_profile_ptr->ua_config.delay_ecpi2_at_183             = 1;
+                    nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite    = 1;
+                    nvram_ims_profile_ptr->ua_config.prefer_original_codec          = 0;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+                    nvram_ims_profile_ptr->ua_config.use_org_sdp_for_invite_without_sdp = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                         = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                    = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                    = 6;
+                    nvram_ims_profile_ptr->ua_config.bw_end                         = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_send_end                    = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_recv_end                    = 2;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                     = 0;
+                    nvram_ims_profile_ptr->ua_config.cmr                            = 1;
+                #endif /* __EVS_SUPPORT__ */
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase       = 1;
+                }
+                /* VDF Czech */
+                else if (strncmp((char *)&mccmnc[0], "230", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery         = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 180;
+                    nvram_ims_profile_ptr->ua_config.authorization_with_algo        = 1;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype        = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403    = 0;
+                    nvram_ims_profile_ptr->ua_config.ect_without_target_hold        = 1;
+                    nvram_ims_profile_ptr->ua_config.set_rtcp_0                     = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                         = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                    = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                    = 6;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                     = 0xFF;
+                #endif /* __EVS_SUPPORT__ */
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase       = 1;
+                    nvram_ims_profile_ptr->ua_config.register_event_subscribe_support = 0;
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+                }
+                /* VDF UK */
+                else if (strncmp((char *)&mccmnc[0], "234", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery         = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 20;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 120;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                 = 118;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt              = 116;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt             = 110;
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_resp      = 1;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype        = 1;
+                    nvram_ims_profile_ptr->ua_config.no_auto_retry_for_mo_call      = 0;
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                     = 0;
+                    nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail            = 0;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                = 1000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                = 4000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                = 5000;
+                    nvram_ims_profile_ptr->ua_config.ignore_380_emg_xml             = 1;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 1;
+                    nvram_ims_profile_ptr->ua_config.in_reply_to_support            = 0;
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase       = 1;
+                }
+                /* VDF Germany */
+                else if (strncmp((char *)&mccmnc[0], "262", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.resource_retain_timer         = 15000;
+                    nvram_ims_profile_ptr->imc_config.is_ims_retry_status           = 2;
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;    //delay IMS dereg in 23G until call is released
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery         = 1;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 20;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 120;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer          = 1800;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se         = 90;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt             = 102;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt          = 101;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MSS      = 1100;
+#ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                         = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                    = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                    = 6;
+#endif /* __EVS_SUPPORT__ */
+                    nvram_ims_profile_ptr->ua_config.bypass_380_pai_check           = 1;
+                    nvram_ims_profile_ptr->ua_config.add_cell_info_age_to_cni       = 1;
+                    nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                     = 0;
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.access_network_info_type       = 4;
+                    nvram_ims_profile_ptr->ua_config.use_new_pcscf_for_reg          = 1;  // VOLTE_REG_NEW_PCSCF_FOR_PCO_CHANGE
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase       = 1;
+                    /* SMS */
+                    nvram_ims_profile_ptr->ua_config.sms_support_in_23g             = 0;
+                    nvram_ims_profile_ptr->ua_config.in_reply_to_support            = 0;
+                }
+                /* VDF Portugal */
+                else if (strncmp((char *)&mccmnc[0], "268", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 120;
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_req       = 1;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+                    nvram_ims_profile_ptr->ua_config.allow_non_sendrecv_rtcp_0      = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                         = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                    = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                    = 6;
+                    nvram_ims_profile_ptr->ua_config.bw_end                         = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_send_end                    = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_recv_end                    = 2;
+                #endif /* __EVS_SUPPORT__ */
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+                }
+                /* VDF Ireland */
+                else if (strncmp((char *)&mccmnc[0], "272", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1330;
+
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;      // v4_prefer
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;
+
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 240;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 240;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye_delay               = 2;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 1;
+                    nvram_ims_profile_ptr->ua_config.set_homeuri_from_pau               = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant            = 0x1111;
+                    nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                         = 0;
+                    nvram_ims_profile_ptr->ua_config.reuse_transport_methods            = 0x00000254; // REFER, CANCEL, ACK, SUBSCRIBE
+                    nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+                    nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x4E; // Default + WFC normal disabled.
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0xFF;
+                #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 4000;
+
+                    /* SMS */
+                    nvram_ims_profile_ptr->ua_config.sms_support_in_23g                 = 0;
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+                }
+                /* Qman */
+                else if (strncmp((char *)&mccmnc[0], "422", 3) == 0) {
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0006;
+                    /* Call*/    
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+
+                    /* Reg/Stack */
+
+                    /* IMCB */
+
+                    /* IMC */                    
+                }
+                /* VDF Newzealand */
+                else if (strncmp((char *)&mccmnc[0], "530", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 800;
+
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 50;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 50;
+                    nvram_ims_profile_ptr->ua_config.send_refer_to_peer                 = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.set_rtcp_0                         = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+                    nvram_ims_profile_ptr->ua_config.hide_vattr_when_port_zero          = 1;
+                    nvram_ims_profile_ptr->ua_config.play_local_tone_when_no_rtp_pkt_on_remote_hold   = 1;
+
+                    /* Reg */
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 21600;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                  = 0x30;
+
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;        //v4_prefer
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                             strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                             "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                             sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                                    );
+
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+                    nvram_ims_profile_ptr->imc_config.video_dedicated_fallback_support  = 1;
+                    nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+                }
+                /* VDF Turkey */
+                else if (strncmp((char *)&mccmnc[0], "286", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                     = 118;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt                  = 116;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt                 = 110;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt              = 102;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.no_auto_retry_for_mo_call          = 0;
+                    nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                    = 0x01;
+                    nvram_ims_profile_ptr->ua_config.add_cell_info_age_to_cni           = 1;
+                    nvram_ims_profile_ptr->ua_config.wfc_emerg_pidf_country             = 1;
+                    nvram_ims_profile_ptr->ua_config.pidf_country                       = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+                    nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x0F; // PIDF_ALL_CALLS_ENABLE
+                    nvram_ims_profile_ptr->ua_config.support_early_upgrade              = 1;
+                    nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_fmtp              = 1;
+                    nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_ptime             = 0;
+                    nvram_ims_profile_ptr->ua_config.disable_conf_call_prcd             = 1;
+                    nvram_ims_profile_ptr->ua_config.call_sdp_ans_ack_timeout           = 10;
+                    nvram_ims_profile_ptr->ua_config.in_reply_to_support                = 0;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_recv_end                        = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_send_end                        = 2;
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                #endif /* __EVS_SUPPORT__ */
+                    nvram_ims_profile_ptr->ua_config.check_contact_380                  = 1;
+                    nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+                    nvram_ims_profile_ptr->ua_config.delay_unhold_call                  = 1;
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                }
+                 /* Qatar */
+               else if (strncmp((char *)&mccmnc[0], "427", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0006;     //operator_code = 6(Vodafone)
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.hide_vattr_when_port_zero          = 1;                    
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;       
+
+                    /* IMCB */
+
+                    /* IMC */
+                    
+                    /* SMS */
+                    nvram_ims_profile_ptr->ua_config.in_reply_to_support                = 0;
+                }
+                /* VDF Egypt*/
+                else if (strncmp((char *)&mccmnc[0], "602", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);             
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0006;     //operator_code = 6(Vodafone)
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 40;         
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 40;         
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;          
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;          
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;          
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1230;       
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;       
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;          
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;         
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;      
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;          
+
+                    /* IMC */
+                }
+                /* VDF Zambia */
+                else if (strncmp((char *)&mccmnc[0], "645", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0006;   //operator_code = 6(VDF)
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1400;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;        //v4_prefer
+                    nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;        //disable precondition
+                    nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 8000;
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.set_rtcp_0                         = 1;
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;
+
+                    /* Reg/Stack */
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.video_resource_retain_timer       = 8000;
+                    memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                              "0,2,6,3,1,4,5,0",
+                              sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                            );
+                    memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                              "0,2,6,3,1,4,5,0",
+                              sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                            );
+                }
+                /* VDF South Africa */
+                else if (strncmp((char *)&mccmnc[0], "655", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 120;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                = 32000;
+                    nvram_ims_profile_ptr->ua_config.set_rtcp_0                     = 1;
+                    nvram_ims_profile_ptr->ua_config.rtcp_interval                  = 0;
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+                }
+                /* VDF Romania */
+                else if (strncmp((char *)&mccmnc[0], "226", 3) == 0) {
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // IMS reg maintained but initial reg not allowed
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+                    
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 1800;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                         = 0;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 0;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x0007; // enable SRVCC, aSRVCC and mid-SRVCC
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+                    nvram_ims_profile_ptr->ua_config.support_early_upgrade              = 1;
+                    nvram_ims_profile_ptr->ua_config.join_send_bye                      = 0;
+                    nvram_ims_profile_ptr->ua_config.conference_desub_time              = 0;
+
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                #endif /* __EVS_SUPPORT__ */
+                    /* Reg */
+                    
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;        //v4_prefer
+                }
+                /* Tanzania/Vodacom */
+                else if (strncmp((char *)&mccmnc[0], "640", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0006;
+                    
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    /* Reg */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.support_early_upgrade                = 1;
+                    nvram_ims_profile_ptr->ua_config.in_reply_to_support                = 0;
+                }
+                /* Vodacom/Mozambique */
+                else if (strncmp((char *)&mccmnc[0], "643", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0006;
+                    
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    /* Reg */
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                }
+                /* VDF Albania */
+                else if (strncmp((char *)&mccmnc[0], "276", 3) == 0) {
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // IMS reg maintained but initial reg not allowed
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+                    
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                         = 0;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                #endif /* __EVS_SUPPORT__ */
+                    /* Reg */
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase           = 1;
+                    
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;        //v4_prefer
+                }
+                /* VDF/CyTa Cyprus  */
+                else if (strncmp((char *)&mccmnc[0], "280", 3) == 0) {
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // IMS reg maintained but initial reg not allowed
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+                    
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                         = 0;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                #endif /* __EVS_SUPPORT__ */
+                    /* Reg */
+
+                    /* SMS */
+                    nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x00;
+                    
+                    /* IMCB */
+                }
+            }
+            break;
+        }
+        case 7: /* AT&T */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code             = 0x0007;      //operator_code = 7(AT&T)
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer    = 8000;  // 8000ms (8 seconds)
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_base_timer   = 120*1000;    // 120000s (120 seconds) CDR-LTE-1468
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_max_timer    = 7200*1000;   // 7200000ms (7200 seconds) CDR-LTE-1468
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer     = 0;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size    = 1230;
+            nvram_ims_profile_ptr->ua_config.UA_call_no_resource_code = 580;   //AT&T TC LTE-BTR-5-5560
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se   = 0;
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g  = 3;     // <CDR-NWS-705> IMS registration allowed and maintained in 23G as well, <CDR-LTE-1880> de-registration in GERAN
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn   = 1;
+            nvram_ims_profile_ptr->imc_config.ecc_guard_timer         = 10;
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery   = 1;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg = 1;
+            /*location info*/
+            nvram_ims_profile_ptr->imc_config.location_info_support   = 1;
+            nvram_ims_profile_ptr->imc_config.ussd_support            = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            set_psismsc_by_imsi(&nvram_ims_profile_ptr->imc_config.default_psismsc[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);            
+            nvram_ims_profile_ptr->imc_config.att_family              = 1;
+            nvram_ims_profile_ptr->imc_config.block_reg_when_isim_params_no_avail = 1;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule            = 0x01;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status         = 4;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_watchdog_timer = 300;  // v21.3 <CDR-IMS-1210>
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.oir_privacy_to_header              = 1;
+            nvram_ims_profile_ptr->ua_config.register_cap_whenever              = 1;
+            nvram_ims_profile_ptr->ua_config.no_auto_retry_for_mo_call          = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.conference_subscribe_timing        = 1;
+            nvram_ims_profile_ptr->ua_config.set_zero_cell_id_in_wifi           = 1;
+            nvram_ims_profile_ptr->ua_config.reject_mtcall_by_vops              = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 60;
+            nvram_ims_profile_ptr->ua_config.reject_code_in23G                  = 488;
+            nvram_ims_profile_ptr->ua_config.delay_unhold_call                  = 1;
+            nvram_ims_profile_ptr->ua_config.add_imageattr                      = 1;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.video_conf_if_one_is_video         = 1;
+            nvram_ims_profile_ptr->ua_config.call_rel_holdcall_in_midcall_SRVCC = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_send_bye                     = 1;
+            nvram_ims_profile_ptr->ua_config.conf_user_count_includes_host      = 0;
+            nvram_ims_profile_ptr->ua_config.pem_use_sdp_rtp_drct               = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.conference_desub_time              = 2;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.reject_text_when_text_off          = 0;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.text_feature_tag                   = 1;
+            nvram_ims_profile_ptr->ua_config.tty_enable                         = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.accept_wifi_call_if_audio_cap_0    = 1;
+            nvram_ims_profile_ptr->ua_config.follow_mt_pt_list                  = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 45;
+            nvram_ims_profile_ptr->ua_config.add_pani_in_ack                    = 1;
+            nvram_ims_profile_ptr->ua_config.stir_shaken_for_privacy            = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+            nvram_ims_profile_ptr->ua_config.try_same_pcscf_rereg               = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                     = 32000; // 32 sec
+            nvram_ims_profile_ptr->ua_config.UA_reg_d_timer                     = 32000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_f_timer                     = 32000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_h_timer                     = 32000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_j_timer                     = 32000;
+            nvram_ims_profile_ptr->ua_config.reg_try_all_pcscf_5626             = 1;
+            nvram_ims_profile_ptr->ua_config.close_unprotected_conn             = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_delay_time                   = 2;
+            nvram_ims_profile_ptr->ua_config.wfc_refresh_23g                    = 1;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.geolocation_type                   = 2;
+            nvram_ims_profile_ptr->ua_config.init_reg_delay_time                = 2;
+            nvram_ims_profile_ptr->ua_config.rtt_tag_mode                       = 1;
+            nvram_ims_profile_ptr->ua_config.reject_rcs_request                 = 480;
+            nvram_ims_profile_ptr->ua_config.sit_tcp_2xx_rsp_retransmission     = 0;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;
+            nvram_ims_profile_ptr->ua_config.confidence_level                   = 90;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+            nvram_ims_profile_ptr->imc_config.ims_video_qci                     = 255;
+            nvram_ims_profile_ptr->imc_config.ignore_media_qci_check            = 0xff2; // 111111110010, ignore video qci
+            nvram_ims_profile_ptr->imc_config.enable_audio_precondition         = 1;
+            nvram_ims_profile_ptr->imc_config.video_resource_retain_timer       = 8000;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //ATT: "N,33,16,0;N,28,16,0;N,*,0,1;E,*,0,1;"
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,28,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Mexico */
+                if (strncmp((char *)&mccmnc[0], "334", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0007;   //operator_code = 7 (AT&T Mexico)
+                    nvram_ims_profile_ptr->imc_config.location_info_support         = 1;
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                  = 0x01;
+                    nvram_ims_profile_ptr->imc_config.emergency_call_category_mapping = 1;
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 60;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 60;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+                    nvram_ims_profile_ptr->ua_config.terminal_based_cw              = 0;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable           = 0xF;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer           = 0xF;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 20;
+                    nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context= 0;
+                    nvram_ims_profile_ptr->ua_config.in_reply_to_support            = 0;
+                    nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage             = 0x0F;
+                    nvram_ims_profile_ptr->ua_config.enable_in_band_tone_in_hold    = 0;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support               = 0;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_f_timer                                = 20000;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                           = 1;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg                     = 1;
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+                    nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp        = 1;
+                    nvram_ims_profile_ptr->imc_config.resource_retain_timer         = 10000;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time           = 10;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_max_time            = 10000;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count   = 0;
+                    nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg       = 1;
+                }
+            }
+            break;
+        }
+        case 8: /* TMOUS */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code           = 0x0008;      //operator_code = 8(TMOUS)
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer   = 0x00000708;  // UA_call_session_timer = 1800
+            nvram_ims_profile_ptr->ua_config.local_sip_protocol_type = 0x00;
+
+            /* we want auto select TCP/UDP for TMO-us network */
+            /* nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP = 1;*/
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP  = 0;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size   = 1200; /* we change to 1200 for TMO specific 1300;*/
+            nvram_ims_profile_ptr->ua_config.UA_call_mo_invite_to_bw_cnf_time = 40;
+            nvram_ims_profile_ptr->ua_config.UA_call_no_resource_code         = 503;
+            nvram_ims_profile_ptr->imc_config.ussd_support                    = 1;  // defaultly enable ussd support
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                    = 0x12;  // 10010, relied on
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg         = 1;
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer            = 40000; // 2021Q1 MTRREQ-43301 (40 seconds)
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1; //delay IMS dereg in 23G until call is released
+            strncpy((char*)nvram_ims_profile_ptr->ua_config.user_agent,
+                      "T-Mobile PRD-IR92/13 RCS-client/UP_2.0 term-Vendor3 cert/T-Mobile-ussd",
+                      sizeof (nvram_ims_profile_ptr->ua_config.user_agent)-1
+                    ); // 2021Q4 MTRREQ-43101
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*location info*/
+            nvram_ims_profile_ptr->imc_config.location_info_support  = 1;
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery  = 1;
+            nvram_ims_profile_ptr->imc_config.allow_emergency_dereg  = 2;   // deactivate ECC PDN directly
+            nvram_ims_profile_ptr->imc_config.send_sip_dereg_at_23g  = 0;   // don't send sip dereg in 23G for TMOUS
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status    = 3;   // RELIED_ON_UA
+            nvram_ims_profile_ptr->imc_config.emergency_call_category_mapping = 1;
+            nvram_ims_profile_ptr->imc_config.allow_call_while_registering = 1;
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.contact_with_username_inCall   = 0;
+            nvram_ims_profile_ptr->ua_config.send_refer_to_peer             = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.add_sdp_in_180_for_non_precond = 1;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403    = 0;
+            nvram_ims_profile_ptr->ua_config.waiting_487_for_cancel_timer_timeout   = 5;
+            nvram_ims_profile_ptr->ua_config.bcsfb_feature_enable           = 1;
+            nvram_ims_profile_ptr->ua_config.ecc_session_timer_enable       = 0;
+            nvram_ims_profile_ptr->ua_config.TMO_specific_SDP               = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 60;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 130;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 0;
+            nvram_ims_profile_ptr->ua_config.tty_enable                     = 1;
+            /* align EVS compile option since Gen92 */
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.show_octet_align               = 0;
+            nvram_ims_profile_ptr->ua_config.br_end                         = 4;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                     = 2;
+            nvram_ims_profile_ptr->ua_config.text_feature_tag               = 1;
+            nvram_ims_profile_ptr->ua_config.call_emc_rtt_cb_timeout        = 180;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage             = 0x18;
+            nvram_ims_profile_ptr->ua_config.bw_end                         = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                    = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                    = 2;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous            = 1;
+            nvram_ims_profile_ptr->ua_config.reject_text_when_text_off      = 0;
+            nvram_ims_profile_ptr->ua_config.ect_enable                     = 1;
+            nvram_ims_profile_ptr->ua_config.video_conf_if_one_is_video     = 1;
+            nvram_ims_profile_ptr->ua_config.mo_b1_timer_timeout            = 8;
+            nvram_ims_profile_ptr->ua_config.mt_call_last_come_first_served_timer_timeout = 7;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0        = 1;
+            nvram_ims_profile_ptr->ua_config.wait_user_end_call = 1;
+            nvram_ims_profile_ptr->ua_config.delay_ecpi2_at_183             = 1;
+            nvram_ims_profile_ptr->ua_config.wait_user_end_call_no_rtppkt   = 0; // GID-MTRREQ-481603
+            nvram_ims_profile_ptr->ua_config.video_tag_for_all_calls = 1;
+            nvram_ims_profile_ptr->ua_config.send_183_without_sdp_when_no_100rel = 1;
+            nvram_ims_profile_ptr->ua_config.add_framerate = 1;
+            nvram_ims_profile_ptr->ua_config.wait_user_end_call_no_rtppkt_emc = 1;
+            nvram_ims_profile_ptr->ua_config.reg_restore_try_next_pcscf = 1;
+            nvram_ims_profile_ptr->ua_config.call_sdp_ans_ack_timeout       = 10;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1; // 2021Q4 GID-MTRREQ-522075
+            nvram_ims_profile_ptr->ua_config.stir_shaken_for_privacy        = 1;
+            nvram_ims_profile_ptr->ua_config.video_add_plus_one             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.add_pani_in_ack = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_regid             = 1;
+            nvram_ims_profile_ptr->ua_config.authorization_with_algo        = 1;
+            nvram_ims_profile_ptr->ua_config.try_next_pcscf                 = 0;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403               = 1;
+            nvram_ims_profile_ptr->ua_config.try_next_pcscf_5626_403        = 1;
+            nvram_ims_profile_ptr->ua_config.ems_mode_ind                   = 1;
+            nvram_ims_profile_ptr->ua_config.wfc_with_plani                 = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_video_feature_tag_in_subscribe    = 1;
+            nvram_ims_profile_ptr->ua_config.try_next_pcscf_5626            = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_delay_time               = 2;
+            nvram_ims_profile_ptr->ua_config.reg_over_tcp                   = 1;
+            nvram_ims_profile_ptr->ua_config.emc_cits_protect_timer         = 900;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+            nvram_ims_profile_ptr->ua_config.rtt_tag_mode                   = 1;
+            nvram_ims_profile_ptr->ua_config.e3_emc_setup_catch_all_roaming_timer = 25;
+            nvram_ims_profile_ptr->ua_config.e2_emc_setup_initiation_timer  = 5;
+            nvram_ims_profile_ptr->ua_config.e3_emc_setup_catch_all_home_timer = 25;
+            nvram_ims_profile_ptr->ua_config.dynamic_pdn_mtu                = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport         = 0;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+            nvram_ims_profile_ptr->ua_config.confidence_level               = 90;
+            nvram_ims_profile_ptr->ua_config.mo_f1_timer_timeout            = 0x18; //  24 seconds
+            nvram_ims_profile_ptr->ua_config.disable_response_source        = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.video_bearer_lost_retain_timer = 3000;
+            nvram_ims_profile_ptr->imc_config.audio_bearer_lost_retain_timer = 3000;
+            nvram_ims_profile_ptr->imc_config.text_bearer_lost_retain_timer = 3000;
+            nvram_ims_profile_ptr->imc_config.ignore_sgn_qci_check          = 0x7; // 111
+            nvram_ims_profile_ptr->imc_config.ims_video_qci                 = 255;
+            nvram_ims_profile_ptr->imc_config.ignore_media_qci_check        = 0xff2; // 111111110010, ignore video qci
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable      = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                      "0,2,6,3,1,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                      "0,2,6,3,1,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                    );
+            nvram_ims_profile_ptr->imc_config.e911_resource_retain_timer    = 900*1000;  // 2018Q2
+            nvram_ims_profile_ptr->imc_config.emergency_pdn_retain_timer    = 900*1000;  // 2018Q2
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1; // 22Q1 GID-MTRREQ-519828 allow to use default bearer
+            nvram_ims_profile_ptr->imc_config.enable_audio_precondition         = 1;
+            nvram_ims_profile_ptr->imc_config.enable_video_precondition         = 1;
+            nvram_ims_profile_ptr->imc_config.enable_text_precondition          = 1;
+            break;
+        }
+        case 9: /* CT */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code             = 0x0009;      //operator_code = 9(CT)
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code  = 486;
+            nvram_ims_profile_ptr->ua_config.UA_call_no_resource_code  = 580;
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer    = 6000;  // 6000ms (6 seconds)
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule             = 0x14;           // 10100, relied on but not in call
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery    = 1;
+            nvram_ims_profile_ptr->imc_config.nr_recovery_support      = 1;
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;
+            nvram_ims_profile_ptr->imc_config.unlock_ims_permanent_reg_receive_tau = 0x02;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.emc_dereg_while_volte_off= 1;
+            nvram_ims_profile_ptr->imc_config.deactivate_video_when_early_media_off = 1;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg  = 1;
+            nvram_ims_profile_ptr->imc_config.dereg_when_sim_refresh   = 1;
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.add_3gpp_ims_in_Accept         = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.when_stop_tcall                = 100;
+            nvram_ims_profile_ptr->ua_config.check_contact_380              = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context= 0;
+            nvram_ims_profile_ptr->ua_config.reject_mtcall_when_vilte       = 1;
+            nvram_ims_profile_ptr->ua_config.not_add_SDP_in_OPTIONS         = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                 = 96;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant        = 0x1111;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall       = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 125;
+            nvram_ims_profile_ptr->ua_config.be_refresher_without_peer_support    = 1;
+            nvram_ims_profile_ptr->ua_config.add_imageattr                  = 1;
+            nvram_ims_profile_ptr->ua_config.reject_no_answer_resp_code     = 408;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timeout_code      = 408;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf=1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 0;
+            nvram_ims_profile_ptr->ua_config.need_revise_rtp_dir            = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout  = 20;
+            nvram_ims_profile_ptr->ua_config.br_end                         = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                    = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                    = 6;
+            nvram_ims_profile_ptr->ua_config.reg_restore_try_next_pcscf     = 1;
+            nvram_ims_profile_ptr->ua_config.delay_unhold_call              = 1;
+            nvram_ims_profile_ptr->ua_config.set_strength_mandatory         = 1;
+            nvram_ims_profile_ptr->ua_config.use_amr_bit_rate_downgrade     = 1;
+            nvram_ims_profile_ptr->ua_config.re_calc_rr_rs_in_offer_answer  = 1;
+            nvram_ims_profile_ptr->ua_config.send_bw_ind_when_recv_183_prack= 1;
+            nvram_ims_profile_ptr->ua_config.support_ringing_downgrade      = 1;
+            nvram_ims_profile_ptr->ua_config.add_qos_when_offer_present     = 1;
+            nvram_ims_profile_ptr->ua_config.call_normal_clear_timer_timeout= 1;
+            nvram_ims_profile_ptr->ua_config.no_state_transition_when_183_withoutsdp = 1;
+            nvram_ims_profile_ptr->ua_config.call_barring_in_warning_header = 1;
+            nvram_ims_profile_ptr->ua_config.set_upgrade_des_strength_optional = 1;
+            nvram_ims_profile_ptr->ua_config.err_handling_for_video_via_update = 0;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec          = 0;
+            nvram_ims_profile_ptr->ua_config.auto_unhold_when_rcv_recvonly  = 1;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align               = 0;
+            nvram_ims_profile_ptr->ua_config.disable_ul_rtp_in_early_state  = 1;
+            nvram_ims_profile_ptr->ua_config.conference_desub_time          = 2;
+            nvram_ims_profile_ptr->ua_config.follow_mt_pt_list = 1;
+            nvram_ims_profile_ptr->ua_config.start_ringback_t_only_by_180   = 1;
+            nvram_ims_profile_ptr->ua_config.conf_refer_order_by_call_id    = 1;
+            nvram_ims_profile_ptr->ua_config.always_fetch_1st_entry_in_hisInfo = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_req_timer_timeout  = 0;
+            nvram_ims_profile_ptr->ua_config.rm_prcd_when_video_prcd_off    = 1;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.disconnect_tcp_when_abnormal   = 1;
+            nvram_ims_profile_ptr->ua_config.precondition_in_support_header = 3;
+            nvram_ims_profile_ptr->ua_config.add_prcd_in_video_action_sdp   = 1;
+            nvram_ims_profile_ptr->ua_config.ignore_mismatch_refer_notify   = 1;
+            nvram_ims_profile_ptr->ua_config.no_session_modify_retry_for_491 = 1;
+            nvram_ims_profile_ptr->ua_config.always_report_remote_video_cap_support = 1;
+            nvram_ims_profile_ptr->ua_config.support_video_early_media      = 1;
+            nvram_ims_profile_ptr->ua_config.retry_ims_voice_if_488_no_sdp  = 1;
+            nvram_ims_profile_ptr->ua_config.mo_update_retry_upper_limit    = 1;
+            nvram_ims_profile_ptr->ua_config.refer_delay_timer              = 30;
+            nvram_ims_profile_ptr->ua_config.wait_audio_rtp_for_crs_timer_timeout = 3;
+            nvram_ims_profile_ptr->ua_config.max_hold_unhold_retry_cnt      = 2;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable           = 0x0000;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.support_invalid_audio_pt       = 1;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_resp      = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_username          = 0;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                   = 0;
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec              = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_reset_tcp_client         = 1;
+            nvram_ims_profile_ptr->ua_config.treg                           = 0;
+            nvram_ims_profile_ptr->ua_config.rereg_23g4                     = 1;
+            nvram_ims_profile_ptr->ua_config.resub_23g4                     = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403               = 1;
+            nvram_ims_profile_ptr->ua_config.keep_alive_mode                = 2;
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype        = 1;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403    = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inReg        = 1;
+            nvram_ims_profile_ptr->ua_config.when_stop_b_timer              = 200;
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_base_timer        = 30*1000;
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_max_timer         = 1800*1000;
+            nvram_ims_profile_ptr->ua_config.update_cap_when_rat_net_change = 0;
+            nvram_ims_profile_ptr->ua_config.check_call_domain              = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport         = 0;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_invite    = 4;
+            nvram_ims_profile_ptr->ua_config.query_other_sim_call_state     = 1;
+            nvram_ims_profile_ptr->ua_config.open_pcscf_retry_count_limit   = 1;
+            nvram_ims_profile_ptr->ua_config.scb_ntf_cs_protection          = 1;
+            nvram_ims_profile_ptr->ua_config.reg_reset_normal_tcp           = 1;
+            nvram_ims_profile_ptr->ua_config.est_client_tcp_when_send_response = 0;
+            nvram_ims_profile_ptr->ua_config.delay_normal_or_em_reg_if_they_occur_simulta   = 2;
+            nvram_ims_profile_ptr->ua_config.stop_err_resp_retx_when_not_needed = 1;
+            nvram_ims_profile_ptr->ua_config.link_mtu_size                  = 1280;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.mo_retry_after_504             = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_sms_disconnect_stack     = 0;
+            nvram_ims_profile_ptr->ua_config.sip_bye_retransmit_total_time  = 32000;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.nr_quick_disable_support      = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp        = 1;
+            nvram_ims_profile_ptr->imc_config.wait_for_sgn_timer            = 0xFFFFFFFE;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable      = 1;
+            break;
+        }
+        case 11: /* H3G */
+        {
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* UK */
+                if ((strncmp((char *)&mccmnc[0], "234", 3) == 0) ||
+                    (strncmp((char *)&mccmnc[0], "235", 3) == 0)) {
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x000B; //operator_code = 11(H3G UK)
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_On_Demand    = 0;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;      // defaultly enable ussd support
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x14;      // 10100, not to register on IMS, de-register only after the call is released
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;      // not register for WFC during a CS call
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;      // delay IMS dereg in 23G until call is released
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+                    nvram_ims_profile_ptr->ua_config.join_send_bye                      = 0;
+                    nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp = 0;
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_resp          = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 250;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                    nvram_ims_profile_ptr->ua_config.follow_nw_ims_vops_support         = 1;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                     = 102;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_oct_pt                 = 108;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt                  = 104;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_oct_pt              = 110;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt                 = 100;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt              = 105;
+                    nvram_ims_profile_ptr->ua_config.set_homeuri_from_pau               = 1;
+                    nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x0F;   // Disable PIDF/location in all MO calls (3UK_WFCv1.0_2.2.10)
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.de_subscribe                       = 0;
+                    nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype            = 1;
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                    nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                = 0;
+                    nvram_ims_profile_ptr->ua_config.delay_normal_or_em_reg_if_they_occur_simulta = 2;
+
+                    /* SMS */
+                    nvram_ims_profile_ptr->ua_config.sms_follow_nw_ims_vops_support     = 1;
+                    nvram_ims_profile_ptr->ua_config.sms_support_in_23g                 = 0;
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+                    nvram_ims_profile_ptr->imc_config.dereg_defer_pdn_release_timer     = 270000; //4min30seconds
+                }
+                /* Sweden */
+                else if (strncmp((char *)&mccmnc[0], "240", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x000B; //operator_code = 11(H3G SE)
+
+                    nvram_ims_profile_ptr->imc_config.location_info_support         = 1;
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;
+                    nvram_ims_profile_ptr->ua_config.auto_unhold_when_rcv_recvonly  = 1;
+                    nvram_ims_profile_ptr->ua_config.pcscf_error_when663            = 1;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 32;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.de_subscribe                   = 0;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                 = 8000;
+                    nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+
+                    /* IMCB */
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,18,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                }
+                /* Denmark */
+                else if (strncmp((char *)&mccmnc[0], "238", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x000B; //operator_code = 11(H3G DK)
+
+                    nvram_ims_profile_ptr->imc_config.location_info_support         = 1;
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application      = 1;
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;
+                    nvram_ims_profile_ptr->ua_config.auto_unhold_when_rcv_recvonly  = 1;
+                    nvram_ims_profile_ptr->ua_config.pcscf_error_when663            = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 60;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 60;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+                    nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context = 0;                    
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.de_subscribe                   = 0;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                 = 8000;
+                    nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+
+                    /* IMCB */
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,18,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                }
+                /* Austria */
+                else if (strncmp((char *)&mccmnc[0], "232", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x000B; //operator_code = 11(H3G)
+                    
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x14;   // 10100, not to register on IMS, de-register only after the call is released
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;      // not register for WFC during a CS call
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;      //delay IMS dereg in 23G until call is released
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 1800;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 600;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 36000;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F; // enable SRVCC, aSRVCC, bSRVCC and mid-sRVCC
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.join_send_bye                      = 0;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye_delay               = 1;
+                    nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_delay_target_unhold            = 2;
+                    nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_recv_end                        = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_send_end                        = 2;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0;
+                #endif /* __EVS_SUPPORT__ */
+                    
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                     = 128000;
+            
+                    /* IMCB */  
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy ( (char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            ); 
+                }
+                /* Ireland */
+                else if (strncmp((char *)&mccmnc[0], "272", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x000B; //operator_code = 11(H3G)
+                    
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye_delay               = 1;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+                }
+            }
+            break;
+        }
+        case 12: /* VzW */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code             = 0x000C; //operator_code = 12(VzW)
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec              = 0;      //NONE
+            nvram_ims_profile_ptr->ua_config.UA_reg_http_digest        = 2;      //AKAv2_MD5
+            nvram_ims_profile_ptr->ua_config.ipv6_zero_compression     = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer           = 0x00000BB8;  //UA_reg_t1_timer = 3000
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer           = 0x00003E80;  //UA_reg_t2_timer = 16000
+            nvram_ims_profile_ptr->ua_config.UA_reg_f_timer            = 0x00007530;  //UA_reg_F_timer = 30000
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_pt            = 102;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt         = 104;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition      = 0;           //disable precondition
+            nvram_ims_profile_ptr->ua_config.UA_reg_keep_alive         = 2;
+            nvram_ims_profile_ptr->imc_config.poweroff_ims_dereg_timer = 4;           //VZ_REQ_5GNRSA_4105999311948012 Req3, VZ_REQ_LTEB13NAC_6375
+            nvram_ims_profile_ptr->imc_config.ecc_guard_timer          = 20;          //E911 1.2.1.1 case 3 note
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn    = 1;
+            nvram_ims_profile_ptr->ua_config.sip_dscp                  = 0x2E;        //VzW_2017Feb_VZ_REQ_WIFI_41349
+            nvram_ims_profile_ptr->imc_config.location_info_support    = 1;
+            nvram_ims_profile_ptr->imc_config.epsfb_timer              = 6;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1428;
+            nvram_ims_profile_ptr->imc_config.emergency_call_category_mapping = 2;    // SOS URN only
+            nvram_ims_profile_ptr->imc_config.dereg_when_sim_refresh   = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                 = 1;          //VzW_2017Feb_VZ_REQ_IMS_22847
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1        = 17;         //VzW_2017JUN
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2        = 2;          //VzW_2017JUN
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3        = 1;          //VzW_2017JUN
+            nvram_ims_profile_ptr->ua_config.evs_configuration_profile   = 0;          //VZW_2020OCT EVS_A1 
+            nvram_ims_profile_ptr->ua_config.evs_configuration_profile_2 = 2;          //VZW_2020OCT EVS_B0
+            nvram_ims_profile_ptr->ua_config.UA_call_evs_pt              = 115;        //VZW_2020OCT	 
+			nvram_ims_profile_ptr->ua_config.evs_fmtp_variant_pt         = 109;        //VZW_2020OCT
+#endif /* __EVS_SUPPORT__ */
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set[0],0,16);
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,
+                    "2",
+                    sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set,
+                    "7",
+                    sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set)-1);
+
+            strncpy((char*)nvram_ims_profile_ptr->ua_config.user_agent,
+                      "MTK---MT6750---LR11.MP3",
+                      sizeof (nvram_ims_profile_ptr->ua_config.user_agent)-1
+                    );
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.check_reason_phrase                = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.check_conference_subscribe         = 1;
+            nvram_ims_profile_ptr->ua_config.conference_subscribe_timing        = 1;
+            nvram_ims_profile_ptr->ua_config.general_amr_nb_wb                  = 1;
+            nvram_ims_profile_ptr->ua_config.reject_1w_if_1A1H                  = 1;
+            nvram_ims_profile_ptr->ua_config.call_refreshcall_timer_expire      = 5;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 55;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 60;
+            nvram_ims_profile_ptr->ua_config.conf_user_count_includes_host      = 0;
+            nvram_ims_profile_ptr->ua_config.rtcp_xr_support                    = 1;
+            nvram_ims_profile_ptr->ua_config.use_from_to_append_pau             = 0; // VZ_REQ_IMS_22954
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 600;
+            nvram_ims_profile_ptr->ua_config.tty_enable                         = 1;
+            nvram_ims_profile_ptr->ua_config.delay_unhold_call                  = 1;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 300;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 300;
+            nvram_ims_profile_ptr->ua_config.call_lte_emc_timer_timeout         = 20;
+            nvram_ims_profile_ptr->ua_config.always100rel_in_resp               = 1;
+            nvram_ims_profile_ptr->ua_config.use_183_for_early_media            = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 6;   // VZ_REQ_HVOLTE_34160
+            nvram_ims_profile_ptr->ua_config.when_stop_tcall                    = 100; // VZ_REQ_HVOLTE_34144
+            nvram_ims_profile_ptr->ua_config.reject_mtcall_by_vops              = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.timer_b_restore_reg                = 0;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x0000;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.restore_in_3gpp_abnormal           = 0;
+            nvram_ims_profile_ptr->ua_config.conference_desub_time              = 30;
+            nvram_ims_profile_ptr->ua_config.br_begin                           = 0;          //VZ_REQ_IMS22927
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 3;          //VzW_2017JUN
+            nvram_ims_profile_ptr->ua_config.bw_begin                           = 0;          //VZ_REQ_IMS22927
+            nvram_ims_profile_ptr->ua_config.bw_end                             = 2;          //VzW_2017JUN
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 55;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.send_bye_when_term_early_dlg       = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_h264_pt2                   = 127;
+            nvram_ims_profile_ptr->ua_config.text_feature_tag                   = 1;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x0A;
+            nvram_ims_profile_ptr->ua_config.regard_180_without_pem_as_inactive = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode         = 1;
+            nvram_ims_profile_ptr->ua_config.rm_civic_on_e911                   = 2;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.pending_sip_msg_in_oos_state       = 0;
+            nvram_ims_profile_ptr->ua_config.accept_wifi_call_if_audio_cap_0    = 1;
+            nvram_ims_profile_ptr->ua_config.add_pani_in_ack                    = 1;
+            nvram_ims_profile_ptr->ua_config.when_stop_epsfb_timer              = 8;        //IMS_EPSFB_TIMER_STOP_WHEN_DEDICATED, VZ_REQ_5GNRSA_4105999311948016
+            memset(&nvram_ims_profile_ptr->ua_config.emergency_call_testing_number[0],0,EMERGENCY_CALL_TESTING_NUMBER_MAX_LENGTH);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.emergency_call_testing_number,
+            "922", sizeof(nvram_ims_profile_ptr->ua_config.emergency_call_testing_number)-1);
+            nvram_ims_profile_ptr->ua_config.stir_shaken_for_privacy            = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.keep_alive_mode                    = 2;
+            nvram_ims_profile_ptr->ua_config.check_msisdn                       = 1;
+            nvram_ims_profile_ptr->ua_config.support_throttling_algo            = 1;
+            nvram_ims_profile_ptr->ua_config.reg_after_nw_dereg_60s             = 1;
+            nvram_ims_profile_ptr->ua_config.sub_contact_with_sip_instance      = 1;
+            nvram_ims_profile_ptr->ua_config.stop_reg_md_lower_layer_err        = 1;
+            nvram_ims_profile_ptr->ua_config.check_notify_instance_id           = 1;
+            nvram_ims_profile_ptr->ua_config.add_cs_volte_feature_tag           = 1;
+            nvram_ims_profile_ptr->ua_config.check_call_domain                  = 1;
+            nvram_ims_profile_ptr->ua_config.support_sip_block                  = 1;
+            nvram_ims_profile_ptr->ua_config.emerg_reg_timer                    = 2;
+            nvram_ims_profile_ptr->ua_config.when_stop_b_timer                  = 200;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            nvram_ims_profile_ptr->ua_config.rtt_tag_mode                       = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_delay_time                   = 2;
+            nvram_ims_profile_ptr->ua_config.sit_tcp_2xx_rsp_retransmission     = 0;
+            nvram_ims_profile_ptr->ua_config.confidence_level                   = 90;
+            nvram_ims_profile_ptr->ua_config.use_new_pcscf_for_reg              = 3;  // VOLTE_REG_NEW_PCSCF_FOR_PCO_CHANGE | VOLTE_REG_NEW_PCSCF_FOR_IP_CHANGE
+            nvram_ims_profile_ptr->ua_config.new_reg_for_initial_request_type   = 1;
+            nvram_ims_profile_ptr->ua_config.reg_disable_pidf                   = 0x0F;
+            nvram_ims_profile_ptr->ua_config.rm_civic_on_e911                   = 1;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.psismsc_from_user                  = 1;
+            nvram_ims_profile_ptr->ua_config.add_user_phone                     = 0;
+            nvram_ims_profile_ptr->ua_config.add_no_fork_in_SMS                 = 1;
+            nvram_ims_profile_ptr->ua_config.imsi_reged_disable_sms             = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+            nvram_ims_profile_ptr->imc_config.restore_pcscf                     = 1;
+            nvram_ims_profile_ptr->imc_config.normal_pdn_retry_count            = 1;
+            nvram_ims_profile_ptr->imc_config.reset_retry_after_timer_criteria  = 3;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                      "0,2,6,3,1,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                      "0,2,6,3,1,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                    );
+
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //VZW: "N,210,20,0;N,211,20,0;N,212,20,0;N,*,0,1;E,*,0,1;"
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,210,20,0;N,211,20,0;N,212,20,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        case 15: /* Telefonica/O2 */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                          = 0x000F; //operator_code = 15(Telefonica)
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                          = 0x18;   // 11000, special
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call      = 1;      // not register for WFC during a CS call
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                 = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                         = 0;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp    = 0;
+            nvram_ims_profile_ptr->ua_config.disable_conf_call_prcd                 = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming            = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call         = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1             = 0;
+            nvram_ims_profile_ptr->ua_config.ect_enable                             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                    = 0;
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                     = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port                 = 0;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            nvram_ims_profile_ptr->imc_config.wait_for_sgn_timer                     = 86400; // 24h
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Germany */
+                if (strncmp((char *)&mccmnc[0], "262", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g         = 2;
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp         = 1;
+                    nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp         = 1;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size  = 1180;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 180;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout        = 20;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer            = 2; // force_srvcc_transfer = conference call
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1      = 1;
+                    nvram_ims_profile_ptr->ua_config.from_header_peer_addr           = 1;
+                    nvram_ims_profile_ptr->ua_config.omit_sip_instance_in_contact    = 0x03; // B0000_0011
+                    nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature          = 1;
+#ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                     = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1            = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2            = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3            = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                          = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                     = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                     = 6;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                      = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_end                          = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_send_end                     = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_recv_end                     = 2;
+#endif /* __EVS_SUPPORT__ */
+                    nvram_ims_profile_ptr->ua_config.use_local_conf_participant_list_in_srvcc = 1;
+                }
+                /* UK */
+                else if (strncmp((char *)&mccmnc[0], "234", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.sms_support                    = 0;
+                    nvram_ims_profile_ptr->ua_config.sms_network_types               = 0x00;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                 = 7190;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 90;
+                    nvram_ims_profile_ptr->ua_config.add_rtcp_port_into_sdp          = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server      = 1;
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani             = 1;
+                    nvram_ims_profile_ptr->ua_config.reg_check_reason_header         = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_oct_pt              = 96;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_oct_pt           = 107;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt              = 110;
+                    nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt           = 111;                    
+                    nvram_ims_profile_ptr->ua_config.UA_call_evs_pt                  = 112;                    
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt               = 116;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                  = 118;
+                    nvram_ims_profile_ptr->ua_config.show_octet_align                = 0;                                          
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant         = 0x1111;
+                    nvram_ims_profile_ptr->ua_config.reuse_transport_methods         = 0x00000254; // REFER, CANCEL, ACK, SUBSCRIBE                     
+                    nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin           = 1;
+                    nvram_ims_profile_ptr->ua_config.set_des_strength_optional       = 1;
+                    nvram_ims_profile_ptr->ua_config.rereg_in_oos_end                = 1;
+                    nvram_ims_profile_ptr->ua_config.oos_end_reset_tcp_client        = 1;
+                    nvram_ims_profile_ptr->ua_config.init_reg_delay_time             = 2;
+                    nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_fmtp           = 1;
+                    nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_ptime          = 0;                   
+                    nvram_ims_profile_ptr->ua_config.from_header_peer_addr           = 1;
+#ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                     = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1            = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2            = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3            = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                          = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                     = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                     = 6;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                      = 3;
+                    nvram_ims_profile_ptr->ua_config.bw_end                          = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_send_end                     = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_recv_end                     = 2;
+#endif /* __EVS_SUPPORT__ */
+                }
+                /* Spain */
+                else if (strncmp((char *)&mccmnc[0], "214", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.sms_support                       = 0;
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+                    nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg           = 1;
+                    nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x00;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1080;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 1;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x0007; // enable SRVCC, aSRVCC, midSRVCC
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0xFF;
+                #endif /* __EVS_SUPPORT__ */
+                    nvram_ims_profile_ptr->ua_config.access_network_info_type           = 4;
+                    nvram_ims_profile_ptr->ua_config.from_header_peer_addr              = 1;
+                    nvram_ims_profile_ptr->ua_config.sub_def_expires                    = 600000;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant            = 0x1111;
+                    nvram_ims_profile_ptr->ua_config.ect_without_target_hold            = 1;
+                    nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                    = 1;
+                    nvram_ims_profile_ptr->ua_config.always_add_user_phone_in_conf_refer = 1;
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.dedicated_fallback_support        = 1;
+                }
+            }
+            break;
+        }
+        case 16: /* EE */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0010; //operator_code = 16(EE)
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1200;   //tcp_mtu_size = 1200
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x14;      // 10100, relied on but not in call
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg           = 1;
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;      // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;      // lbs location info service: on
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn             = 1;      // EE-0642: ePDG should use sos APN for EC over WiFi
+            nvram_ims_profile_ptr->imc_config.allow_emergency_dereg             = 1;      // allow to deactivate ECC PDN
+            nvram_ims_profile_ptr->imc_config.emergency_reg_retain_timer        = 302000; // 5m 2s
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery   = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+            nvram_ims_profile_ptr->ua_config.join_send_bye                  = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 60;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 130;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 20;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer          = 3600;
+            nvram_ims_profile_ptr->ua_config.active_state_oos_level         = 2;          // release hold call when enter OOS
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage             = 0x0A;       // PIDF_WFC_EMERG_ENABLE and PIDF_VOLTE_EMERG_ENABLE (EE-0768)
+            nvram_ims_profile_ptr->ua_config.geolocation_type               = 4;          // longitude, latitude, country, state, city, zip
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                         = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                    = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                    = 6;
+            nvram_ims_profile_ptr->ua_config.cmr                            = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.wfc_emerg_pidf_country         = 1;
+            nvram_ims_profile_ptr->ua_config.wfc_emerg_pidf_lng_lat_country = 1;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req       = 1;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403    = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail            = 0;
+            nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_fmtp          = 1;
+            nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_ptime         = 0;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403               = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg                   = 1;   // not auto reg if 500 response is received
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani       = 1;
+            nvram_ims_profile_ptr->ua_config.release_pdn_when_ems_dereg     = 0;
+            nvram_ims_profile_ptr->ua_config.rereg_in_oos_end               = 1;
+            nvram_ims_profile_ptr->ua_config.oos_end_reset_tcp_client       = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                 = 10000;   // EE requirement: EE-0706
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663             = 1;    // EE requirement: EE-0706
+            nvram_ims_profile_ptr->ua_config.delay_normal_or_em_reg_if_they_occur_simulta = 2;
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype        = 1;
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                = 0x01;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+            /* Set default_fallback_support only for BTonephone IMSI MNC. */
+            if (imsi_mnc_len == 2) {
+                if (strncmp((char *)&mccmnc[3], "08", 2) == 0) {
+                    nvram_ims_profile_ptr->imc_config.default_fallback_support = 1;
+                }
+            } else if (imsi_mnc_len == 3) {
+                if (strncmp((char *)&mccmnc[3], "008", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.default_fallback_support = 1;
+                }
+            }
+            break;
+        }
+        case 17: /* DoCoMo */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code              = 0x0011; //operator_code = 17(DoCoMo)
+            nvram_ims_profile_ptr->ua_config.register_expiry            = 3600;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_code           = 403;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code   = 403;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MSS  = 1400;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo          = 0x03; //NULL+MD5, NULL+SHA1
+            nvram_ims_profile_ptr->imc_config.ussd_support              = 1;
+            nvram_ims_profile_ptr->imc_config.emergency_pdn_retain_timer = 18000;
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp    = 1;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status       = 1; // ALWAYS
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.no_auto_retry_for_dcm_mo_call  = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+            nvram_ims_profile_ptr->ua_config.when_stop_tcall                = 100;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous            = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport         = 0;
+            nvram_ims_profile_ptr->ua_config.reg_restore_try_next_pcscf     = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                     = 0;
+            nvram_ims_profile_ptr->ua_config.br_end                         = 4;
+            nvram_ims_profile_ptr->ua_config.br_send_end                    = 4;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                    = 4;
+            nvram_ims_profile_ptr->ua_config.bw_end                         = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                    = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                    = 2;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.always_report_remote_video_cap_support = 1;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.mo_retry_after_504             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.de_subscribe                   = 0;
+            nvram_ims_profile_ptr->ua_config.try_next_pcscf                 = 1;
+            nvram_ims_profile_ptr->ua_config.via_without_rport              = 1;
+            nvram_ims_profile_ptr->ua_config.reg_route_hdr                  = 1;
+            nvram_ims_profile_ptr->ua_config.via_uri_with_default_port      = 1;
+            nvram_ims_profile_ptr->ua_config.notify_sms_notify_done         = 1;
+            nvram_ims_profile_ptr->ua_config.emergency_use_imsi             = 1;
+            nvram_ims_profile_ptr->ua_config.retry_interval_after_403       = 240;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+            nvram_ims_profile_ptr->ua_config.check_reg_contact              = 0;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+            nvram_ims_profile_ptr->ua_config.try_same_pcscf_if_retry_after  = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.timerF_expiry                 = 1;
+            nvram_ims_profile_ptr->imc_config.timerB_expiry                 = 1;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                  = 0x12; // 10010
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer         = 8000;
+            nvram_ims_profile_ptr->imc_config.pcscf_reselect_flag           = 1;
+            nvram_ims_profile_ptr->imc_config.ignore_media_qci_check        = 0xf23; // 111100100011, ignore audio qci in 3GPP HPLMN
+            break;
+        }
+        case 18: /* RJIL */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0012;
+           // nvram_ims_profile_ptr->imc_config.ims_signaling_qci                 = 0xFF;        //remove QCI checking
+            nvram_ims_profile_ptr->imc_config.ignore_sgn_qci_check              = 0x7; // 111
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;           //disable precondition
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 0x00000708;  // UA_call_session_timer = 1800
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1100;        // V4.5
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            strncpy((char*)nvram_ims_profile_ptr->ua_config.user_agent,
+                      "MTK_IMSUA_000_LW",
+                      sizeof (nvram_ims_profile_ptr->ua_config.user_agent)-1
+                    );
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 30;
+            nvram_ims_profile_ptr->imc_config.ecc_guard_timer                   = nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout + 10;
+            nvram_ims_profile_ptr->ua_config.wait_second_invite_for_hold        = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 60;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.video_conf_if_one_is_video         = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_send_bye                     = 1;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x0007; // enable SRVCC, aSRVCC, midSRVCC
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.add_imageattr                      = 1;      // V4.5
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.general_amr_nb_wb                  = 1;
+            nvram_ims_profile_ptr->ua_config.reg_when_norsp_before_timeout      = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 30;
+            nvram_ims_profile_ptr->ua_config.support_ringing_downgrade          = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode         = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_req_timer_timeout      = 40;
+            nvram_ims_profile_ptr->ua_config.disable_ul_rtp_in_early_state  = 1;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x0F;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.audio_dscp                     = 46;
+            nvram_ims_profile_ptr->ua_config.video_dscp                     = 26;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.cur_loc_for_emergency_enable       = 0;
+            nvram_ims_profile_ptr->ua_config.call_invite_no_rsp_ran_prio_req_timer_timeout = 3;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+#endif /* __EVS_SUPPORT__ */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.try_n_next_pcscf_5626              = 2;
+            nvram_ims_profile_ptr->ua_config.try_same_pcscf_if_retry_after      = 1;
+            nvram_ims_profile_ptr->ua_config.contact_wildcard_dereg             = 1;
+            nvram_ims_profile_ptr->ua_config.reg_disable_pidf                   = 0x0E;   // Enable WFC emergency reg
+            nvram_ims_profile_ptr->ua_config.ipsec_local_port_range             = 100;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                = 0;
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all           = 20;
+            nvram_ims_profile_ptr->ua_config.update_ipsec_port_494              = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inReg            = 1;
+            nvram_ims_profile_ptr->ua_config.check_reg_contact                  = 0;
+            nvram_ims_profile_ptr->ua_config.wfc_refresh_23g                    = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 12*1000;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status               = 2;
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                      "0,2,6,3,1,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                      "0,2,6,3,1,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                    );
+
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                       = 0x12;       //10010, Relied on. SPEC: RJIL_v5.2_GR_28.7
+            break;
+        }
+        case 19: /* Telstra */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code           = 0x0013; //operator_code = 19(Telstra)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status    = 1;  // ALWAYS
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server            = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context   = 0;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout          = 20;
+            nvram_ims_profile_ptr->ua_config.reject_code_in23G                 = 406;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call    = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1        = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port            = 0;
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /*Australia*/
+                if (strncmp((char *)&mccmnc[0], "505", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0013; //operator_code = 19(Telstra)
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x14;      // 10100, relied on but not in call
+                    nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+                    nvram_ims_profile_ptr->ua_config.reject_code_in23G                  = 406;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode         = 1;
+                    nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x08; 
+#ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+#endif /* __EVS_SUPPORT__ */
+                    nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                    = 1;
+                    nvram_ims_profile_ptr->ua_config.delay_unhold_call                  = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+                    nvram_ims_profile_ptr->ua_config.oos_end_reset_tcp_client           = 1;
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1; 
+                    nvram_ims_profile_ptr->imc_config.is_ims_retry_status               = 2; // Depend on AUTO_REREG status
+                    /* IMCB */
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //Telstra/Australia: "N,33,16,0;N,*,0,1;E,*,0,1;"
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                    strncpy((char*)nvram_ims_profile_ptr->ua_config.user_agent,
+                      "Telstra MTK internal_Phone Android Firmware",
+                      sizeof (nvram_ims_profile_ptr->ua_config.user_agent)-1
+                            );
+                    nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable     = 1;
+                    nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+                    nvram_ims_profile_ptr->imc_config.sms_support                       = 0;
+                }
+            }
+            break;
+        }
+        case 20: /* Sprint */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0014;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1200;        //Sprint_GTR-March2017_V2.3-IMS-00278
+            nvram_ims_profile_ptr->ua_config.sip_dscp                       = 0x32;        //Sprint_GTR-March2017_V2.3-IMS-00057
+            nvram_ims_profile_ptr->ua_config.audio_dscp                     = 0x46;        //Sprint_GTR-March2017_V2.3-IMS-00057
+            nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                 = 8000;        //Sprint_GTR-March2017_V2.3-IMS-00344
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            //Sprint_GTR-March2017_V2.3-IMS-00454
+            set_psismsc_by_imsi(&nvram_ims_profile_ptr->imc_config.default_psismsc[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            nvram_ims_profile_ptr->imc_config.location_info_support         = 1;
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.show_octet_align               = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set[0],0,16);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set,
+            "0,2,4,7", sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set)-1);
+
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,
+                      "0,1,2",
+                      sizeof (nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1
+                    );
+            nvram_ims_profile_ptr->ua_config.ect_enable                     = 1;
+            nvram_ims_profile_ptr->ua_config.tty_enable                     = 1;
+            nvram_ims_profile_ptr->ua_config.set_rtcp_0                     = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0        = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt        = 1;
+            nvram_ims_profile_ptr->ua_config.text_feature_tag               = 1;
+            nvram_ims_profile_ptr->ua_config.restore_in_3gpp_abnormal       = 0;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage             = 8;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.register_expiry                = 3600;
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                   = 0;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1000;
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism    = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport         = 0;
+            nvram_ims_profile_ptr->ua_config.check_call_domain              = 1;
+            nvram_ims_profile_ptr->ua_config.rtt_tag_mode                   = 1;
+            nvram_ims_profile_ptr->ua_config.sit_tcp_2xx_rsp_retransmission = 0;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+            nvram_ims_profile_ptr->ua_config.confidence_level               = 90;
+            nvram_ims_profile_ptr->ua_config.emerg_reg_timer                = 2;  // workaround for eREG 403 issue
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ignore_sgn_qci_check          = 0x7; // 111
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable      = 1;
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer         = 10000;
+
+            break;
+        }
+        case 21: /* DISH */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0015;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.tty_enable                     = 1;  //DISH_v1.2_31402.11
+            nvram_ims_profile_ptr->ua_config.text_feature_tag               = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+            nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+            nvram_ims_profile_ptr->ua_config.br_begin                       = 0;        //32704.96 as A1
+            nvram_ims_profile_ptr->ua_config.br_end                         = 4;
+            nvram_ims_profile_ptr->ua_config.bw_end                         = 2;        //32704.96 as A1
+#endif /* __EVS_SUPPORT__ */
+            memset(&nvram_ims_profile_ptr->ua_config.emergency_call_testing_number[0],0,EMERGENCY_CALL_TESTING_NUMBER_MAX_LENGTH);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.emergency_call_testing_number,
+            "522,922", sizeof(nvram_ims_profile_ptr->ua_config.emergency_call_testing_number)-1);
+            nvram_ims_profile_ptr->ua_config.stir_shaken_for_privacy        = 1;
+            
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403               = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_http_digest             = 2;        //AKAv2_MD5
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 90;
+            nvram_ims_profile_ptr->ua_config.confidence_level               = 90;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 0;        //30808.12
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 0;        //30808.12
+            nvram_ims_profile_ptr->ua_config.send_refer_to_peer             = 1;
+            nvram_ims_profile_ptr->ua_config.rereg_in_rat_change            = 1;
+            nvram_ims_profile_ptr->ua_config.wfc_refresh_23g                = 1;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage             = 0x0E;     // PIDF_WFC_EMERG_ENABLE
+
+            /* IMCB */
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.allow_emergency_dereg  = 2;   // deactivate ECC PDN directly
+
+            break;
+        }
+        case 50: /* SoftBank */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code              = 0x0032; //operator_code = 50(SoftBank)
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer     = 4000;   // resource_retain_timer = 4000ms (4 seconds)
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule              = 0x14;      // 10100, relied on but not in call
+            nvram_ims_profile_ptr->imc_config.send_sip_dereg_at_23g     = 0;   // don't send sip dereg in 23G for SoftBank
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg   = 1;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            strncpy ( (char*)nvram_ims_profile_ptr->ua_config.user_agent,  
+                      "00", 
+                      sizeof (nvram_ims_profile_ptr->ua_config.user_agent)-1
+                    );
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.short_code_support         = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 2;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 330;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 600;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 0x00000708;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 10;         
+            nvram_ims_profile_ptr->ua_config.when_stop_tcall                    = 100;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                        = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                        = 2;
+            nvram_ims_profile_ptr->ua_config.bw_begin                           = 1;
+            nvram_ims_profile_ptr->ua_config.bw_recv_begin                      = 1;
+            nvram_ims_profile_ptr->ua_config.bw_send_begin                      = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.always_add_user_phone_in_conf_refer = 1;
+            /***********************Clone from DoCoMo ********************************/
+            nvram_ims_profile_ptr->ua_config.register_expiry            = 3600;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code   = 603;
+            nvram_ims_profile_ptr->ua_config.UA_call_no_resource_code   = 580;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MSS  = 1400;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo          = 0x03; //NULL+MD5, NULL+SHA1
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->imc_config.pcscf_reselect_flag           = 1;
+            nvram_ims_profile_ptr->imc_config.nr_recovery_support           = 1;
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.no_auto_retry_for_dcm_mo_call  = 1;
+            nvram_ims_profile_ptr->ua_config.pcscf_error_when663            = 1;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp    = 0;
+            nvram_ims_profile_ptr->ua_config.t311_expired_release_call      = 1;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.mo_retry_after_504             = 1;
+            nvram_ims_profile_ptr->ua_config.send_timerF_expiry             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.de_subscribe                   = 0;
+            nvram_ims_profile_ptr->ua_config.try_next_pcscf                 = 1;
+            nvram_ims_profile_ptr->ua_config.via_without_rport              = 1;
+            nvram_ims_profile_ptr->ua_config.reg_route_hdr                  = 1;
+            nvram_ims_profile_ptr->ua_config.via_uri_with_default_port      = 1;
+            nvram_ims_profile_ptr->ua_config.notify_sms_notify_done         = 1;
+            nvram_ims_profile_ptr->ua_config.emergency_use_imsi             = 1;
+            nvram_ims_profile_ptr->ua_config.retry_interval_after_403       = 240;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+            nvram_ims_profile_ptr->ua_config.norm_sits_trans_timer_in_proceeding = 330;
+            /***********************Clone from DoCoMo ********************************/
+            nvram_ims_profile_ptr->ua_config.emerg_reg_timer                = 10;
+            break;
+        }
+        case 100: /* CSL */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code           = 0x0064;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP = 1;
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                    = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer   = 0x00000708;  // UA_call_session_timer = 1800
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition    = 0;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference    = 2;      //v4_prefer
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg               = 1;
+
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,
+                      "0,1,2",
+                      sizeof (nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1
+                    );
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.terminal_based_cw                      = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                 = 1;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp    = 1;
+            nvram_ims_profile_ptr->ua_config.reject_1w_if_1A1H                      = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout             = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout            = 180;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout               = 20;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context        = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe         = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1             = 0;
+            nvram_ims_profile_ptr->imc_config.location_info_support                 = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                    = 1;
+            nvram_ims_profile_ptr->ua_config.geolocation_type                       = 2;
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none                = 0;
+            nvram_ims_profile_ptr->ua_config.video_offer_rtp_profile                = 0x01;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout          = 30;
+            nvram_ims_profile_ptr->ua_config.no_additional_invite_after_downgrade   = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout          = 30;
+            nvram_ims_profile_ptr->ua_config.access_network_info_type               = 4;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.de_subscribe                           = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port                 = 0;
+            break;
+        }
+        case 101: /* PCCW */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code           = 0x0065;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP = 1;
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                    = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer   = 0x00000708;  // UA_call_session_timer = 1800
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition    = 0;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference    = 2;      //v4_prefer
+
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,
+                      "0,1,2",
+                      sizeof (nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1
+                    );
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.terminal_based_cw                      = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                 = 1;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp    = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout             = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout            = 180;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout               = 20;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se                 = 180;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context        = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe         = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1             = 0;
+            nvram_ims_profile_ptr->imc_config.location_info_support                 = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                    = 1;
+            nvram_ims_profile_ptr->ua_config.geolocation_type                       = 2;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.de_subscribe                           = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port                 = 0;
+            break;
+        }
+        case 102: /* SMT */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                   = 0x0066;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition            = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer           = 0x00000708;  // UA_call_session_timer = 1800
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.terminal_based_cw              = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 180;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 20;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+            nvram_ims_profile_ptr->ua_config.delay_unhold_call              = 1;
+            nvram_ims_profile_ptr->imc_config.location_info_support         = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;
+            nvram_ims_profile_ptr->ua_config.geolocation_type               = 2;
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none        = 0;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage             = 0x0A;
+            nvram_ims_profile_ptr->ua_config.no_additional_invite_after_downgrade         = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status           = 0x04;
+            break;
+        }
+        case 103: /* SingTel */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code           = 0x0067;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition    = 0;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 4;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer   = 0x00000708;  // UA_call_session_timer = 1800
+            nvram_ims_profile_ptr->imc_config.nr_recovery_support    = 1;
+
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,
+                      "0,1,2",
+                      sizeof (nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1
+                    );
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 180;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 20;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport         = 0;
+            nvram_ims_profile_ptr->ua_config.sip_bye_retransmit_total_time  = 32000;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.dereg_sms_disconnect_stack     = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable      = 1;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count   = 0;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time           = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time            = 10000;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,28,16,0;N,27,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        case 104: /* StarHub */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code           = 0x0068;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_On_Demand = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer   = 0x00000708;  // UA_call_session_timer = 1800
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g = 2;
+            nvram_ims_profile_ptr->imc_config.nr_recovery_support    = 1;
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                 = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                         = 0;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp    = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout             = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout            = 180;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout               = 20;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1             = 0;
+            nvram_ims_profile_ptr->ua_config.enable_in_band_tone_in_hold            = 1;            
+            nvram_ims_profile_ptr->ua_config.ignore_380_emg_xml                     = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_regid                     = 1;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                           = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port                 = 0;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time                   = 10;         
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                    = 10000;      
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count           = 0;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg              = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport                 = 0;
+            nvram_ims_profile_ptr->ua_config.sip_bye_retransmit_total_time          = 32000;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.dereg_sms_disconnect_stack             = 0;
+            break;
+        }
+		case 105: /* Claro/Paraguay */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                         = 0x0069; 
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout             = 30;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout            = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant                = 0x1111;
+            nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size         = 1280;
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype                = 1;
+            
+            /* IMCB */
+            
+            break;
+        }
+        case 106: /* 3HK */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code           = 0x006A;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer   = 0x00000708;  // UA_call_session_timer = 1800
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.terminal_based_cw                      = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                 = 1;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp    = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout             = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout            = 180;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout               = 20;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1             = 0;
+            nvram_ims_profile_ptr->imc_config.location_info_support                 = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                    = 1;
+            nvram_ims_profile_ptr->ua_config.geolocation_type                       = 2;
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none                = 0;
+            nvram_ims_profile_ptr->ua_config.no_additional_invite_after_downgrade         = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call         = 0;
+
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.de_subscribe                           = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port                 = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.dedicated_fallback_support            = 1;
+            break;
+        }
+        case 107: /* SFR */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                          = 0x006B; //operator_code = 107(SFR)
+
+            nvram_ims_profile_ptr->imc_config.location_info_support                 = 1;
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery                 = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer                  = 0x00000384;  // UA_call_session_timer = 900
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se                 = 90;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                 = 1;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp    = 0;
+            nvram_ims_profile_ptr->ua_config.check_conference_subscribe             = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe         = 1;
+            nvram_ims_profile_ptr->ua_config.set_rtcp_0                             = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout             = 45;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout            = 45;
+            nvram_ims_profile_ptr->ua_config.set_des_strength_optional              = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call         = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1             = 0;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                   = 0x02; // force_srvcc_transfer = conference call
+            nvram_ims_profile_ptr->ua_config.sip_dscp                               = 0x2E; // Expedited Forwarding
+            nvram_ims_profile_ptr->ua_config.audio_dscp                             = 0x2E; // Expedited Forwarding
+            nvram_ims_profile_ptr->ua_config.omit_err_rsp_for_prack                 = 0;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite    = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec                  = 0;
+
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_conf_amr_wb_mode_set[0],0,20);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_conf_amr_wb_mode_set,
+                      "0,1,2",
+                      sizeof (nvram_ims_profile_ptr->ua_config.UA_call_conf_amr_wb_mode_set)-1
+                    );
+
+
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage = 0x4A; // PIDF_WFC_EMERG_ENABLE, PIDF_VOLTE_EMERG_ENABLE and PIDF_WFC_LOC_NUM_SET_ENABLE
+            memset(&nvram_ims_profile_ptr->ua_config.required_loc_info_num_set[0],0,128);
+            strncpy ( (char *)nvram_ims_profile_ptr->ua_config.required_loc_info_num_set,
+            "15,17,18,114,115,119,196,197,116000",
+            sizeof (nvram_ims_profile_ptr->ua_config.required_loc_info_num_set)-1
+            );
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_On_Demand        = 0;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size         = 1100;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                           = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port                 = 0;
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                        = 0x01;  // Add CNI to all operations.
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg              = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support              = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //SFR: "N,33,18,0;N,27,18,0;N,*,0,1;E,*,0,1;"
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,18,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        case 108: /* TWN */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code = 0x006C; //operator_code = 108(TWN)
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer   = 0x00000708;  // UA_call_session_timer = 1800
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status           = 2;
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 1;
+            nvram_ims_profile_ptr->ua_config.refer_delay_timer              = 100;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport = 0;
+            nvram_ims_profile_ptr->ua_config.contact_with_regid     = 1;
+            nvram_ims_profile_ptr->ua_config.register_expiry        = 3600;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable      = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //TWN: "N,33,16,0;N,*,0,1;E,*,0,1;"
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        case 109: /* CHT */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code = 0x006D; //operator_code = 109(CHT)
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference      = 2;      //v4_prefer
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn    = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403          = 0;
+            nvram_ims_profile_ptr->ua_config.set_rtcp_0                           = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context      = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 120;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp  = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align = 0;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3 = 1;
+            nvram_ims_profile_ptr->ua_config.evs_support = 1;
+            nvram_ims_profile_ptr->ua_config.br_begin = 3;
+            nvram_ims_profile_ptr->ua_config.br_end = 5;
+            nvram_ims_profile_ptr->ua_config.bw_begin = 2;
+            nvram_ims_profile_ptr->ua_config.bw_end = 2;
+#endif /* __EVS_SUPPORT__ */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.register_expiry                = 7200;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support               = 0;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable      = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                      "0,2,6,1,3,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                      "0,2,6,1,3,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                    );
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi = 1;
+
+            break;
+        }
+        case 110: /* FET */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                          = 0x006E; //operator_code = 110(FET)
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn                 = 1;
+            nvram_ims_profile_ptr->imc_config.send_sip_dereg_at_23g                 = 0;   // don't send sip dereg in 23G for FET
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                 = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                         = 0;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp    = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call         = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer                  = 0x0000EA60; // UA_call_session_timer = 60000
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout             = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout            = 180;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                    = 3;        // Add country in WFC and VOLTE MESSAGE/REG/INVITE
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port                 = 0;
+            nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi                     = 1;
+            nvram_ims_profile_ptr->ua_config.wfc_with_plani                         = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable              = 1;
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+
+            break;
+        }
+        case 111: /* Vodafone/India */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                          = 0x006F; //operator_code = 111(VDF India)
+            nvram_ims_profile_ptr->imc_config.ussd_support                          = 1;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg               = 1;
+            nvram_ims_profile_ptr->imc_config.location_info_support                 = 1;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                          = 0x01;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout             = 60;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout            = 60;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                         = 0;
+            nvram_ims_profile_ptr->ua_config.terminal_based_cw                      = 0;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403            = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call         = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1             = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                 = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming            = 1;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable         = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp                = 1;
+            nvram_ims_profile_ptr->ua_config.support_ringing_downgrade              = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode             = 1;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature                 = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout          = 30;
+            nvram_ims_profile_ptr->ua_config.call_invite_no_rsp_ran_prio_req_timer_timeout = 3;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                            = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                   = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                   = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                   = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.delay_ecpi2_at_183                     = 1;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout   = 5;
+            nvram_ims_profile_ptr->ua_config.hide_vattr_when_port_zero              = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size         = 1300;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                        = 20000;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                           = 0;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg              = 1;
+            nvram_ims_profile_ptr->ua_config.geolocation_type                       = 2;
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                        = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                    = 1;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            nvram_ims_profile_ptr->imc_config.dedicated_fallback_support        = 1;
+
+            break;
+        }
+        case 112: /* Telcel */
+        {
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Mexico */
+                if (strncmp((char *)&mccmnc[0], "334", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0070;   //operator_code = 112 (American Movil (Telcel) Mexico)
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /*IMC*/
+                    nvram_ims_profile_ptr->imc_config.open_volte_cc                 = 1;
+                    nvram_ims_profile_ptr->imc_config.location_info_support         = 1;
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call = 1;
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                  = 0x01;
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 90;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+                    nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi             = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer           = 0; // disabled for hold, conference and alerting call types
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant        = 0x1111;                   
+                    nvram_ims_profile_ptr->ua_config.call_tcw_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.sub_def_expires                = 259200;
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+                    nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled     = 1;
+
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                         = 6;
+                    nvram_ims_profile_ptr->ua_config.bw_end                         = 2;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                     = 0;
+                #endif /* __EVS_SUPPORT__ */
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.reg_disable_pidf               = 0;
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support               = 0;
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani       = 1;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                = 3600;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype        = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                    nvram_ims_profile_ptr->ua_config.access_network_info_type       = 4;
+                    /* IMCB */
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //Telcel Mexico: "N,33,18,0;N,29,18,0;N,*,0,1;E,*,0,1;"
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,18,0;N,29,18,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                }
+            }
+            break;
+        }
+        case 113: /* Beeline */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                   = 0x0071; //operator_code = 113(Beeline)
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                   = 0x18;      // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.ussd_support                   = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se         = 90;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_resp      = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 20;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer           = 0x0F;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.send_bye_if_error_resp_in_hold_unhold = 0; // Don't send BYE if error resp received in hold/unhold re-INVITE.
+            #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                         = 6;
+            nvram_ims_profile_ptr->ua_config.bw_end                         = 2;
+            #endif
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                   = 0;
+            nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi             = 1;
+
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support               = 0;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani       = 1;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                = 0x01;  // Add CNI to all operations.
+            nvram_ims_profile_ptr->ua_config.add_cell_info_age_to_cni       = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403               = 1;
+            nvram_ims_profile_ptr->ua_config.keep_alive_mode                = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+            nvram_ims_profile_ptr->imc_config.default_fallback_support      = 1;
+
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            if (with_imsi_info) {
+            /* Kazakhstan */
+                if (strncmp((char *)&mccmnc[0], "401", 1) == 0) {
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                 = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout            = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout             = 120;
+                }
+            }    
+            break;
+        }
+        case 114: /* Korea Telecom(KT) */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                   = 0x0072; //operator_code = 114(Korea Telecom)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant         = 0x1111;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_oct_pt              = 101;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                  = 100;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_oct_pt           = 98;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt               = 97;
+            nvram_ims_profile_ptr->ua_config.UA_call_def_max_ptime           = 120;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition            = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code        = 603;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se          = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer           = 360;
+            nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt           = 99;
+            nvram_ims_profile_ptr->ua_config.UA_reg_a_timer                  = 1000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_e_timer                  = 2000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_i_timer                  = 17000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_k_timer                  = 17000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_retry_base_time          = 30;
+            nvram_ims_profile_ptr->ua_config.UA_reg_retry_max_time           = 1800;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call  = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous             = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall        = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 180;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout        = 8;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming     = 1;
+            nvram_ims_profile_ptr->ua_config.ecall_get_puid_from_normal_ims_reg= 1;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range       = 16383;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start       = 49152;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req        = 1;
+            memset(&nvram_ims_profile_ptr->ua_config.user_agent[0],0,128);
+            strncpy ( (char *)nvram_ims_profile_ptr->ua_config.user_agent,
+                      "TTA-VoLTE/2.0 SHV-E330L/KMR1R140207 Device_Type/Android_Phone KT",
+                      sizeof (nvram_ims_profile_ptr->ua_config.user_agent)-1
+                    );
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none         = 0;
+            nvram_ims_profile_ptr->ua_config.enable_in_band_tone_in_hold     = 0;
+            nvram_ims_profile_ptr->ua_config.always_fetch_1st_entry_in_hisInfo = 1;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1              = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2              = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3              = 1;
+            nvram_ims_profile_ptr->ua_config.evs_support                       = 1;
+        #endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable    = 0;
+            nvram_ims_profile_ptr->imc_config.nr_recovery_support           = 1;
+            
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                  = 8000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_c_timer                  = 72000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_d_timer                  = 32000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_f_timer                  = 16000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_h_timer                  = 36000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo               = 0x20;
+            nvram_ims_profile_ptr->ua_config.UA_reg_j_timer                  = 32000;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP = 1;
+            nvram_ims_profile_ptr->ua_config.authorization_with_algo         = 1;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                    = 0;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                = 1;
+            nvram_ims_profile_ptr->ua_config.reg_after_nw_dereg_60s          = 1;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                = 0;
+            nvram_ims_profile_ptr->ua_config.reg_route_hdr                   = 1;
+            nvram_ims_profile_ptr->ua_config.via_uri_with_default_port       = 1;
+            nvram_ims_profile_ptr->ua_config.via_without_rport               = 1;
+            nvram_ims_profile_ptr->ua_config.pcscf_port_number               = 5080;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg       = 1;
+            nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_ptime          = 0;
+            nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_fmtp           = 1;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable             = 0;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport          = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;          
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;         
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;      
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+            nvram_ims_profile_ptr->imc_config.ecc_use_normal_pcscf              = 1;  
+            nvram_ims_profile_ptr->ua_config.ipv6_zero_compression                = 1;
+
+            /*IMC*/
+            nvram_ims_profile_ptr->imc_config.allow_emergency_dereg         = 2;      // RMSC00027725(TTA_VoLTE_8_2000), deactivate emergency PDN directly
+            break;
+        }
+        case 115: /* SK Telecom(STK) */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                   = 0x0073; //operator_code = 114(SK Telecom)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant         = 0x0101;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_oct_pt              = 97;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                  = 98;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_oct_pt           = 99;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt               = 100;
+            nvram_ims_profile_ptr->ua_config.UA_call_def_max_ptime           = 120;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition            = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code        = 603;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se          = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer           = 1800;
+            nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt           = 103;
+            nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt              = 101;
+            nvram_ims_profile_ptr->ua_config.UA_reg_a_timer                  = 2000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_e_timer                  = 2000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_i_timer                  = 17000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_k_timer                  = 17000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_retry_base_time          = 30;
+            nvram_ims_profile_ptr->ua_config.UA_reg_retry_max_time           = 1800;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous             = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call  = 0;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall        = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 180;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout        = 20;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming     = 1;
+            nvram_ims_profile_ptr->ua_config.ecall_get_puid_from_normal_ims_reg= 1;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range       = 50000;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start       = 7010;
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none         = 0;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req        = 1;
+            nvram_ims_profile_ptr->ua_config.sms_network_types               = 0x00;
+            memset(&nvram_ims_profile_ptr->ua_config.user_agent[0],0,128);
+            strncpy ( (char *)nvram_ims_profile_ptr->ua_config.user_agent,
+                      "TTA-VoLTE/2.0 SHV-E330L/KMR1R140207 Device_Type/Android_Phone SKT",
+                      sizeof (nvram_ims_profile_ptr->ua_config.user_agent)-1
+                    );
+            nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_ptime            = 0;
+            nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_fmtp            = 1;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable            = 0;
+            nvram_ims_profile_ptr->ua_config.omit_sip_instance_in_contact    = 0x03;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport            = 0;
+            nvram_ims_profile_ptr->ua_config.enable_in_band_tone_in_hold     = 0;
+            nvram_ims_profile_ptr->ua_config.always_fetch_1st_entry_in_hisInfo = 1;
+            nvram_ims_profile_ptr->ua_config.show_octet_align               = 0;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable    = 0;
+            
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                  = 44000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_c_timer                  = 72000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_d_timer                  = 32000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_f_timer                  = 44000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_h_timer                  = 36000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo               = 0x20;
+            nvram_ims_profile_ptr->ua_config.UA_reg_j_timer                  = 32000;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP = 1;
+            nvram_ims_profile_ptr->ua_config.authorization_with_algo         = 1;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                    = 0;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                = 1;
+            nvram_ims_profile_ptr->ua_config.reg_after_nw_dereg_60s          = 1;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                = 0;
+            nvram_ims_profile_ptr->ua_config.reg_route_hdr                   = 1;
+            nvram_ims_profile_ptr->ua_config.via_uri_with_default_port       = 1;
+            nvram_ims_profile_ptr->ua_config.via_without_rport               = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg       = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;          
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;         
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;      
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+            nvram_ims_profile_ptr->imc_config.ecc_use_normal_pcscf              = 1;
+
+            /*IMC*/
+            nvram_ims_profile_ptr->imc_config.allow_emergency_dereg         = 2;      // RMSC00027725(TTA_VoLTE_8_2000), deactivate emergency PDN directly
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_watchdog_timer   = 30;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status           = 4;
+            break;
+        }
+        case 116: /* LGuplus_Korea */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                   = 0x0074; //operator_code = 116(LGuplus_Korea)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant         = 0x0101;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_oct_pt              = 96;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                  = 96;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_oct_pt           = 100;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt               = 100;
+            nvram_ims_profile_ptr->ua_config.UA_call_def_max_ptime           = 120;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition            = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code        = 603;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se          = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer           = 3600;
+            nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt           = 107;
+            nvram_ims_profile_ptr->ua_config.UA_reg_a_timer                  = 2000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_e_timer                  = 2000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_i_timer                  = 9000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_k_timer                  = 9000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_retry_base_time          = 30;
+            nvram_ims_profile_ptr->ua_config.UA_reg_retry_max_time           = 1800;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call  = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous             = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall        = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 180;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout        = 32;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming     = 1;
+            nvram_ims_profile_ptr->ua_config.ecall_get_puid_from_normal_ims_reg= 1;
+            nvram_ims_profile_ptr->ua_config.nsn_specific                    = 1;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range       = 24;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start       = 1230;
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none         = 0;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req        = 1;
+            memset(&nvram_ims_profile_ptr->ua_config.user_agent[0],0,128);
+            strncpy ( (char *)nvram_ims_profile_ptr->ua_config.user_agent,
+                      "TTA-VoLTE/2.0 SHV-E330L/KMR1R140207 Device_Type/Android_Phone LGU",
+                      sizeof (nvram_ims_profile_ptr->ua_config.user_agent)-1
+                    );
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1            = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2            = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3            = 1;
+            nvram_ims_profile_ptr->ua_config.evs_support                     = 1;
+        #endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.enable_in_band_tone_in_hold     = 0;
+            nvram_ims_profile_ptr->ua_config.always_fetch_1st_entry_in_hisInfo = 1;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable    = 1;
+            
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                  = 32000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_c_timer                  = 120000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_f_timer                  = 16000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_h_timer                  = 32000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo               = 0x20;
+            nvram_ims_profile_ptr->ua_config.UA_reg_j_timer                  = 128000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                 = 9000;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP = 1;
+            nvram_ims_profile_ptr->ua_config.authorization_with_algo         = 1;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                    = 0;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                = 1;
+            nvram_ims_profile_ptr->ua_config.reg_after_nw_dereg_60s          = 1;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                = 0;
+            nvram_ims_profile_ptr->ua_config.reg_route_hdr                   = 1;
+            nvram_ims_profile_ptr->ua_config.via_uri_with_default_port       = 1;
+            nvram_ims_profile_ptr->ua_config.via_without_rport               = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg       = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;          
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;         
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;      
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+            nvram_ims_profile_ptr->imc_config.ecc_use_normal_pcscf              = 1;
+
+            /*IMC*/
+            nvram_ims_profile_ptr->imc_config.allow_emergency_dereg         = 2;      // RMSC00027725(TTA_VoLTE_8_2000), deactivate emergency PDN directly
+            set_psismsc_by_imsi(&nvram_ims_profile_ptr->imc_config.default_psismsc[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            break;
+        }
+        case 117: /* Smartfren */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0075; //operator_code = 117(Smartfren)
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1240;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition           = 0;      //disable precondition
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference           = 2;      //v4_prefer
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer         = 10*1000;  // resource_retain_timer
+            nvram_ims_profile_ptr->imc_config.ussd_support                  = 1;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                  = 0x12; // 10010
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout             = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout            = 90;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context        = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                 = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                         = 0;
+            nvram_ims_profile_ptr->ua_config.terminal_based_cw                      = 0;
+            nvram_ims_profile_ptr->ua_config.try_next_pcscf_5626                    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                      = 0x3C;
+            nvram_ims_profile_ptr->ua_config.audio_dscp                             = 0x2E;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer                  = 1800;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se                 = 90;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call         = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1             = 0;
+            nvram_ims_profile_ptr->ua_config.try_next_pcscf                         = 1;
+            nvram_ims_profile_ptr->ua_config.reg_try_all_pcscf_5626                 = 1;
+            nvram_ims_profile_ptr->ua_config.wait_second_invite_for_hold            = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout          = 20;
+            nvram_ims_profile_ptr->ua_config.rel_conf_if_no_participant             = 1;
+            nvram_ims_profile_ptr->ua_config.disable_conf_call_prcd                 = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode             = 1;
+            nvram_ims_profile_ptr->ua_config.enable_in_band_tone_in_hold            = 0;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout               = 20;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout   = 5;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.call_sdp_ans_ack_timeout               = 10;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port                 = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support              = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                      "0,2,6,1,3,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                      "0,2,6,1,3,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                    );
+            break;
+        }
+        case 118: /* YTL */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code             = 0x0076; //operator_code = 118(YTL)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server              = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                      = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout          = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp = 0;
+            nvram_ims_profile_ptr->ua_config.terminal_based_cw                   = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context     = 0;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable                = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server              = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call      = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1          = 0;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming         = 1;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable      = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout       = 30;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature              = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode          = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe      = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                 = 3;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                  = 0x0A;
+            nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi                  = 1;
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                     = 0x01;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.register_expiry                     = 3600;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                   = 3;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port              = 0;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+
+            break;
+        }
+        case 119: /* Natcom */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0077; //operator_code = 119(Natcom)
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                = 5000;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1500;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference           = 2;      //v4_prefer
+            nvram_ims_profile_ptr->ua_config.register_expiry                = 1800;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 30;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 30;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp= 0;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+            nvram_ims_profile_ptr->ua_config.short_code_support                 = 1;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x0001; // enable SRVCC
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+
+            break;
+        }
+        case 120: /* Claro */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0078;   //operator_code = 120(Claro)
+            nvram_ims_profile_ptr->imc_config.ussd_support                  = 1;
+            nvram_ims_profile_ptr->ua_config.register_expiry                = 3600;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1080;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference           = 2;        //v4_prefer
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer         = 20*1000;  //resource_retain_timer = 20 000ms (20 seconds)
+            nvram_ims_profile_ptr->imc_config.emergency_pdn_retain_timer    = 300*1000; //emergency_pdn_retain_timer = 300 000ms (300 seconds)
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                = 5000;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context        = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout             = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout            = 90;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                 = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe         = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                         = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call         = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1             = 0;
+            
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                       = 0;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                      "0,2,3,5,6,1,4,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                      "0,2,3,5,6,1,4,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                    );
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Dominican */
+                if (strncmp((char *)&mccmnc[0], "370", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0078;     //operator_code = 120(Claro)
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x01;
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;         
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;          
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;          
+                    nvram_ims_profile_ptr->ua_config.sub_def_expires                    = 259200;                    
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size    = 1080;       
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;          
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;          
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype            = 1;          
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;          
+                    nvram_ims_profile_ptr->ua_config.pidf_country                       = 1;          
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;          
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;       
+
+                    /* IMCB */         
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;         
+
+                    /* IMC */        
+                    nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+                    nvram_ims_profile_ptr->imc_config.emergency_call_category_mapping   = 1;
+                    nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg           = 1;                    
+                }
+                /* Guatemala */
+                else if (strncmp((char *)&mccmnc[0], "704", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0078;     //operator_code = 120(Claro)
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 30;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 30;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 25;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0x03;
+                    nvram_ims_profile_ptr->ua_config.sub_def_expires                    = 259200;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set[0],0,16);
+                    strncpy ( (char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set,
+                              "0,2,4,7",
+                              sizeof (nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set)-1
+                            );
+                    memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+                    strncpy ( (char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,
+                              "0,1,2",
+                              sizeof (nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1
+                            );
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1080;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype            = 1;
+                    nvram_ims_profile_ptr->ua_config.pidf_country                       = 1;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;
+                }
+                else if (/* Panama */
+                    (strncmp((char *)&mccmnc[0], "714", 3) == 0)||
+                    /* Nicaragua */
+                    (strncmp((char *)&mccmnc[0], "710", 3) == 0)||
+                    /* Honduras */
+                    (strncmp((char *)&mccmnc[0], "708", 3) == 0)||
+                    /* EI Salvador */
+                    (strncmp((char *)&mccmnc[0], "706", 3) == 0)||
+                    /* Costa Rica */
+                    (strncmp((char *)&mccmnc[0], "712", 3) == 0)) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0078;     //operator_code = 120(Claro)
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 30;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 30;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 25;                     
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;          
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;                    
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0x03;
+                    nvram_ims_profile_ptr->ua_config.sub_def_expires                    = 259200;
+                    memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set[0],0,16);
+                    strncpy ( (char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set,
+                              "0,2,4,7",
+                              sizeof (nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set)-1
+                            );
+                    memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+                    strncpy ( (char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,
+                              "0,1,2",
+                              sizeof (nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1
+                            );
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1080;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype            = 1;
+                    nvram_ims_profile_ptr->ua_config.pidf_country                       = 1;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+                    nvram_ims_profile_ptr->imc_config.wait_for_sgn_timer                = 86400;
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;
+                }
+                /* PERU */
+                else if (strncmp((char *)&mccmnc[0], "716", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0078;   //operator_code = 120(Claro)
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                  = 0x01;
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 90;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 25;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+                    nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none        = 0;
+                    nvram_ims_profile_ptr->ua_config.prefer_original_codec          = 0;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;
+                    nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi             = 2;
+                    nvram_ims_profile_ptr->ua_config.sub_def_expires                = 259200;
+                    nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context= 0;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support               = 0;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1080;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype        = 1;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time           = 10;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_max_time            = 10000;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count   = 0;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                = 3600;
+                }
+                /* Brazil */
+                else if (strncmp((char *)&mccmnc[0], "724", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0078;   //operator_code = 120(Claro)
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1280;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se         = 90;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer          = 1800;
+                    nvram_ims_profile_ptr->imc_config.location_info_support         = 1;
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                  = 0x01;
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 90;
+                    nvram_ims_profile_ptr->ua_config.wfc_emerg_pidf_country         = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_req       = 1;
+                    nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall       = 1;
+                    nvram_ims_profile_ptr->ua_config.dereg_send_bye                 = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;
+                    nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                = 0x01;  // Add CNI to all operations. 
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable           = 0x000F; // enable SRVCC, aSRVCC, midSRVCC, bSRVCC
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+                    nvram_ims_profile_ptr->ua_config.sub_def_expires                = 259200;
+                    nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage             = 0x0E;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.pidf_country                   = 1;
+                    nvram_ims_profile_ptr->ua_config.de_subscribe                   = 0;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype        = 1;
+                    nvram_ims_profile_ptr->ua_config.contact_with_expires           = 1;
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support               = 0;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MSS      = 1300;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                = 3600;
+                    nvram_ims_profile_ptr->ua_config.rereg_in_oos_end               = 1;
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.ignore_sgn_qci_check          = 0x7; // 111
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,17,16,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time           = 10;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_max_time            = 10000;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count   = 0;
+                    nvram_ims_profile_ptr->imc_config.enable_ddd_feature            = 1;
+                }
+                /* Argentina */
+                else if (strncmp((char *)&mccmnc[0], "722", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0078;   //operator_code = 120(Claro)
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1280;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer          = 1800;
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                  = 0x01;
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 90;
+                    nvram_ims_profile_ptr->ua_config.wfc_emerg_pidf_country         = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable           = 0x000F; // enable SRVCC, aSRVCC, midSRVCC, bSRVCC
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference           = 2;    //v4_prefer
+                    nvram_ims_profile_ptr->imc_config.location_info_support         = 1;   //lbs location info service: on
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MSS      = 1500;
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support               = 0;
+                    memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set[0],0,16);
+                    memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+                    strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,
+                    "0,1,2", sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1);
+                    strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set,
+                    "0,2,4,7", sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set)-1);
+                    nvram_ims_profile_ptr->ua_config.check_contact_380              = 1;
+                    nvram_ims_profile_ptr->ua_config.audio_dscp                     = 0x2E;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+                    nvram_ims_profile_ptr->imc_config.default_fallback_support      = 1;
+                    nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+                    nvram_ims_profile_ptr->ua_config.sub_def_expires                     = 259200;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.pidf_country                   = 1;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time           = 10;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype        = 1;
+                }
+                /* Colombia */
+                else if (strncmp((char *)&mccmnc[0], "732", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0078;   //operator_code = 120(Claro)
+                    nvram_ims_profile_ptr->imc_config.location_info_support         = 1;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1080;
+                    nvram_ims_profile_ptr->imc_config.resource_retain_timer         = 20*1000;  //resource_retain_timer = 20 000ms (20 seconds)
+                    nvram_ims_profile_ptr->imc_config.emergency_pdn_retain_timer    = 300*1000; //emergency_pdn_retain_timer = 300 000ms (300 seconds)
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                  = 0x01;
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    nvram_ims_profile_ptr->imc_config.ignore_media_qos_check                = 0xfff;
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context        = 0;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout             = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout            = 90;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                 = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe         = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                         = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call         = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1             = 0;
+                    nvram_ims_profile_ptr->ua_config.check_contact_380                      = 1;
+                    nvram_ims_profile_ptr->ua_config.sub_def_expires                        = 259200;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant                = 0x1111;
+                    nvram_ims_profile_ptr->ua_config.show_octet_align                       = 0;
+                    nvram_ims_profile_ptr->ua_config.block_refer_sending_if_max_num_of_participants = 1;
+                    nvram_ims_profile_ptr->ua_config.use_local_conf_participant_list_in_srvcc = 1;
+                    nvram_ims_profile_ptr->ua_config.in_reply_to_support                    = 0;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                       = 0;
+                    nvram_ims_profile_ptr->ua_config.de_subscribe                           = 0;
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call      = 1;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype                = 1;
+                    nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                        = 0x01;  // Add CNI to all operations.
+                    nvram_ims_profile_ptr->ua_config.register_expiry                        = 3600;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                    = 1;
+
+                    /* IMCB */
+                    memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                              "0,2,3,5,6,1,4,0",
+                              sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                            );
+                    memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                              "0,2,3,5,6,1,4,0",
+                              sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                            );
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time                   = 10;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                    = 10000;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count           = 0;
+                }
+                /* Chile */
+                else if (strncmp((char *)&mccmnc[0], "730", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0078;   //operator_code = 120(Claro)
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference           = 2;
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer          = 1800;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 90;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                = 3600;
+                    nvram_ims_profile_ptr->ua_config.sub_def_expires                = 259200;
+                    /* Reg/Stack */
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time           = 10;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_max_time            = 10000;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count   = 0;
+                }
+                /* Ecuador */
+                else if (strncmp((char *)&mccmnc[0], "740", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0078;     //operator_code = 120(Claro)
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x01;
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.sub_def_expires                    = 259200;     
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_begin                           = 3;
+                    nvram_ims_profile_ptr->ua_config.br_send_begin                      = 3;
+                    nvram_ims_profile_ptr->ua_config.br_recv_begin                      = 3;
+                #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype            = 1;
+                    nvram_ims_profile_ptr->ua_config.pidf_country                       = 1;
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+
+                    /* IMCB */
+
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.allow_emergency_dereg             = 2;                  
+                    nvram_ims_profile_ptr->imc_config.location_info_support             = 1;          
+                }
+                /* Uruguay */
+                else if (strncmp((char *)&mccmnc[0], "748", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0078;     //operator_code = 120(Claro)
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x01;
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;         
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F;     
+                    nvram_ims_profile_ptr->ua_config.sub_def_expires                    = 259200;     
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;          
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;          
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;          
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;       
+
+                    /* IMCB */        
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;         
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;               
+
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.location_info_support             = 1;          
+                }
+            }
+            break;
+        }
+        case 121: /*BELL*/
+        {
+                nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0079; //operator_code = 121 (BELL)
+                nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+                set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                strncpy ( (char*)nvram_ims_profile_ptr->imc_config.default_psismsc,
+                       "sip:+14382762000@ims.bell.ca",
+                        sizeof (nvram_ims_profile_ptr->imc_config.default_psismsc)-1
+                        );
+				nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn            = 1;
+
+                /*REG/Stack*/
+                nvram_ims_profile_ptr->ua_config.follow_nw_ims_vops_support         = 1;
+                nvram_ims_profile_ptr->ua_config.UA_net_ipsec                       = 0;
+                nvram_ims_profile_ptr->imc_config.poweroff_ims_dereg_timer          = 6;
+                nvram_ims_profile_ptr->ua_config.reject_rcs_request                 = 488;
+                strncpy((char*)nvram_ims_profile_ptr->ua_config.user_agent,
+                    "MTK Internal_Phone_1 v1.0",
+                    sizeof (nvram_ims_profile_ptr->ua_config.user_agent)-1
+                        );
+                nvram_ims_profile_ptr->ua_config.support_combine_retry_algo         = 1;
+                nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+                nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+                /* IMCB  IMC*/
+                nvram_ims_profile_ptr->imc_config.ims_video_qci                     = 255;
+                nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 8;
+                nvram_ims_profile_ptr->imc_config.allow_emergency_dereg             = 2;
+                nvram_ims_profile_ptr->ua_config.br_send_begin                      = 3;
+                nvram_ims_profile_ptr->ua_config.br_recv_begin                      = 3;
+                nvram_ims_profile_ptr->imc_config.impu_change_dereg                 = 1;
+                /*Call*/
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                nvram_ims_profile_ptr->ua_config.session_refresher_in_req           = 1;
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+                memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+                strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,
+                    "0,1,2",
+                    sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1);
+
+            #ifdef __EVS_SUPPORT__
+                nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                nvram_ims_profile_ptr->ua_config.br_begin                           = 4;
+                nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                nvram_ims_profile_ptr->ua_config.br_send_begin                      = 4;
+                nvram_ims_profile_ptr->ua_config.br_recv_begin                      = 4;
+            #endif /* __EVS_SUPPORT__ */
+                nvram_ims_profile_ptr->imc_config.not_decouple_dereg_and_pdn_deact  = 1;
+                nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+                nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                nvram_ims_profile_ptr->ua_config.hide_vattr_when_port_zero          = 1;
+                nvram_ims_profile_ptr->ua_config.enable_in_band_tone_in_hold        = 0;
+                nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant            = 0x1111; // Bell v190
+                break;
+        }
+        case 122: /* AIS */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code             = 0x007A; //operator_code = 122(AIS)
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1280;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status           = 1; // ALWAYS
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server      = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye              = 0;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server  = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout  = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout = 120;
+            nvram_ims_profile_ptr->ua_config.use_org_sdp_for_invite_without_sdp = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani         = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+            nvram_ims_profile_ptr->ua_config.delay_unhold_call              = 1;
+            nvram_ims_profile_ptr->ua_config.use_org_nego_codec             = 1;
+            nvram_ims_profile_ptr->ua_config.hide_vattr_when_port_zero      = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 15;
+            nvram_ims_profile_ptr->imc_config.nr_recovery_support           = 1;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature         = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout  = 10;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 10;
+            nvram_ims_profile_ptr->imc_config.ussd_support                  = 1;
+            nvram_ims_profile_ptr->ua_config.support_early_upgrade          = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                   = 0;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403               = 1;
+            nvram_ims_profile_ptr->ua_config.try_next_pcscf_5626_403        = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support      = 1;
+            nvram_ims_profile_ptr->imc_config.location_info_support      = 1;   //lbs location info service: on
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //Ais: "N,33,16,0;N,*,0,1;E,*,0,1;"
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        case 124: /* APTG */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code            = 0x007C; //operator_code = 124(APTG)
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1230;
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer    = 10*1000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer           = 0x000001F4;  //UA_reg_t1_timer = 500
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer           = 0x00000FA0;  //UA_reg_t2_timer = 4000
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer           = 0x00001388;  //UA_reg_t2_timer = 5000
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition      = 0;      //disable precondition
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec              = 0;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference      = 2;      //v4_prefer
+            strncpy((char*)nvram_ims_profile_ptr->ua_config.user_agent,
+                      "MTK IMS v1.0.1",
+                      sizeof (nvram_ims_profile_ptr->ua_config.user_agent)-1
+                    );
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none            = 0;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 60;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt                  = 104;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.use_org_sdp_for_invite_without_sdp = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.support_early_upgrade              = 1;
+            nvram_ims_profile_ptr->ua_config.in_reply_to_support                = 0;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x4E;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable      = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //APTG: "N,33,16,0;N,*,0,1;E,*,0,1;"
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        case 125: /* DTAC */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                    = 0x007D; //operator_code = 125(DTAC)
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                  = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                  = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                  = 5000;
+            nvram_ims_profile_ptr->ua_config.register_expiry                  = 3600;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.deactivate_video_when_early_media_off = 1;
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 180;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server          = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call  = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1      = 0;
+            nvram_ims_profile_ptr->ua_config.auto_unhold_when_rcv_recvonly   = 1;
+            nvram_ims_profile_ptr->ua_config.support_video_early_media       = 1;
+            nvram_ims_profile_ptr->ua_config.need_revise_rtp_dir             = 1;
+            nvram_ims_profile_ptr->ua_config.always_fetch_1st_entry_in_hisInfo  = 1;
+            nvram_ims_profile_ptr->ua_config.curr_loc_dir_none_for_wifi      = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.support_resub                   = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port          = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp                = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp                = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                      "0,2,3,6,1,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                      "0,2,3,6,1,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //DTAC: "N,33,18,0;N,*,0,1;E,*,0,1;"
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        case 126: /* Turkey Avea */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code              = 0x007E; //operator_code = 126(Turkey Avea)
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo          = 0x03; //NULL+MD5, NULL+SHA1
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer      = 900;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se     = 90;
+            nvram_ims_profile_ptr->ua_config.register_expiry            = 3600;
+            nvram_ims_profile_ptr->imc_config.location_info_support     = 1;        //lbs location info service: on
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 120;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                 = 118;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt              = 116;
+            nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt             = 110;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+            nvram_ims_profile_ptr->ua_config.auto_unhold_when_rcv_recvonly  = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                = 0x01;  // Add CNI to all operations.
+            nvram_ims_profile_ptr->ua_config.add_cell_info_age_to_cni       = 1;
+            nvram_ims_profile_ptr->ua_config.wfc_emerg_pidf_country         = 1;
+            nvram_ims_profile_ptr->ua_config.pidf_country                   = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage             = 0x00; // PIDF_ALL_CALLS_ENABLE
+            nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled     = 1;
+            nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_ptime         = 0;
+            nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_fmtp          = 1;
+            nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi             = 2;
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none        = 0;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 20;
+            nvram_ims_profile_ptr->ua_config.call_sdp_ans_ack_timeout       = 10;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                         = 6;
+            nvram_ims_profile_ptr->ua_config.bw_end                         = 2;
+        #endif /* __EVS_SUPPORT__ */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail            = 0;
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed             = 0;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                   = 0;
+            nvram_ims_profile_ptr->ua_config.rereg_in_oos_end               = 1;
+            nvram_ims_profile_ptr->ua_config.support_resub                  = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MSS      = 1400;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support      = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                      "0,2,6,3,1,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                      "0,2,6,3,1,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time           = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time            = 10000;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable      = 1;
+            break;
+        }
+        case 127: /* MEGAFON */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x007F; //operator_code = 127(MEGAFON Russia)
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                       = 0;
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 5*1000;
+            nvram_ims_profile_ptr->imc_config.sms_support                       = 0;
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;      //11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.sendrecv_before_conf_call_prcd     = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.dereg_send_bye                     = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout= 5;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                       = 0;
+            nvram_ims_profile_ptr->ua_config.contact_with_expires               = 1;
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                    = 0x01;  // Add CNI to all operations.
+            nvram_ims_profile_ptr->ua_config.add_cell_info_age_to_cni           = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+            nvram_ims_profile_ptr->imc_config.poweroff_ims_dereg_timer          = 2;
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                      "0,2,3,6,1,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                      "0,3,2,6,1,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                    );
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);               //Megafon: "N,33,16,0;N,*,0,1;E,*,0,1;"
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+
+            break;
+        }
+        case 128: /* DNA Finland */
+        {
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;    //delay IMS dereg in 23G until call is released
+
+            nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0080; //operator_code = 128(DNA Finland)
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                = 500;  //UA_reg_t1_timer = 0x000001F4
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                = 4000;  //UA_reg_t2_timer = 0x00000FA0
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                = 5000;  //UA_reg_t2_timer = 0x00001388
+            nvram_ims_profile_ptr->ua_config.register_expiry                = 3600;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 20;
+            nvram_ims_profile_ptr->ua_config.hide_vattr_when_port_zero      = 1;  
+    #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                        = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                        = 2;
+            nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+    #endif /* __EVS_SUPPORT__ */
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail            = 0;
+            nvram_ims_profile_ptr->ua_config.try_next_pcscf                 = 1;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                   = 0;
+            nvram_ims_profile_ptr->ua_config.rereg_in_oos_end               = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        case 129: /* KDDI */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0081; //operator_code = 129(KDDI)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.allow_emergency_dereg         = 2;      // KDDI_v1_VoLTE_3_082, deactivate emergency PDN directly
+            nvram_ims_profile_ptr->imc_config.emergency_reg_retain_timer    = 240000; // 4min,DeviceReqs-VoLTE_174_clean.pdf
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer         = 5000;
+            nvram_ims_profile_ptr->ua_config.UA_call_no_resource_code       = 580;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code       = 603;
+            nvram_ims_profile_ptr->ua_config.set_rtcp_0                     = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer          = 1800;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 80;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP= 1;
+            nvram_ims_profile_ptr->ua_config.support_max_retry_algo         = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                = 3000; // 3 sec
+            nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                 = 10000; // 10 sec
+            nvram_ims_profile_ptr->ua_config.UA_reg_f_timer                 = 30000; // 30 sec
+            nvram_ims_profile_ptr->ua_config.UA_reg_h_timer                 = 30000; // 30 sec
+            nvram_ims_profile_ptr->ua_config.UA_reg_j_timer                 = 30000; // 30 sec
+            nvram_ims_profile_ptr->ua_config.add_user_phone                 = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                  = 0x01;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status           = 2; // RELIED_ON_AUTO_REREG
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+            nvram_ims_profile_ptr->ua_config.delay_ringing                  = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo              = 0x03;
+            nvram_ims_profile_ptr->imc_config.rel_emc_pdn_afr_timer_expr    = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+            nvram_ims_profile_ptr->ua_config.sip_compact_headers            = 1;
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn         = 1;
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.short_code_support             = 1;
+            nvram_ims_profile_ptr->ua_config.curr_loc_dir_none_for_wifi     = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+            nvram_ims_profile_ptr->ua_config.disable_tcall_timer_in_hold    = 1;
+            nvram_ims_profile_ptr->ua_config.reg_restore_try_next_pcscf     = 1;
+            nvram_ims_profile_ptr->ua_config.always100rel_in_resp           = 1;
+            nvram_ims_profile_ptr->ua_config.omit_err_rsp_for_prack         = 0;
+            nvram_ims_profile_ptr->ua_config.bw_end                         = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                    = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                    = 2;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf=1;
+            nvram_ims_profile_ptr->ua_config.reject_no_answer_resp_code     = 500;
+            nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled     = 1;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable           = 7;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+            nvram_ims_profile_ptr->ua_config.br_begin                       = 4;
+            nvram_ims_profile_ptr->ua_config.br_send_begin                  = 4;
+            nvram_ims_profile_ptr->ua_config.br_recv_begin                  = 4;
+            nvram_ims_profile_ptr->ua_config.bw_begin                       = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_begin                  = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_begin                  = 2;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.no_state_transition_when_183_withoutsdp= 1;
+            nvram_ims_profile_ptr->ua_config.reg_when_norsp_before_timeout  = 1;
+
+            nvram_ims_profile_ptr->ua_config.add_3gpp_ims_in_Accept                 = 1;
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_conf_amr_wb_mode_set[0],0,20);
+            strncpy ( (char *)nvram_ims_profile_ptr->ua_config.UA_call_conf_amr_wb_mode_set,
+                      "0,1,2",
+                      sizeof (nvram_ims_profile_ptr->ua_config.UA_call_conf_amr_wb_mode_set)-1
+                    );
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,
+                    "0,1,2",
+                    sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1);
+            nvram_ims_profile_ptr->ua_config.add_199_feature_tag                = 1;
+            nvram_ims_profile_ptr->ua_config.add_pani_in_ack = 1;
+            nvram_ims_profile_ptr->ua_config.cur_loc_for_emergency_enable   = 0;
+            nvram_ims_profile_ptr->ua_config.call_sdp_ans_ack_timeout       = 10;
+            nvram_ims_profile_ptr->ua_config.mt_processing_timeout          = 80;
+            nvram_ims_profile_ptr->ua_config.mo_invite_retry_cnt_limit      = 5;
+            nvram_ims_profile_ptr->ua_config.mo_invite_retry_dur_limit      = 45;
+            break;
+        }
+        case 130: /* TIM  */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code              = 0x0082; //operator_code = 130(TIM)
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer      = 0x00000708;  // UA_call_session_timer = 1800s
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g    = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+            nvram_ims_profile_ptr->ua_config.join_send_bye                  = 0;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req       = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+            nvram_ims_profile_ptr->ua_config.follow_nw_ims_vops_support     = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                         = 6;
+            nvram_ims_profile_ptr->ua_config.UA_call_evs_pt                 = 96;
+            nvram_ims_profile_ptr->ua_config.cmr                            = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.audio_dscp                     = 46;
+            nvram_ims_profile_ptr->ua_config.video_dscp                     = 30;
+            nvram_ims_profile_ptr->ua_config.sip_dscp                       = 18;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+            nvram_ims_profile_ptr->ua_config.ecn_init_method                = 3;  // VoLTE_Event_ECN_RTP_LEAP, TIM_VoLTE_2.0_VoL-43_R 9.20
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 20;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403               = 1;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype        = 1;
+            nvram_ims_profile_ptr->ua_config.try_next_pcscf                 = 1;
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Brazil */
+                if (strncmp((char *)&mccmnc[0], "724", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0082;      //operator_code = 130(TIM)
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer          = 0x00000708;  // UA_call_session_timer = 1800s
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se         = 90;
+                    nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g        = 1;
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                  = 0x12;       // 10010, relied on
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    nvram_ims_profile_ptr->imc_config.enable_ddd_feature            = 1;
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 60;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 60;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+                    
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time           = 10;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_max_time            = 10000;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count   = 0;
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.de_subscribe                   = 0;
+                    nvram_ims_profile_ptr->ua_config.UA_net_ipsec                   = 0;
+                    nvram_ims_profile_ptr->ua_config.reuse_transport_methods        = 0x000020D0;  // ACK, CANCEL, PRACK, BYE, UPDATE
+                } /* Italy */
+                else if (strncmp((char *)&mccmnc[0], "222", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.delay_ecpi2_at_183             = 1;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+                    nvram_ims_profile_ptr->ua_config.register_cap_whenever          = 1;
+                    nvram_ims_profile_ptr->ua_config.always_add_user_phone_in_conf_refer = 1;
+                }
+            }
+            break;
+        }
+        case 131: /* TrueMove */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0083; //operator_code = 131(TrueMove)
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;      //disable precondition
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 0x00000384;  // UA_call_session_timer = 900
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 10*1000;//resource_retain_timer = 10 000ms (10 seconds)
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;      //v4_prefer
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x01;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.sendrecv_before_prcd               = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 900;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 30;
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,
+                    "2",
+                    sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1);
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set[0],0,16);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set,
+                    "2",
+                    sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set)-1);
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                       = 0;
+            nvram_ims_profile_ptr->ua_config.support_resub                      = 0;
+            nvram_ims_profile_ptr->imc_config.nr_recovery_support               = 1;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                      "0,2,6,1,3,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                      "0,2,6,1,3,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                    );
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status               = 1;         // ALWAYS
+            break;
+        }
+        case 132: /* Movistar/ViVo Brazil */
+        {
+            /*default seting is for Movistar-peru:mcc=716*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0084;   //operator_code = 132(Movistar) mcc=716, mnc=06
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;        //v4_prefer
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x12;       // 10010, relied on
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant            = 0x1111;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                     = 105;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_oct_pt                 = 104;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt                  = 107;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_oct_pt              = 106;
+            nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt                 = 102;
+            nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt              = 101;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 1800;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.rel_conf_if_no_participant         = 1;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.support_early_upgrade              = 1;
+            nvram_ims_profile_ptr->ua_config.curr_loc_dir_none_for_wifi         = 1;
+			nvram_ims_profile_ptr->ua_config.send_media_mod_after_active        = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.wfc_with_plani                     = 1;
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                    = 0x01;  // Add CNI to all operations. 
+            nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP    = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 5000;
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                "0,2,3,6,1,4,5,0",
+                sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1         //set pcscf policy for home NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                "0,2,3,6,1,4,5,0",
+                sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1        //set pcscf policy for visit NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                "N,27,16,0;N,33,18,0;N,*,0,1;E,*,0,1;",
+                sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Colombia */
+                if (strncmp((char *)&mccmnc[0], "732", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0084;   //operator_code = 132(Movistar)
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call = 1;     //not register for WFC during a CS call
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype        = 1;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 20;
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_resp      = 1;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.retry_interval_after_403       = 7200;
+                    /* IMCB */
+                    memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                        "0,2,6,3,1,4,5,0",
+                        sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1         //set pcscf policy for home NW
+                            );
+                    memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                        "0,2,6,3,1,4,5,0",
+                        sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1        //set pcscf policy for visit NW
+                            );
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,27,16,0;N,33,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                }
+                /* Argentina */
+                else if (strncmp((char *)&mccmnc[0], "722", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0084;    //operator_code = 132(Movistar)
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 90;
+                    nvram_ims_profile_ptr->ua_config.TMO_specific_SDP               = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403               = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+                    /*IMC*/
+                    nvram_ims_profile_ptr->imc_config.location_info_support         = 1;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time           = 10;
+                }
+                /* ViVo Brazil */
+                else if (strncmp((char *)&mccmnc[0], "724", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0084;   //operator_code = 132(ViVo Brazil)
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer          = 1800;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se         = 600;
+
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;    //delay IMS dereg in 23G until call is released
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 90;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable           = 0x07;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+                    nvram_ims_profile_ptr->imc_config.enable_ddd_feature            = 1;
+                    nvram_ims_profile_ptr->ua_config.from_header_peer_addr          = 1;
+                    nvram_ims_profile_ptr->ua_config.use_local_conf_participant_list_in_srvcc = 1;
+
+                    /*IMCB*/
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count   = 0;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time           = 10;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_max_time            = 10000;
+                }
+                /* Mexico */
+                else if (strncmp((char *)&mccmnc[0], "334", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0084;   //operator_code = 132(Movistar)
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.emergency_call_category_mapping = 1;
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application      = 1;
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+                    nvram_ims_profile_ptr->ua_config.terminal_based_cw              = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+                    nvram_ims_profile_ptr->ua_config.from_header_peer_addr          = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 90;
+                    nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt        = 1;
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_resp      = 1;  
+                    nvram_ims_profile_ptr->ua_config.show_octet_align               = 0;
+
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time           = 10;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_max_time            = 10000;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count   = 0;
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1500;
+                    nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg       = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                 = 90000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                = 5000;
+                    nvram_ims_profile_ptr->ua_config.reuse_transport_methods        = 0x00000254;
+                }
+                /*Chile*/
+                else if (strncmp((char *)&mccmnc[0], "730", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0084;   //operator_code = 132(Movistar)
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                  = 0x14; // 10100
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable           = 0x000F;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer           = 0x07;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403    = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+                    nvram_ims_profile_ptr->ua_config.enable_in_band_tone_in_hold    = 0;
+                    nvram_ims_profile_ptr->ua_config.when_stop_tcall                = 100;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->imc_config.sms_support                   = 0;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1300;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                = 7190;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo              = 0x28;
+                    nvram_ims_profile_ptr->ua_config.rereg_in_oos_end               = 1;
+                    nvram_ims_profile_ptr->imc_config.auto_re_reg_max_timer         = 300000;
+
+                    /*IMCB*/
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference           = 2;
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1);
+
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        =1;
+                    nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp        =1;
+                }
+                /*Ecuador*/
+                else if (strncmp((char *)&mccmnc[0], "740", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0084;   //operator_code = 132(Movistar)
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_On_Demand    = 0;
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x12; // 10010
+
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 35;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 35;
+                    nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_req           = 1;
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_resp          = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.terminal_based_cw                  = 0;
+                    nvram_ims_profile_ptr->ua_config.set_rtcp_0                         = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;
+                    nvram_ims_profile_ptr->ua_config.from_header_peer_addr              = 1;
+#ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+#endif /* __EVS_SUPPORT__ */
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+                    nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                  = 0x3C;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+
+
+                    /*IMCB*/
+                    nvram_ims_profile_ptr->imc_config.ignore_sgn_qci_check              = 0x07;
+                }
+                /*Uruguay*/
+                else if (strncmp((char *)&mccmnc[0], "748", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0084;   //operator_code = 132(Movistar)
+                    nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg           = 1;
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 7200;
+
+
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+
+
+                    /*IMCB*/
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                               "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                                sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;         
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;      
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;          
+                }
+            }
+            break;
+        }
+        case 133: /* DU */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0085;   //operator_code = 133(DU UAE)
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 4000;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 20000;
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 86400;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_specific_ipsec_algo         = 0x08;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.use_org_sdp_for_invite_without_sdp = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port = 0;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                      "0,2,6,1,4,5,3,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                      "0,2,6,1,4,5,3,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                    );
+            break;
+        }
+        case 134: /* Elisa */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                              = 0x0086; //operator_code = 134(Elisa)
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            nvram_ims_profile_ptr->ua_config.hide_vattr_when_port_zero      = 1;
+            
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Finland */
+                if (strncmp((char *)&mccmnc[0], "244", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+                    nvram_ims_profile_ptr->imc_config.ignore_sgn_qci_check              = 0x7;
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 20000;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1400;
+
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                    nvram_ims_profile_ptr->ua_config.support_early_upgrade              = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order4               = 6;
+                    nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_send_end                        = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_recv_end                        = 2;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0xFF;
+                #endif
+                    nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                = 0;
+                    nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+                    nvram_ims_profile_ptr->ua_config.rereg_in_oos_end                   = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                  = 0x33;     // NULL + AES
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 8000;     //resource_retain_timer = 8 seconds
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //Elisa FI: "N,33,16,0;N,*,0,1;E,*,0,1;"
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,16,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                }
+                /* Estonia */
+                else if (strncmp((char *)&mccmnc[0], "248", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    nvram_ims_profile_ptr->imc_config.emergency_call_category_mapping   = 1;
+
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 15;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 20000;
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                }
+            }
+            break;
+        }
+        case 135: /* MTS */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0087;   //operator_code = 135 (MTS)
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Russia */
+                if (strncmp((char *)&mccmnc[0], "250", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 6000;  // 6 seconds
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;      // 11000, IMS reg maintained but initial reg not initiated
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;
+
+                    /*IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 0x00000384;  // UA_call_session_timer = 900s
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant            = 0x0101;
+                    nvram_ims_profile_ptr->ua_config.use_org_sdp_for_invite_without_sdp = 1;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0x07;
+                    nvram_ims_profile_ptr->ua_config.play_local_tone_when_no_rtp_pkt_on_remote_hold   = 1;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.wfc_with_plani                     = 1;
+                    nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                = 0;
+                    nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+                    nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                    = 0x01;  // Add CNI to all operations.
+                    nvram_ims_profile_ptr->ua_config.add_cell_info_age_to_cni           = 1;
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 20000;
+                    nvram_ims_profile_ptr->ua_config.add_timezone_to_pani               = 2;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;
+                    nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi                 = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.reuse_transport_methods            = 0x000020D0;
+                    nvram_ims_profile_ptr->ua_config.est_client_tcp_when_send_response  = 0;
+
+                    /* IMCB */
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //MTS Russia: "N,33,16,0;N,*,0,1;E,*,0,1;"
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,16,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                }
+                /* Belarus */
+                else if (strncmp((char *)&mccmnc[0], "257", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0;
+            #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                }
+            }
+            break;
+        }
+        case 136: /* Entel */
+        {
+            /*default seting is for Entel-peru:mnc=716*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0088;   //operator_code = 136(Entel) mcc=716, mnc=i17
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                       = 0;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;      //v4_prefer
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg           = 1;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x12;       // 10010, relied on
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.add_sdp_in_180_for_non_precond     = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0x0F;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none            = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                = 6; //G.711 PCMA
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;
+            nvram_ims_profile_ptr->ua_config.tcp_keepalive_interval             = 3600000;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                "0,2,6,3,1,4,5,0",
+                sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1         //set pcscf policy for home NW
+                );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                "0,2,6,3,1,4,5,0",
+                sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1        //set pcscf policy for visit NW
+                );
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Chile */
+                if (strncmp((char *)&mccmnc[0], "730", 3) == 0) {
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0088;     //operator_code = 136(Entel)
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 45;         
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;          
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;          
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_req           = 1;          
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_resp          = 1;          
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;          
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;          
+
+                    /* IMCB */
+
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;          
+                    nvram_ims_profile_ptr->imc_config.location_info_support             = 1;          
+                }
+                /* Bolivia */
+                else if (strncmp((char *)&mccmnc[0], "736", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0088;     //operator_code = 136(Entel)
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 1800;       
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;         
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;        
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;       
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;       
+
+                    /* IMCB */
+
+                    /* IMC */
+                }
+            }
+            break;
+        }
+        case 137: /* Tele2 */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0089;   //operator_code = 137(Tele2)
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Russia */
+                if (strncmp((char *)&mccmnc[0], "250", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 1800;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;      // 11000, IMS reg maintained but initial reg not allowed
+
+                    /*IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none            = 0;
+                    nvram_ims_profile_ptr->ua_config.use_org_sdp_for_invite_without_sdp = 1;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.authorization_with_algo            = 1;
+                    nvram_ims_profile_ptr->ua_config.de_subscribe                       = 0;
+                    nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+                    nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                    = 0x01;  // Add CNI to all operations.
+                    nvram_ims_profile_ptr->ua_config.add_cell_info_age_to_cni           = 1;
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.wait_for_sgn_timer                = 0xFFFFFFFE;
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //Tele2 Russia: "N,33,16,0;N,*,0,1;E,*,0,1;"
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,16,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;
+                }
+                /* Netherlands */
+                else if (strncmp((char *)&mccmnc[0], "204", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+
+                    /*IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.oir_privacy_to_header              = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp = 0;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1300;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 600000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 3000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 16000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 17000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                     = 192000;
+                    nvram_ims_profile_ptr->ua_config.reuse_transport_methods            = 0x00000250;
+
+                    /* IMCB */
+
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                        "N,33,18,0;N,*,0,1;E,*,0,1;",
+                        sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                        );
+                }
+                /* Sweden */
+                else if (strncmp((char *)&mccmnc[0], "240", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x12;      // 10010, relied
+
+                    /*IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.bw_end                             = 1;
+                    nvram_ims_profile_ptr->ua_config.bw_send_end                        = 1;
+                    nvram_ims_profile_ptr->ua_config.bw_recv_end                        = 1;
+                #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.dedicated_fallback_support        = 1;
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                }
+                /* Lithuania */
+                else if (strncmp((char *)&mccmnc[0], "246", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    nvram_ims_profile_ptr->imc_config.emergency_call_category_mapping   = 1;
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+                    /*IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = -1;
+                #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase           = 1;
+                }
+                /* Estonia */
+                else if (strncmp((char *)&mccmnc[0], "248", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    nvram_ims_profile_ptr->imc_config.emergency_call_category_mapping   = 1;
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+                    /*IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = -1;
+                #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase           = 1;
+                }
+            }
+            break;
+        }
+        case 139: /* Bouygues */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x008B;   //operator_code = 139(Bouygues France)
+
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 1;        // IMS registration allowed and maintained in 23G as well
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.audio_dscp                         = 0x2E;
+            nvram_ims_profile_ptr->ua_config.sip_dscp                           = 0x28;
+            nvram_ims_profile_ptr->ua_config.video_dscp                         = 0x10;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x4E;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 1800;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 900;
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 40;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 40;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F;   // enable SRVCC,aSRVCC,midSRVCC,bSRVCC
+            nvram_ims_profile_ptr->ua_config.sendrecv_before_prcd               = 0;
+            nvram_ims_profile_ptr->ua_config.sendrecv_before_conf_call_prcd     = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                     = 102;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt                  = 104;
+            nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt                 = 96;
+            nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt              = 97;
+            nvram_ims_profile_ptr->ua_config.register_cap_whenever              = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.conference_subscribe_timing        = 1;
+            nvram_ims_profile_ptr->ua_config.p_early_media_in_invite            = 1;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req           = 1;
+            nvram_ims_profile_ptr->ua_config.curr_loc_dir_none_for_wifi         = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.delay_unhold_call                  = 1;
+
+            memset(&nvram_ims_profile_ptr->ua_config.required_loc_info_num_set[0],0,128);
+            strncpy ( (char *)nvram_ims_profile_ptr->ua_config.required_loc_info_num_set,
+                    "112,15,17,18,114,115,119,191,196,197,116000,116117",
+                    sizeof (nvram_ims_profile_ptr->ua_config.required_loc_info_num_set)-1
+                    );
+            nvram_ims_profile_ptr->ua_config.call_invite_no_rsp_ran_prio_req_timer_timeout = 3;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout             = 15;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1354;
+            nvram_ims_profile_ptr->ua_config.UA_reg_f_timer                     = 128000;
+            nvram_ims_profile_ptr->ua_config.rereg_in_oos_end                   = 1;
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                    = 0x01;  // Add CNI to all operations.
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x02;
+            nvram_ims_profile_ptr->ua_config.sms_support_in_23g                 = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ignore_sgn_qci_check              = 0x7; // 111
+            nvram_ims_profile_ptr->imc_config.empty_pcscf_list_fail_cause       = 18;       // IMS_PDN_Fatal_Fail
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+
+            break;
+        }
+        case 140: /* MTN */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x008C;   // operator_code = 140(MTN South-Africa)
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 3600;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 900;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 1800;
+
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;        //v4_prefer
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 2;        // IMS reg maintained at 23G but initial reg not initiated
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 30;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 30;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0x00;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                     = 111;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt                  = 96;
+            nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt                 = 113;
+            nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt              = 99;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_evs_pt                     = 110;
+#endif /* __EVS_SUPPORT__ */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                  = 0x33;     //3DES + MD5, 3DES + SHA1, AES + MD5, AES + SHA1
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                       = 0;
+            nvram_ims_profile_ptr->ua_config.authorization_with_algo            = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp            = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Nigeria */
+                if (strncmp((char *)&mccmnc[0], "621", 3) == 0) {
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x008c;     //operator_code = 140(MTN)
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;          
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;         
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;          
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;          
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;       
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.empty_pcscf_list_fail_cause       = 18;
+                    nvram_ims_profile_ptr->imc_config.ignore_sgn_qci_check              = 0x7;
+
+                    /* IMC */
+                }
+                /* Ghana */
+                else if (strncmp((char *)&mccmnc[0], "620", 3) == 0) {
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x008c;     //operator_code = 140(MTN)
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/                    
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90; 
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;          
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;                      
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;       
+
+                    /* IMCB */
+
+                    /* IMC */
+                }
+            }
+            break;
+        }
+        case 141: /* CellC */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x008D;   //operator_code = 141(CellC South-Africa)
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1440;
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 7200;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_On_Demand    = 0;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none            = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x4E;   // Default + WFC normal disabled.
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.reuse_transport_methods            = 0x000020D8;  // ACK, CANCEL, PRACK, BYE, UPDATE
+
+            /* IMCB */
+
+            break;
+        }
+        case 143: /* TurkCell */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x008F;   //operator_code = 143(TurkCell)
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 1800;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 5000;     // resource_retain_timer
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;        //lbs location info service: on
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.auto_unhold_when_rcv_recvonly      = 1;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F; // enable SRVCC,aSRVCC,midSRVCC,bSRVCC
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                    = 0x01;  // Add CNI to all operations.
+            nvram_ims_profile_ptr->ua_config.add_cell_info_age_to_cni           = 1;
+            nvram_ims_profile_ptr->ua_config.wfc_emerg_pidf_country             = 1;
+            nvram_ims_profile_ptr->ua_config.pidf_country                       = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x00; // PIDF_ALL_CALLS_ENABLE
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+        #endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite= 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.rereg_in_oos_end                   = 1;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.geolocation_type                   = 2;
+            nvram_ims_profile_ptr->ua_config.reg_disable_pidf                   = 0;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        case 144: /* Smile */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0090;   //operator_code = 144(Smile South-Africa)
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 4;
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                       = 0;        //NONE
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.pcscf_port_number                  = 4060;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp            = 1;
+
+            break;
+        }
+        case 145: /* Cricket */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code = 0x0091; //operator_code = 145(Cricket)
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer    = 8000;  // 8000ms (8 seconds)
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_base_timer   = 120*1000;    // 120000s (120 seconds) CDR-LTE-1468
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_max_timer    = 7200*1000;   // 7200000ms (7200 seconds) CDR-LTE-1468
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer     = 0;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size    = 1230;
+            nvram_ims_profile_ptr->ua_config.UA_call_no_resource_code = 580;   //AT&T TC LTE-BTR-5-5560
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se   = 0;
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g  = 3;     // IMS registration allowed and maintained in 23G as well (CDR-NWS-705)
+
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn   = 1;
+            nvram_ims_profile_ptr->imc_config.ecc_guard_timer         = 10;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg = 1;
+            nvram_ims_profile_ptr->imc_config.ussd_support            = 1;
+
+            /*location info*/
+            nvram_ims_profile_ptr->imc_config.location_info_support   = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.att_family              = 1;
+            nvram_ims_profile_ptr->imc_config.block_reg_when_isim_params_no_avail = 1;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule            = 0x01;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status     = 4;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_watchdog_timer  = 300;  // v21.3 <CDR-IMS-1210>
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.oir_privacy_to_header              = 1;
+            nvram_ims_profile_ptr->ua_config.register_cap_whenever              = 1;
+            nvram_ims_profile_ptr->ua_config.no_auto_retry_for_mo_call          = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.conference_subscribe_timing        = 1;
+            nvram_ims_profile_ptr->ua_config.set_zero_cell_id_in_wifi           = 1;
+            nvram_ims_profile_ptr->ua_config.reject_mtcall_by_vops              = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 60;
+            nvram_ims_profile_ptr->ua_config.reject_code_in23G                  = 488;
+            nvram_ims_profile_ptr->ua_config.delay_unhold_call                  = 1;
+            nvram_ims_profile_ptr->ua_config.add_imageattr                      = 1;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.video_conf_if_one_is_video         = 1;
+            nvram_ims_profile_ptr->ua_config.call_rel_holdcall_in_midcall_SRVCC = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_send_bye                     = 1;
+            nvram_ims_profile_ptr->ua_config.conf_user_count_includes_host      = 0;
+            nvram_ims_profile_ptr->ua_config.pem_use_sdp_rtp_drct               = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.conference_desub_time              = 2;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.reject_text_when_text_off          = 0;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.text_feature_tag                   = 1;
+            nvram_ims_profile_ptr->ua_config.tty_enable                         = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.follow_mt_pt_list                  = 1;
+            nvram_ims_profile_ptr->ua_config.accept_wifi_call_if_audio_cap_0    = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 45;
+            nvram_ims_profile_ptr->ua_config.add_pani_in_ack                    = 1;
+            nvram_ims_profile_ptr->ua_config.stir_shaken_for_privacy            = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+            nvram_ims_profile_ptr->ua_config.try_same_pcscf_rereg               = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                     = 32000; // 32 sec
+            nvram_ims_profile_ptr->ua_config.UA_reg_d_timer                     = 32000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_f_timer                     = 32000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_h_timer                     = 32000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_j_timer                     = 32000;
+            nvram_ims_profile_ptr->ua_config.reg_try_all_pcscf_5626             = 1;
+            nvram_ims_profile_ptr->ua_config.close_unprotected_conn             = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_delay_time                   = 2;
+            nvram_ims_profile_ptr->ua_config.wfc_refresh_23g                    = 1;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.geolocation_type                   = 2;
+            nvram_ims_profile_ptr->ua_config.init_reg_delay_time                = 2;
+            nvram_ims_profile_ptr->ua_config.rtt_tag_mode                       = 1;
+            nvram_ims_profile_ptr->ua_config.reject_rcs_request                 = 480;
+            nvram_ims_profile_ptr->ua_config.sit_tcp_2xx_rsp_retransmission     = 0;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;
+            nvram_ims_profile_ptr->ua_config.confidence_level                   = 90;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+            nvram_ims_profile_ptr->imc_config.ims_video_qci                     = 255;
+            nvram_ims_profile_ptr->imc_config.ignore_media_qci_check            = 0xff2; // 111111110010, ignore video qci
+            nvram_ims_profile_ptr->imc_config.enable_audio_precondition         = 1;
+            nvram_ims_profile_ptr->imc_config.video_resource_retain_timer       = 8000;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);    //ATT: "N,33,16,0;N,28,16,0;N,*,0,1;E,*,0,1;"
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,28,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        case 146:/*Etisalat*/
+        {
+            /* Egypt mcc = 602 */
+            nvram_ims_profile_ptr->ua_config.operator_code                   = 0x0092; //operator_code = 146(Etisalat)
+
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size  = 1300;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                 = 500;    //500ms;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                 = 4000;   //4000ms
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                 = 5000;   //5000ms
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo               = 0X30;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer           = 1800;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 35;     //35s
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 35;     //35s
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context = 0;
+            nvram_ims_profile_ptr->ua_config.disable_conf_call_prcd          = 0;      //support precondition
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server          = 1;      //in-dialog
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server      = 1;      //in-dialog
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                  = 0;      // network will send BYE to host after to host after invatation complete
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout        = 20;
+            nvram_ims_profile_ptr->ua_config.sendrecv_before_prcd            = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call  = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1      = 0;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req        = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming     = 1;
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                 = 0x01;  // Add CNI to all operations.
+            nvram_ims_profile_ptr->ua_config.add_cell_info_age_to_cni        = 1;
+            nvram_ims_profile_ptr->ua_config.wfc_with_plani                  = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 90;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port          = 0;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                = 0;      //disable
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani             = 1;
+            nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi              = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype         = 1;
+
+            /*IMCB*/
+            nvram_ims_profile_ptr->imc_config.default_fallback_support       = 1;      //support
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                   = 0x14;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                        );
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* United Arab Emirates */
+                if (strncmp((char *)&mccmnc[0], "424", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x0092; //operator_code = 146(Etisalat)
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference           = 2;      //v4_prefer
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                = 500;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                = 4000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                = 5000;
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 45;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 45;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+                    nvram_ims_profile_ptr->ua_config.delay_unhold_call              = 1;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout       = 20;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.rereg_in_oos_end               = 1;
+                    nvram_ims_profile_ptr->ua_config.oos_end_reset_tcp_client       = 1;
+                    nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                = 0x01;
+                    nvram_ims_profile_ptr->ua_config.wfc_with_plani                 = 1; 
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;
+                    nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi             = 1;
+
+                    /* IMCB */
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,18,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                }
+            }
+
+            break;
+        }
+        case 147: /*Airtel*/
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0093;  //operator_code = 147(Airtel India)
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 5000;
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 3600;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x12;       // 10010, relied on
+            nvram_ims_profile_ptr->imc_config.send_sip_dereg_at_23g             = 0;   // don't send sip dereg in 23G for Airtel
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg           = 1;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.terminal_based_cw                  = 0;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode         = 1;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+            nvram_ims_profile_ptr->ua_config.retry_video_as_voice_on_failure    = 0x03;
+            nvram_ims_profile_ptr->ua_config.geolocation_type                   = 4;
+            nvram_ims_profile_ptr->ua_config.pidf_country                       = 1;
+            nvram_ims_profile_ptr->ua_config.always_fetch_1st_entry_in_hisInfo  = 1;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+            
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 35;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.dereg_send_bye                     = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable     = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 30;
+            nvram_ims_profile_ptr->ua_config.mod_session_req_timer_timeout      = 40;
+            nvram_ims_profile_ptr->ua_config.support_ringing_downgrade          = 1;
+            nvram_ims_profile_ptr->ua_config.delay_ecpi2_at_183                 = 1;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.wait_second_invite_for_hold        = 1;
+            nvram_ims_profile_ptr->ua_config.call_invite_no_rsp_ran_prio_req_timer_timeout = 3;
+            nvram_ims_profile_ptr->ua_config.sip_dscp                           = 0x2E;
+            nvram_ims_profile_ptr->ua_config.audio_dscp                         = 0x22;
+            nvram_ims_profile_ptr->ua_config.video_dscp                         = 0x22;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.update_ipsec_port_494              = 1;
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                = 0;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status               = 4;
+            nvram_ims_profile_ptr->imc_config.nr_recovery_support               = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                "0,2,6,1,4,5,3,0",
+                sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1         //set pcscf policy for home NW
+                );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                "0,2,6,1,4,5,3,0",
+                sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1        //set pcscf policy for visit NW
+                );
+
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+
+            break;
+        }
+        case 148: /* Seatel */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0094;  //operator_code = 148(Seatel Cambodia)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 15000;
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.terminal_based_cw                  = 0;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+            nvram_ims_profile_ptr->ua_config.conf_refer_order_by_call_id        = 1;
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none            = 0;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable     = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 30;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode         = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1400;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP    = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference              = 2;      //v4_prefer
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp           = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp           = 1;
+            nvram_ims_profile_ptr->imc_config.dedicated_fallback_support       = 1;
+            break;
+        }
+        case 149: /* CMHK */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0095;  //operator_code = 149(CMHK)
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;       //v4_prefer
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status               = 2;  //is_ims_retry_status = 2, Rely on AUTO_REREG
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.no_additional_invite_after_downgrade         = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                  = 0x02;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+            nvram_ims_profile_ptr->ua_config.geolocation_type                   = 2;
+            nvram_ims_profile_ptr->ua_config.init_reg_delay_time                = 2;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp            = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                "0,2,3,6,1,4,5,0",
+                sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1         //set pcscf policy for home NW
+                );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                "0,2,3,6,1,4,5,0",
+                sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1        //set pcscf policy for visit NW
+                );
+            break;
+        }
+        case 150: /* Swisscom */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0096;   //operator_code = 150(Swisscom)
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_http_digest                 = 2;        //AKAv2_MD5
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 1800;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;        //lbs location info service: on
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 3;        // Add country in WFC and VOLTE MESSAGE/REG/INVITE
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.esipcpi_full_reason                = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = -1;
+            nvram_ims_profile_ptr->ua_config.call_evs_offer_fields              = 0x00002000 | 0x00000002; // hf-only and cmr
+            nvram_ims_profile_ptr->ua_config.hf_only                            = 1;
+            nvram_ims_profile_ptr->ua_config.cmr                                = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 8; // PIDF_WFC_EMERG_ENABLE, PIDF_WFC_ENABLE, PIDF_VOLTE_EMERG_ENABLE
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        case 151: /* M1 */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0097;  // operator_code = 151(M1)
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;       // v4_prefer
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x12;       // 10010, relied on
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg           = 1;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.nr_recovery_support               = 1;
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 0x0000EA60; // UA_call_session_timer = 60000
+            nvram_ims_profile_ptr->ua_config.ignore_380_emg_xml                 = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;
+            nvram_ims_profile_ptr->ua_config.sip_bye_retransmit_total_time      = 32000;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.dereg_sms_disconnect_stack         = 0;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                "0,2,6,3,1,4,5,0",
+                sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1         //set pcscf policy for home NW
+                );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                "0,2,6,3,1,4,5,0",
+                sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1        //set pcscf policy for visit NW
+                );
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+            break;
+        }
+        case 152: /* Optus */
+        {
+            /*default seting is for Optus-Australia:mcc=505*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0098;   //operator_code = 152(Optus)
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.terminal_based_cw                  = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.rel_conf_if_no_participant         = 1;
+            nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi                 = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.access_network_info_type           = 4;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                  = 0x3c;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status               = 2; // Depend on AUTO_REREG status
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,28,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+            break;
+        }
+        case 153: /* VHA */
+        {
+            /*default seting is for VHA-Australia:mcc=505*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0099;   //operator_code = 153(VHA)
+
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x14; // 10100
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            strncpy ((char *)&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0],
+                    "sip:conference@factory.ims.vodafone.com.au",
+                    sizeof ("sip:conference@factory.ims.vodafone.com.au")
+                    );
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+            nvram_ims_profile_ptr->ua_config.disable_conf_call_prcd             = 1;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F; // enable SRVCC and aSRVCC,midSRVCC,bSRVCC
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;
+            nvram_ims_profile_ptr->ua_config.audio_dscp                         = 0x2E;
+            nvram_ims_profile_ptr->ua_config.video_dscp                         = 0x0A;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 20;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.join_send_bye                      = 0;
+
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                        = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                        = 2;
+            nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1300;
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 7200;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                  = 0x30;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.geolocation_type                   = 3;
+            nvram_ims_profile_ptr->ua_config.init_reg_delay_time                = 2;
+            nvram_ims_profile_ptr->ua_config.wfc_with_plani                     = 1;
+            nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi                 = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+            nvram_ims_profile_ptr->ua_config.rereg_in_oos_end                   = 1;
+            nvram_ims_profile_ptr->ua_config.oos_end_reset_tcp_client           = 1;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status               = 2; // Depend on AUTO_REREG status
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+            /*SMS*/
+            nvram_ims_profile_ptr->ua_config.nsn_specific                       = 1;
+            break;
+        }
+        case 154: /* Telia */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x009A;   //operator_code = 154(Telia)
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            // Telia has requested MTK to disable PIDF from all INVITE and REGISTER messages for Telia global because of network issues.
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x0F;   // PIDF_ALL_CALLS_DISABLE
+            nvram_ims_profile_ptr->ua_config.reg_disable_pidf                   = 0x0F;   // Disable all
+            nvram_ims_profile_ptr->ua_config.hide_vattr_when_port_zero          = 1;
+            
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status               = 2;        // Rely on AUTO_REREG
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Denmark */
+                if (strncmp((char *)&mccmnc[0], "238", 3) == 0) {
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+#ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+#endif /* __EVS_SUPPORT__ */
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_req           = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.query_other_sim_call_state         = 1;
+                    nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable     = 1;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+                    nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp            = 1;
+
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 2;
+                    nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+                }
+                /* Finland */
+                else if (strncmp((char *)&mccmnc[0], "244", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 1;        // IMS registration allowed and maintained in 23G as well
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+                    /*IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                    nvram_ims_profile_ptr->ua_config.follow_nw_ims_vops_support         = 1;
+                    nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp= 0;
+                    nvram_ims_profile_ptr->ua_config.query_other_sim_call_state         = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+                    nvram_ims_profile_ptr->imc_config.ignore_sgn_qci_check              = 0x7; // 111
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                    nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                = 0;
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            =1;
+                    nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               =10;
+
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,18,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                }
+                /* Sweden */
+                else if (strncmp((char *)&mccmnc[0], "240", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 1;        // IMS registration allowed and maintained in 23G as well
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+                    /*IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.check_conference_subscribe         = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+                    nvram_ims_profile_ptr->ua_config.follow_nw_ims_vops_support         = 1;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.join_send_bye                      = 0;
+                    nvram_ims_profile_ptr->ua_config.query_other_sim_call_state         = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+                    nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+                    nvram_ims_profile_ptr->ua_config.reg_disable_pidf                   = 0x0F;
+                    nvram_ims_profile_ptr->ua_config.geolocation_type                   = 2;
+                    nvram_ims_profile_ptr->ua_config.init_reg_delay_time                = 30;
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+                    nvram_ims_profile_ptr->imc_config.ignore_sgn_qci_check              = 0x7; // 111
+                    nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+                    nvram_ims_profile_ptr->imc_config.empty_pcscf_list_fail_cause       = 18;       // IMS_PDN_Fatal_Fail
+            
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy ( (char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,18,0;N,55,18,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                }
+                /* Norway */
+                else if (strncmp((char *)&mccmnc[0], "242", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.location_info_support         = 1;
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery         = 1;
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer          = 1800;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 180;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;        // Add country in WFC MESSAGE/REG/INVITE
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+                    nvram_ims_profile_ptr->ua_config.call_callend_timer_timeout     = 2;        // 2 seconds
+                    nvram_ims_profile_ptr->ua_config.query_other_sim_call_state     = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                         = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                    = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                    = 6;
+                #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support               = 0;
+                    nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403               = 1;
+                    nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase       = 1;
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,18,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                }
+                /* Lithuania */
+                else if (strncmp((char *)&mccmnc[0], "246", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 1;      // IMS registration allowed and maintained in 23G as well
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;   // 11000, IMS reg maintained but initial reg not allowed
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1; 
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.oir_privacy_to_header              = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F; // enable SRVCC, aSRVCC, midSRVCC, bSRVCC
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_req           = 1;
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_resp          = 1;
+                    nvram_ims_profile_ptr->ua_config.ignore_380_emg_xml                 = 1;
+                    nvram_ims_profile_ptr->ua_config.query_other_sim_call_state         = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                #endif /* __EVS_SUPPORT__ */
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_without_target_hold            = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+
+                    /* IMCB */
+
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,18,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                }
+                /* Estonia */
+                else if (strncmp((char *)&mccmnc[0], "248", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;      // 11000, IMS reg maintained but initial reg not allowed
+                    nvram_ims_profile_ptr->imc_config.emergency_call_category_mapping   = 1;
+                    nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.oir_privacy_to_header              = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F; // enable SRVCC, aSRVCC, midSRVCC, bSRVCC
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_req           = 1;
+                    nvram_ims_profile_ptr->ua_config.session_refresher_in_resp          = 1;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_without_target_hold            = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;      // Add country in WFC MESSAGE/REG/INVITE
+                    nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x0F;   // PIDF_ALL_CALLS_DISABLE
+                    nvram_ims_profile_ptr->ua_config.query_other_sim_call_state         = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                #endif /* __EVS_SUPPORT__ */
+                    nvram_ims_profile_ptr->ua_config.hide_vattr_when_port_zero          = 1;
+                    nvram_ims_profile_ptr->ua_config.omit_sip_instance_in_contact       = 0x03; // B0000_0011
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1300;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 600000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 3000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 16000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 17000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                     = 192000;
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+
+                    /* IMCB */
+
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                }
+            }
+            break;
+        }
+        case 155: /* Digi */
+        {
+        /*Digi malaysia mcc = 502*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x009B;   //operator_code = 155(Digi)
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        //delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 2;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 60;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 60;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x0007;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.when_stop_tcall                    = 100;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 7200;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                  = 0x3c;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 10000;
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp            = 1;
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Hungary */
+                if (strncmp((char *)&mccmnc[0], "216", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                    nvram_ims_profile_ptr->ua_config.operator_code                   = 0x009B;   //operator_code = 155(Digi)
+
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery          = 1;
+                    nvram_ims_profile_ptr->imc_config.emergency_call_category_mapping = 1;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size  = 1400;
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.register_expiry                 = 1800;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 90;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server      = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server          = 1;
+                    nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call  = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1      = 0;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer            = 0;       // disabled for hold, conference and alerting call types
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable            = 0x0000;  // Digi HU is LTE only operatpt, no SRVCC supported
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                  = 0;
+                    nvram_ims_profile_ptr->ua_config.set_rtcp_0                      = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe  = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                     = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1            = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2            = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3            = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                          = 0xB;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                     = 0xB;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                     = 0xB;
+                    nvram_ims_profile_ptr->ua_config.bw_end                          = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_send_end                     = 2;
+                    nvram_ims_profile_ptr->ua_config.bw_recv_end                     = 2;
+                #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                 = 500;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                 = 4000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                 = 5000;
+                    nvram_ims_profile_ptr->ua_config.rereg_in_oos_end                = 1;
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference            = 2;        //v4_prefer
+                    nvram_ims_profile_ptr->imc_config.resource_retain_timer          = 5000;     //resource_retain_timer = 5 seconds
+
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,*,0,0;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                }
+                /* Romania */
+                else if (strncmp((char *)&mccmnc[0], "226", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                    nvram_ims_profile_ptr->ua_config.operator_code                   = 0x009B;   //operator_code = 155(Digi)
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 120;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call  = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1      = 0;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable            = 0x000F; // enable SRVCC, aSRVCC, bSRVCC and mid-SRVCC
+                    nvram_ims_profile_ptr->ua_config.ignore_380_emg_xml              = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server          = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server      = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe  = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se          = 90;
+                    nvram_ims_profile_ptr->ua_config.force_csfb_when663              = 1;
+                    nvram_ims_profile_ptr->ua_config.use_org_sdp_for_invite_without_sdp = 1;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.reuse_transport_methods         = 0x000020D0;  // ACK, CANCEL, PRACK, BYE, UPDATE
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.ignore_sgn_qci_check           = 7;
+                    nvram_ims_profile_ptr->imc_config.empty_pcscf_list_fail_cause    = 18;       // IMS_PDN_Fatal_Fail
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference            = 2;        //v4_prefer
+                    nvram_ims_profile_ptr->imc_config.resource_retain_timer          = 12000;    //resource_retain_timer = 12 seconds
+                    nvram_ims_profile_ptr->imc_config.default_fallback_support       = 1;
+
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,16,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                }
+            }
+
+            break;
+        }
+        case 156: /* Telenor */
+        {
+              nvram_ims_profile_ptr->ua_config.operator_code                        = 0x009C;   //operator_code = 156(Telenor)
+
+              set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* Denmark */
+            if (strncmp((char *)&mccmnc[0], "238", 3) == 0) {
+                nvram_ims_profile_ptr->imc_config.ims_v4v6_preference             = 2;       //v4_prefer
+                nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size   = 1080;
+                nvram_ims_profile_ptr->ua_config.register_expiry                  = 3600;
+                nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                  = 20000;
+                nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery           = 1;
+
+                /*IMCB, Reg/Stack, UA internal configurations */
+                /* Call */
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout       = 90;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout      = 90;
+                nvram_ims_profile_ptr->ua_config.add_country_to_pani              = 1;        // Add country in WFC MESSAGE/REG/INVITE
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server           = 1;
+                nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall         = 1;
+                nvram_ims_profile_ptr->ua_config.merge_send_bye                   = 0;
+                nvram_ims_profile_ptr->ua_config.oir_privacy_to_header            = 1;
+                nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe   = 1;
+                nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call   = 0;
+                nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1       = 0;
+
+                /* Reg/Stack */
+                nvram_ims_profile_ptr->ua_config.random_init_ipsec_port           = 0;
+
+                /* IMCB */
+                nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp          = 1;
+
+                memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                        "N,33,18,0;N,*,0,1;E,*,0,1;",
+                        sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                        );
+            }
+            /* Norway */
+            else if (strncmp((char *)&mccmnc[0], "242", 3) == 0) {
+                nvram_ims_profile_ptr->imc_config.location_info_support          = 1;        //lbs location info service: on
+                nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;     //delay IMS dereg in 23G until call is released
+
+                /* IMCB, Reg/Stack, UA internal configurations */
+                /* Call */
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 120;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 120;
+                nvram_ims_profile_ptr->ua_config.add_country_to_pani             = 1;        // Add country in WFC MESSAGE/REG/INVITE
+                nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server      = 1;
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server          = 1;
+                nvram_ims_profile_ptr->ua_config.merge_send_bye                  = 0;
+                nvram_ims_profile_ptr->ua_config.not_auto_reg_403                = 1;
+                nvram_ims_profile_ptr->ua_config.oir_privacy_to_header           = 1;
+                nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call  = 0;
+                nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage              = 0x0F;     // PIDF_ALL_CALLS_DISABLE
+                nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1      = 0;
+
+                /* Reg/Stack */
+                nvram_ims_profile_ptr->ua_config.reg_gruu_support                = 0;
+                nvram_ims_profile_ptr->ua_config.rereg_in_oos_end                = 1;
+                nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail             = 0;
+                nvram_ims_profile_ptr->ua_config.initial_reg_without_pani        = 1;
+
+                /* IMCB */
+                nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp         = 1;
+
+                memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                        "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                        sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                        );
+            }
+            /* Bulgaria */
+            else if (strncmp((char *)&mccmnc[0], "284", 3) == 0) {
+                nvram_ims_profile_ptr->imc_config.ims_v4v6_preference            = 2;       //v4_prefer
+                nvram_ims_profile_ptr->imc_config.nw_vops_rule                   = 0x18;       // 11000, IMS reg maintained but initial reg not allowed
+                nvram_ims_profile_ptr->ua_config.register_expiry                 = 3600;
+
+                /* IMCB, Reg/Stack, UA internal configurations */
+                /* Call */
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 90;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 90;
+                nvram_ims_profile_ptr->ua_config.srvcc_feature_enable            = 0x0007;  // enable SRVCC, aSRVCC, midSRVCC
+
+                nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call  = 0;
+                nvram_ims_profile_ptr->ua_config.merge_send_bye                  = 0;
+                nvram_ims_profile_ptr->ua_config.not_auto_reg_403                = 1;
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server          = 1;
+                nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server      = 1;
+                nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1      = 0;
+                nvram_ims_profile_ptr->ua_config.force_srvcc_transfer            = 0;       // disabled for hold, conference and alerting call types
+                nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                  = 101;
+                nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt               = 102;
+                nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt              = 96;
+                nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt           = 98;
+                nvram_ims_profile_ptr->ua_config.always_report_remote_video_cap_support = 1;
+
+                /* Reg/Stack */
+                nvram_ims_profile_ptr->ua_config.initial_reg_without_pani        = 1;
+                nvram_ims_profile_ptr->ua_config.reg_gruu_support                = 0;
+
+                /* IMCB */
+                nvram_ims_profile_ptr->imc_config.default_fallback_support       = 1;      //support
+
+                memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                        "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                        sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                        );
+            }
+            /* Pakistan */
+            else if (strncmp((char *)&mccmnc[0], "410", 3) == 0) {
+                imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                nvram_ims_profile_ptr->ua_config.operator_code                  = 0x009C;   //operator_code = 156 (Telenor/Pakistan)
+                nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1300;
+                /*Call*/
+                set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 30;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 30;
+                nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+               #ifdef __EVS_SUPPORT__
+                nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 2;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 1;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 17;
+               #endif /* __EVS_SUPPORT__ */
+                /* Suggested value */
+                nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+                nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable  = 1;
+                nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout  = 30;
+                nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+                nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature         = 1;
+                nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode     = 1;
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+                nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant         = 0x1111;
+                nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call  = 0;                
+
+                /* Reg/Stack */
+                nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+
+                /* IMCB */
+                nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg       = 1;
+                nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp        = 1;
+                nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp        = 1;
+                
+                
+            }
+            /* Sweden */
+            else if (strncmp((char *)&mccmnc[0], "240", 3) == 0) {
+                nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F;
+                nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;      // 11000, IMS reg maintained but initial reg not allowed
+                nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;
+                nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;
+
+                /* Call */
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            #ifdef __EVS_SUPPORT__
+                nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                nvram_ims_profile_ptr->ua_config.br_begin                           = 4;
+                nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                nvram_ims_profile_ptr->ua_config.br_send_begin                      = 4;
+                nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                nvram_ims_profile_ptr->ua_config.br_recv_begin                      = 4;
+                nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+                nvram_ims_profile_ptr->ua_config.bw_send_end                        = 2;
+                nvram_ims_profile_ptr->ua_config.bw_recv_end                        = 2;
+            #endif /* __EVS_SUPPORT__ */
+
+                /* Reg/Stack */
+                nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;
+                nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;
+                nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;
+                nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                nvram_ims_profile_ptr->ua_config.rereg_in_oos_end                   = 1;
+                nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                = 0;
+
+                /* IMCB */
+                nvram_ims_profile_ptr->imc_config.ims_video_qci                     = 255;
+                nvram_ims_profile_ptr->imc_config.ignore_media_qci_check            = 0xff2; // 111111110010, ignore video qci
+                nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp            = 1;
+                nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+                memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,30,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            }
+            /* Myanmar */
+            else if (strncmp((char *)&mccmnc[0], "414", 3) == 0) {
+                nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;
+                nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;
+                nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+                nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+                nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+                nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg           = 1;
+
+                /* Call */
+                set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 45;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+                nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F;
+                nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0x0F;
+                nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+                nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+
+                /* Reg/Stack */
+                nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+
+                /* ICMB */
+                strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            }
+            /* Hungary */
+            else if (strncmp((char *)&mccmnc[0], "216", 3) == 0) {
+                nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+                nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+                nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+                nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+
+                /* IMCB, Reg/Stack, UA internal configurations */
+                /* Call */
+                nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F;   // enable SRVCC, aSRVCC, midSRVCC, bSRVCC
+                nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                     = 101;
+                nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt                  = 102;
+                nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt                 = 96;
+                nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt              = 98;
+            #ifdef __EVS_SUPPORT__
+                nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+                nvram_ims_profile_ptr->ua_config.bw_recv_end                        = 2;
+                nvram_ims_profile_ptr->ua_config.bw_send_end                        = 2;
+                nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0xFF; 
+            #endif /* __EVS_SUPPORT__ */
+
+                /* Reg/Stack */
+                nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;
+                nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+                nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+            
+                /* SMS */
+                nvram_ims_profile_ptr->ua_config.sms_support_in_23g                 = 0;
+
+                /* IMCB */
+                memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                strncpy ( (char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                        "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                        sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                        );
+            }
+            /* Serbia */
+            else if (strncmp((char *)&mccmnc[0], "220", 3) == 0) {
+                nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 1; 
+                nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+                nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;
+                nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+                /* IMCB, Reg/Stack, UA internal configurations */
+                /* Call */
+                nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 900;
+                nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+                nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;       // disabled for hold, conference and alerting call types
+                nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;
+                nvram_ims_profile_ptr->ua_config.ect_without_target_hold            = 1;
+                nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+                nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+            #ifdef __EVS_SUPPORT__
+                nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0xFF; 
+            #endif /* __EVS_SUPPORT__ */
+
+                /* Reg/Stack */
+                nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+            }
+            /* Montenegro */
+            else if (strncmp((char *)&mccmnc[0], "297", 3) == 0) {
+                nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+                nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;
+                nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+
+                /* IMCB, Reg/Stack, UA internal configurations */
+                /* Call */
+                nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;
+                nvram_ims_profile_ptr->ua_config.ect_without_target_hold            = 1;
+                nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+                nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+            #ifdef __EVS_SUPPORT__
+                nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0xFF; 
+            #endif /* __EVS_SUPPORT__ */
+
+                /* Reg/Stack */
+                nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                
+                /* SMS */
+                nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x00;
+            }
+            break;
+        }
+        case 157: /* Telus */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code              = 0x009D;   //operator_code = 157(Telus)
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn     = 1;
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g    = 1;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule              = 0x01;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 90;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server     = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable           = 0x000F; // enable SRVCC, aSRVCC, bSRVCC and mid-sRVCC
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming    = 1;
+            nvram_ims_profile_ptr->ua_config.follow_nw_ims_vops_support     = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant        = 0x1111;
+            nvram_ims_profile_ptr->ua_config.reg_restore_try_next_pcscf     = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+            nvram_ims_profile_ptr->ua_config.mo_invite_retry_cnt_limit      = 3;
+            nvram_ims_profile_ptr->ua_config.stir_shaken_for_privacy        = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+            nvram_ims_profile_ptr->ua_config.br_begin                       = 4;
+            nvram_ims_profile_ptr->ua_config.br_end                         = 6;
+#endif /* __EVS_SUPPORT__ */
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.add_content_transfer_encoding_in_sms = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                 = 8000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_f_timer                 = 16000;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani            = 1;
+            nvram_ims_profile_ptr->ua_config.wfc_refresh_23g                = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.pcscf_reselect_flag = 1;
+            nvram_ims_profile_ptr->imc_config.ims_video_qci                 = 7;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference           = 1; //v6_only
+            nvram_ims_profile_ptr->imc_config.ignore_sgn_qci_check          = 0x7; // 111
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable      = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                      "0,2,6,1,3,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                      "0,2,6,1,3,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                    );
+
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_max_timer         = 300000;
+            nvram_ims_profile_ptr->imc_config.enable_ddd_feature            = 1;
+            break;
+        }
+        case 158: /* Zain */
+        {
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Saudi Arabia mcc = 420 */
+                if (strncmp((char *)&mccmnc[0], "420", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x009E;   //operator_code = 158(Zain)
+                    
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;       //v4_prefer
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1080;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 7200;
+                    
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                    
+                    /*IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                    
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_keep_alive                  = 240;     // 4 minutes
+                    nvram_ims_profile_ptr->ua_config.keep_alive_mode                    = 1;       // Keep_Alive_connection
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype            = 1;
+                    nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;        // Add country in WFC MESSAGE/REG/INVITE
+                    nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                    = 0x01;  // Add CNI to all operations.
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+                    
+                    
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+                    nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp            = 1;
+                    nvram_ims_profile_ptr->imc_config.ims_voice_qci                     = 255;     //Disable voice QCI checking
+                    
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+                    
+                }
+                /* Iraq */
+                else if (strncmp((char *)&mccmnc[0], "418", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x009e;     //operator_code = 158(Zain)
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                    
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 60;         
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 60; 
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    
+
+                    /* Reg/Stack */
+                        
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;
+
+                    /* IMC */
+                           
+                }
+                /* Kuwait */
+                else if (strncmp((char *)&mccmnc[0], "419", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x009e;     //operator_code = 158(Zain)
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                    
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;         
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;          
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;          
+                    nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;          
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;          
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;          
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;          
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;         
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = -1;         
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;          
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;          
+                    nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none            = 0;  
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout            = 30;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;       
+                    nvram_ims_profile_ptr->ua_config.wfc_with_plani                     = 1;          
+
+                    /* IMCB */
+
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;          
+                }
+                /* Bahrain */
+                else if (strncmp((char *)&mccmnc[0], "426", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x009e;     //operator_code = 158(Zain)
+                    
+                    nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 20000;
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1; 
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;          
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;
+                    
+                    /* IMCB */
+
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;          
+                    
+                }
+            }
+            break;
+        }
+        case 159: /* STC */
+        {
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Saudi Arabia mcc = 420 */
+                if (strncmp((char *)&mccmnc[0], "420", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x009F;   //operator_code = 159(STC)
+
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;       //v4_prefer
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1100;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                    /*IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+                    nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+
+                    /* IMCB */
+                    memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                    strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                            "N,33,18,0;N,*,0,1;E,*,0,1;",
+                            sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                            );
+                }
+                /* Kuwait */
+                else if (strncmp((char *)&mccmnc[0], "419", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x009f;     //operator_code = 159(Viva_STC)
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;         
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;          
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;          
+                    nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;          
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 60;         
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 60;         
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;          
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;          
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.UA_net_ipsec                       = 0;          
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP    = 1;          
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;       
+                    nvram_ims_profile_ptr->ua_config.add_timezone_to_pani               = 2;          
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;          
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 7200;       
+                    nvram_ims_profile_ptr->ua_config.wfc_with_plani                     = 1; 
+                    nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0; 
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;                    
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;          
+
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 1;          
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+                }
+                /* Bahrain */
+                else if (strncmp((char *)&mccmnc[0], "426", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x009f;
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                    /* Call */            
+                    nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi                 = 1;          
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 50;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 50;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.terminal_based_cw                  = 0;
+                    
+                    /* Reg/Stack */ 
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500; 
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 1800;
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+                    
+                    /* IMCB */
+
+                    /* IMC */ 
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;          
+                }
+            }
+            break;
+        }
+        case 160: /* Webe*/
+        {
+            /*default setting is for malaysia(mcc=502), for adding other country, please include by with_imsi_info*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00A0;   //operator_code = 160(Webe)
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                     = 102;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt                  = 104;
+            nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt                 = 97;
+            nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt              = 96;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 7200;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+
+            break;
+        }
+        case 161: /* Play Poland */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00A1;   //operator_code = 161(Play)
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1350;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req           = 1;
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;        //lbs location info service: on
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.conference_desub_time              = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none            = 0;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.hide_vattr_when_port_zero           = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp             = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp             = 1;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+            nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                        = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                        = 2;
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+        #endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.disconnect_tcp_when_abnormal       = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.call_invite_no_rsp_ran_prio_req_timer_timeout = 3;
+            nvram_ims_profile_ptr->ua_config.always_add_user_phone_in_conf_refer = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            nvram_ims_profile_ptr->imc_config.dedicated_fallback_support        = 1;
+            break;
+        }
+        case 162: /* Freedom Canada */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code          = 0x00A2;   //operator_code = 162(Freedom)
+            nvram_ims_profile_ptr->imc_config.ussd_support          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec           = 0;
+            nvram_ims_profile_ptr->ua_config.UA_reg_http_digest     = 2;      //AKAv2_MD5
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference   = 2;        //v4_prefer
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.block_reg_when_isim_params_no_avail = 1;
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant        = 0x1111;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 90;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+            nvram_ims_profile_ptr->ua_config.conference_subscribe_timing    = 1;
+            nvram_ims_profile_ptr->ua_config.show_octet_align               = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport         = 0;
+            nvram_ims_profile_ptr->ua_config.register_expiry                = 7200;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.wait_for_sgn_timer            = 0xFFFFFFFE;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable      = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                      "0,2,6,1,3,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                      "0,2,6,1,3,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                    );
+            break;
+        }
+        case 163: /* Dialog */
+        {
+            /*default value only for Sri Lanka */
+            nvram_ims_profile_ptr->ua_config.operator_code          = 0x00A3;   //operator_code = 163(Dialog Sri Lanka)
+            nvram_ims_profile_ptr->imc_config.location_info_support          = 1;
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 180;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call  = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server          = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout        = 20;
+            nvram_ims_profile_ptr->ua_config.delay_unhold_call               = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1      = 0;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming     = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani             = 1;
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP = 1;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size  = 1500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                 = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                 = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                 = 5000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo               = 0x30;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port          = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference            = 2;     //v4_prefer
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp         = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp         = 1;
+            break;
+        }
+        case 164: /* Telenet Belgium */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00A4;   //operator_code = 164 (Telenet Belgium)
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+#endif /* __EVS_SUPPORT__ */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy ( (char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                );
+            break;
+        }
+        case 165: /* Sunrise Switzerland */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00A5;   //operator_code = 165 (Sunrise Switzerland)
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;      // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+        #endif /* __EVS_SUPPORT__ */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+            nvram_ims_profile_ptr->ua_config.geolocation_type                   = 2;
+            nvram_ims_profile_ptr->ua_config.init_reg_delay_time                = 2;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 10000;
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp            = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                "N,33,16,0;N,30,16,0;N,*,0,1;E,*,0,1;",
+                sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                );
+            break;
+        }
+        case 166: /* Salt Switzerland */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00A6;   //operator_code = 166 (Salt Switzerland)
+            
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+            
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;        //v4_prefer
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp            = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy ( (char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        case 168: /* Eir Ireland */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00A8;   //operator_code = 168 (Eir Ireland)
+
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+             nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype            = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 4000;
+            /* IMCB */
+            break;
+        }
+        case 170: /* Partner*/
+        {
+            if (with_imsi_info) {
+                if (strncmp((char *)&mccmnc[0], "425", 3) == 0) {  /*Israel*/
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00AA;   //operator_code = 170
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+                    nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+                    nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi                 = 1;
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+                    
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.wfc_with_plani                     = 1;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP    = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;
+                                     
+                }
+            }
+            break;     
+        }
+        case 171: /* WOM */
+        {
+            /*Chile mcc = 730*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00ab;     //operator_code = 171(WOM)
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;          
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;        
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;        
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;            
+            
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 1800;       
+
+            /* IMCB */
+
+            /* IMC */
+            if (with_imsi_info) {
+                if (strncmp((char *)&mccmnc[0], "732", 3) == 0) { /*Colombia*/
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                  = 0x00ab;     //operator_code = 171(WOM)
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support               = 0;
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                = 5000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                = 17000;
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 120;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi             = 1;
+                    nvram_ims_profile_ptr->imc_config.ussd_support                  = 1;
+					nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context= 0;
+                }
+            }
+            break;
+        }
+        case 172: /* Altice */
+        {
+            /*Dominican mcc = 370*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00ac;     //operator_code = 172(Altice)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;          
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;        
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;        
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.in_reply_to_support                = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype            = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+            nvram_ims_profile_ptr->ua_config.confidence_level                   = 90;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;          
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+            nvram_ims_profile_ptr->imc_config.wait_for_sgn_timer                = 86400;
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+            break;
+        }
+        case 175: /* TDC */
+        {
+            /*Denmark mcc = 238*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00af;     //operator_code = 175(TDC)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;         
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;          
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0xd;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;            
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.reg_disable_pidf                   = 0xd;
+
+            /* IMCB */
+
+            /* IMC */
+            break;
+        }
+        case 176: /* Tstar */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code          = 0x00B0;   //operator_code = 176(Tstar)
+            nvram_ims_profile_ptr->imc_config.ussd_support          = 1;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference   = 0;        //v4_only
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 180;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req        = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server      = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size  = 1500;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable      = 1;
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        case 177: /* Telecom */
+        {
+            /*Egypt mcc = 602*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00b1;     //operator_code = 177(Telecom)
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 35;         
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 35;         
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;          
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;          
+            nvram_ims_profile_ptr->ua_config.set_rtcp_0                         = 1;          
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;          
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;        
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;       
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;       
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;       
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype            = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;          
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;          
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;         
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;      
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;          
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;          
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 1;          
+            break;
+        }
+        case 178: /* Smart */
+        {
+            /*Cambodia mcc = 456*/
+            if (strncmp((char *)&mccmnc[0], "456", 3) == 0) {
+                /* reset to default */
+                imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                nvram_ims_profile_ptr->ua_config.operator_code                   = 0x00B2;   //operator_code = 178(Smart)
+
+                set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                /* IMCB, Reg/Stack, UA internal configurations */
+                /* Call */
+                nvram_ims_profile_ptr->ua_config.reg_gruu_support                = 0;
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 90;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 90;
+                nvram_ims_profile_ptr->ua_config.srvcc_feature_enable            = 0x000F;
+                nvram_ims_profile_ptr->ua_config.force_srvcc_transfer            = 0x0F;
+                nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call  = 0;
+                nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1      = 0;
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server          = 1;
+                nvram_ims_profile_ptr->ua_config.delay_unhold_call               = 1;    
+
+                /* Reg/Stack */
+                nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+                nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+
+                /* IMCB */
+                nvram_ims_profile_ptr->imc_config.ims_v4v6_preference            = 2;        //v4_prefer
+
+                memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                        "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                         sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                );
+
+                /* IMC */
+                nvram_ims_profile_ptr->imc_config.ussd_support                   = 1;
+            }
+            /*Philippines mcc = 515*/
+            else if (strncmp((char *)&mccmnc[0], "515", 3) == 0) {
+                /* reset to default */
+                imc_set_mtk_default_value(nvram_ims_profile_ptr);
+
+                nvram_ims_profile_ptr->ua_config.operator_code                   = 0x00B2;   //operator_code = 178(Smart)
+
+                set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+                /* IMCB, Reg/Stack, UA internal configurations */
+                /* Call */
+                nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call  = 0;
+                nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server      = 1;
+                nvram_ims_profile_ptr->ua_config.merge_send_bye                  = 0;
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server          = 1;
+                nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size  = 1280;
+                nvram_ims_profile_ptr->ua_config.UA_call_session_timer           = 900;
+                nvram_ims_profile_ptr->ua_config.UA_call_session_min_se          = 90;
+                nvram_ims_profile_ptr->ua_config.session_refresher_in_req        = 1;
+                nvram_ims_profile_ptr->ua_config.session_refresher_in_resp       = 1;
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 90;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 90;
+                nvram_ims_profile_ptr->ua_config.rereg_in_rat_change             = 1;
+                nvram_ims_profile_ptr->ua_config.reg_gruu_support                = 0;
+            #ifdef __EVS_SUPPORT__
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order1            = 17;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order2            = 2;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order3            = 1;
+                nvram_ims_profile_ptr->ua_config.evs_support                     = 1;
+            #endif /* __EVS_SUPPORT__ */
+                nvram_ims_profile_ptr->ua_config.prefer_original_codec           = 0;
+                nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming     = 1;
+                nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable  = 1;
+                nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout   = 30;
+                nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+                nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature          = 1;
+                nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode      = 1;
+                nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe  = 1;
+
+                /* Reg/Stack */
+                nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                 = 500;
+                nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                 = 4000;
+                nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                 = 5000;
+                nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg      = 1;
+
+                /* IMCB */
+#ifdef __EVS_SUPPORT__
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order1            = 17;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order2            = 2;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order3            = 1;
+                nvram_ims_profile_ptr->ua_config.evs_support                     = 1;
+#endif
+                nvram_ims_profile_ptr->imc_config.ims_v4v6_preference            = 2;        //v4_prefer
+            }
+            break;
+        }
+        case 179:/*Newroz*/
+        {
+            /*Iraq mcc = 418*/
+            nvram_ims_profile_ptr->ua_config.operator_code                   = 0x00B3; //Newroz
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 90;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server          = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server      = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                  = 0;
+            nvram_ims_profile_ptr->ua_config.terminal_based_cw               = 0;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer            = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call  = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP = 1;
+            nvram_ims_profile_ptr->ua_config.register_expiry                 = 3600;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                 = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                 = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                 = 5000;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                = 0;
+
+            /*IMCB*/
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference            = 2;        //v4_prefer
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.disable_isim_application       = 1;
+
+            break;
+        }
+        case 180:/*Swazi*/
+        {
+            /*Swaziland mcc = 653*/
+            nvram_ims_profile_ptr->ua_config.operator_code                   = 0x00B4; //Swazi
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout      = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout     = 120;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                  = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call  = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1      = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.register_expiry                 = 3600;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                = 0;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo               = 0x03;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP = 1;
+
+            /*IMCB*/
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference            = 2;        //v4_prefer
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                      "0,2,3,6,1,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                      "0,2,3,6,1,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                    );
+
+            break;
+        }
+        case 181:/*Telkom*/
+        {
+            /*default is for SouthAfrica MCC = 655*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00B5;   //operator_code = 181 (Telkom_SouthAfrica)
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 1;
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;
+            break;
+        }
+        case 182: /* Proximus */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00B6;   //operator_code = 182 (Proximus)
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F; // enable SRVCC, aSRVCC, bSRVCC and mid-SRVCC
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.ignore_380_emg_xml                 = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.use_org_sdp_for_invite_without_sdp = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.sms_support_in_23g                 = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2; //v4_prefer
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp            = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        case 183: /* Personal */
+        {
+            /*default is for Argentina MCC = 722*/
+            imc_set_mtk_default_value(nvram_ims_profile_ptr);
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00B7;   //operator_code = 183 (Personal)
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req           = 1;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_resp          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.set_rtcp_0                         = 1;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+            nvram_ims_profile_ptr->ua_config.add_phone_context_ignore_number_type = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout             = 20;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                      = 0x01;  // Add CNI to all operations.
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+
+            /* IMCB */
+
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+            break;
+        }
+        case 184: /* Viettel/Vietnam */
+        {
+            /*default is for Vietnam MCC = 452*/
+            imc_set_mtk_default_value(nvram_ims_profile_ptr);
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00B8;   //operator_code = 184 (Viettel)
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x01;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req           = 1;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_resp          = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.terminal_based_cw                  = 0;
+            nvram_ims_profile_ptr->ua_config.enable_in_band_tone_in_hold        = 0;
+            nvram_ims_profile_ptr->ua_config.access_network_info_type           = 4;            
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 16;
+            nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled         = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                     = 128000;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 7200;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            nvram_ims_profile_ptr->ua_config.treg                               = 16;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2; //v4_prefer
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 10000;    //resource_retain_timer = 10 seconds
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+
+            /* IMC*/
+
+            break;
+        }
+        case 185: /*2degrees/New Zealand*/
+        {
+            imc_set_mtk_default_value(nvram_ims_profile_ptr);
+            nvram_ims_profile_ptr->ua_config.operator_code                               = 0x00B9;   //operator_code = 185
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.ussd_support                               = 1;
+            nvram_ims_profile_ptr->imc_config.location_info_support                      = 1;
+
+
+            /*Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout                  = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout                 = 90;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call              = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                      = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe              = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                              = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se                      = 90;
+            nvram_ims_profile_ptr->ua_config.dereg_send_bye                              = 1;
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                             = 0x01;  // Add CNI to all operations.
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp         = 0;
+            nvram_ims_profile_ptr->ua_config.in_reply_to_support                         = 0;
+
+            /*Reg*/
+            nvram_ims_profile_ptr->ua_config.register_expiry                             = 3600;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                            = 0;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                           = 0x20;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference                        = 2;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport                      = 0;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                         = 1;
+            nvram_ims_profile_ptr->ua_config.curr_loc_dir_none_for_wifi                  = 1;
+
+           /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support                   = 1;
+      
+
+            break;
+        }
+        case 186: /*Idea/India*/
+        {
+            imc_set_mtk_default_value(nvram_ims_profile_ptr);
+            nvram_ims_profile_ptr->ua_config.operator_code                             = 0x00BA;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+
+            //common
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg                  = 1;
+            nvram_ims_profile_ptr->imc_config.location_info_support                    = 1;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                             = 0x01;
+
+            //call
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer                     = 3600;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout                = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout               = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition                      = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                    = 1;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403               = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call            = 0;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming               = 1;
+            nvram_ims_profile_ptr->ua_config.support_ringing_downgrade                 = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode                = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature                    = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout         = 30;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec                     = 0;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                               = 0;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant                   = 0x1111;
+            nvram_ims_profile_ptr->ua_config.delay_ecpi2_at_183                        = 1;
+            //Reg
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size            = 1200;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                          = 0;
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery                    = 1;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                              = 0;
+            nvram_ims_profile_ptr->ua_config.support_ringing_downgrade                 = 1;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout      = 5;
+            nvram_ims_profile_ptr->ua_config.geolocation_type                          = 2;
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                           = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                       = 1;
+            nvram_ims_profile_ptr->ua_config.call_invite_no_rsp_ran_prio_req_timer_timeout = 3;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout                  = 30;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+
+            break;
+        }
+        case 187:/*Safaricom/Kenya*/
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00BB;
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+
+            /*REG*/
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 5000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 40000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 50000;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP    = 1;
+
+            /*Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled         = 1;
+			nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+			nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+#endif
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            nvram_ims_profile_ptr->imc_config.ignore_sgn_qci_check              = 0x07;
+            break;
+        }
+        case 188: /* A1 */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                          = 0x00BC;   //operator_code = 188 (A1)
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            
+            /* Austria */
+            if (strncmp((char *)&mccmnc[0], "232", 3) == 0) {                
+                nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 2;        // IMS reg maintained at 23G but initial reg not allowed
+                nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+                nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+                nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg           = 1;
+
+                /* IMCB, Reg/Stack, UA internal configurations */
+                /* Call */
+                nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 250;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 250;
+                nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x0007;   // enable SRVCC, aSRVCC and mid-SRVCC
+                nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0x07;
+                nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                nvram_ims_profile_ptr->ua_config.follow_nw_ims_vops_support         = 1;
+
+            #ifdef __EVS_SUPPORT__
+                nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+                nvram_ims_profile_ptr->ua_config.bw_recv_end                        = 2;
+                nvram_ims_profile_ptr->ua_config.bw_send_end                        = 2;
+                nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0xFF; 
+            #endif /* __EVS_SUPPORT__ */
+
+                /* Reg/Stack */
+                nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1400;
+                nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+
+                /* IMCB */
+                memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+                strncpy ( (char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                        "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                        sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                        );
+                nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+            }
+            /* Belarus */
+            else if (strncmp((char *)&mccmnc[0], "257", 3) == 0) {
+                nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+                nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+                nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+
+                /* IMCB, Reg/Stack, UA internal configurations */
+                /* Call */
+                nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                    = 1;
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            
+                /* Reg/Stack */
+                nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1080;
+                nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+
+                /* IMCB */
+                nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+            }
+            /* Slovenia */
+            else if (strncmp((char *)&mccmnc[0], "293", 3) == 0) {
+                nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+                nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+                nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+
+                /* IMCB, Reg/Stack, UA internal configurations */
+                /* Call */
+                nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+                nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+
+            #ifdef __EVS_SUPPORT__
+                nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+            #endif /* __EVS_SUPPORT__ */
+
+                /* Reg/Stack */
+                nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+                nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1358;
+                nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                
+                /* IMCB */
+                nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;        //v4_prefer
+            }
+            /* Bulgaria */
+            else if (strncmp((char *)&mccmnc[0], "284", 3) == 0) {
+                nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+                nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+                nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+
+                /* IMCB, Reg/Stack, UA internal configurations */
+                /* Call */
+                nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+                nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                nvram_ims_profile_ptr->ua_config.reuse_transport_methods            = 0x00000254; // REFER, CANCEL, ACK, SUBSCRIBE
+            
+                /* Reg/Stack */
+                nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1330;
+                nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                
+                /* IMCB */
+            }
+            /* Croatia */
+            else if (strncmp((char *)&mccmnc[0], "219", 3) == 0) {
+                nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+                nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+                nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+
+                /* IMCB, Reg/Stack, UA internal configurations */
+                /* Call */
+                nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 65;
+                nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 65;
+                nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            #ifdef __EVS_SUPPORT__
+                nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+            #endif /* __EVS_SUPPORT__ */
+            
+                /* Reg/Stack */
+                nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;
+                nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                
+                /* IMCB */
+                nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;        //v4_prefer
+            }
+            break;
+        }
+        case 189:/*UMOBILE/Malaysia*/
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00BD;   //operator_code = 189 (UMOBILE/Malaysia)
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;
+
+            /*Reg*/
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1200;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                       = 0;
+            nvram_ims_profile_ptr->ua_config.rel_conf_if_no_participant         = 1;
+
+            /*IMCB*/
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 8000;
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+
+            /*Call*/
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 95;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.set_rtcp_0                         = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp= 0;
+
+            break;
+        }
+
+        case 191: /* GrameenPhone Bangladesh */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00BF;   //operator_code = 191 (GrameenPhone Bangladesh)
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;            
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            
+            /* IMCB, Reg/Stack, UA Internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout            = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout           = 120;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call        = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant               = 0x1111;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable        = 1;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp   = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe        = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming           = 1;
+            nvram_ims_profile_ptr->imc_config.ussd_support                         = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout              = 30;
+            
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg             = 1;
+
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;
+
+            break;
+        }
+        
+        case 192: /* Robi@Bangladesh */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0xC0;   //operator_code = 192 (Robi Bangladesh)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            
+            /* call */
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant            = 0x1111;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 30;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 30;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 900;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 30;
+
+            break;
+        }
+
+        case 193: /* Banglalink/Bangladesh */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                       = 0xC1;   //operator_code = 192 (Banglalink/Bangladesh)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 20;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 60;
+            nvram_ims_profile_ptr->ua_config.ect_enable                           = 1;
+            nvram_ims_profile_ptr->imc_config.ussd_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant              = 0x1111;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;          
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming          = 1;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable       = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout        = 30;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature               = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode           = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe       = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+
+
+            /*Reg/Stack*/
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1100;
+            nvram_ims_profile_ptr->ua_config.geolocation_type                     = 2;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                  = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;    // Suggestion value
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;     // Suggestion value
+
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;    //Suggestion value
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;    //Suggestion value
+
+            break;
+        }
+
+        case 195: /* O2 Czech */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00C3;   //operator_code = 195 (O2 Czech)
+
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;        // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 3600;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.ignore_380_emg_xml                 = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Slovakia */
+                if (strncmp((char *)&mccmnc[0], "231", 3) == 0) {
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00c3;     //operator_code = 195(O2 Slovakia)
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 3600;       
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;          
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;        
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;        
+                    nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;          
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                  = 0x03;       
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;        
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;       
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;       
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;       
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+
+                    /* IMCB */
+
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                }
+            }
+            break;
+        }
+        case 196: /* FirstNet */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code             = 0x00C4;      //operator_code = 196(FirstNet)
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer    = 8000;  // 8000ms (8 seconds)
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_base_timer   = 120*1000;    // 120000s (120 seconds) CDR-LTE-1468
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_max_timer    = 7200*1000;   // 7200000ms (7200 seconds) CDR-LTE-1468
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer     = 0;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size    = 1230;
+            nvram_ims_profile_ptr->ua_config.UA_call_no_resource_code = 580;   //AT&T TC LTE-BTR-5-5560
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se   = 0;
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g  = 3;     // <CDR-NWS-705> IMS registration allowed and maintained in 23G as well, <CDR-LTE-1880> de-registration in GERAN
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn   = 1;
+            nvram_ims_profile_ptr->imc_config.ecc_guard_timer         = 10;
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery   = 1;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg = 1;
+            /*location info*/
+            nvram_ims_profile_ptr->imc_config.location_info_support   = 1;
+            nvram_ims_profile_ptr->imc_config.ussd_support            = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.att_family              = 1;
+            nvram_ims_profile_ptr->imc_config.block_reg_when_isim_params_no_avail = 1;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule            = 0x01;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status     = 4;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_watchdog_timer     = 300;  // v21.3 <CDR-IMS-1210>
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.oir_privacy_to_header              = 1;
+            nvram_ims_profile_ptr->ua_config.register_cap_whenever              = 1;
+            nvram_ims_profile_ptr->ua_config.no_auto_retry_for_mo_call          = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.conference_subscribe_timing        = 1;
+            nvram_ims_profile_ptr->ua_config.set_zero_cell_id_in_wifi           = 1;
+            nvram_ims_profile_ptr->ua_config.reject_mtcall_by_vops              = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 60;
+            nvram_ims_profile_ptr->ua_config.reject_code_in23G                  = 488;
+            nvram_ims_profile_ptr->ua_config.delay_unhold_call                  = 1;
+            nvram_ims_profile_ptr->ua_config.add_imageattr                      = 1;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.video_conf_if_one_is_video         = 1;
+            nvram_ims_profile_ptr->ua_config.call_rel_holdcall_in_midcall_SRVCC = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_send_bye                     = 1;
+            nvram_ims_profile_ptr->ua_config.conf_user_count_includes_host      = 0;
+            nvram_ims_profile_ptr->ua_config.pem_use_sdp_rtp_drct               = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.conference_desub_time              = 2;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.reject_text_when_text_off          = 0;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.text_feature_tag                   = 1;
+            nvram_ims_profile_ptr->ua_config.tty_enable                         = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.follow_mt_pt_list                  = 1;
+            nvram_ims_profile_ptr->ua_config.accept_wifi_call_if_audio_cap_0    = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 45;
+            nvram_ims_profile_ptr->ua_config.add_pani_in_ack                    = 1;
+            nvram_ims_profile_ptr->ua_config.stir_shaken_for_privacy            = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+            nvram_ims_profile_ptr->ua_config.try_same_pcscf_rereg               = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                     = 32000; // 32 sec
+            nvram_ims_profile_ptr->ua_config.UA_reg_d_timer                     = 32000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_f_timer                     = 32000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_h_timer                     = 32000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_j_timer                     = 32000;
+            nvram_ims_profile_ptr->ua_config.reg_try_all_pcscf_5626             = 1;
+            nvram_ims_profile_ptr->ua_config.close_unprotected_conn             = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_delay_time                   = 2;
+            nvram_ims_profile_ptr->ua_config.wfc_refresh_23g                    = 1;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.geolocation_type                   = 2;
+            nvram_ims_profile_ptr->ua_config.init_reg_delay_time                = 2;
+            nvram_ims_profile_ptr->ua_config.rtt_tag_mode                       = 1;
+            nvram_ims_profile_ptr->ua_config.reject_rcs_request                 = 480;
+            nvram_ims_profile_ptr->ua_config.sit_tcp_2xx_rsp_retransmission     = 0;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;
+            nvram_ims_profile_ptr->ua_config.confidence_level                   = 90;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+            nvram_ims_profile_ptr->imc_config.ims_video_qci                     = 255;
+            nvram_ims_profile_ptr->imc_config.ignore_media_qci_check            = 0xff2; // 111111110010, ignore video qci
+            nvram_ims_profile_ptr->imc_config.enable_audio_precondition         = 1;
+            nvram_ims_profile_ptr->imc_config.video_resource_retain_timer       = 8000;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);              //ATT: "N,33,16,0;N,28,16,0;N,*,0,1;E,*,0,1;"
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,28,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Mexico */
+                if (strncmp((char *)&mccmnc[0], "334", 3) == 0) {
+                    nvram_ims_profile_ptr->ua_config.use_local_conf_participant_list_in_srvcc = 1;
+                }
+            }
+            break;
+        }
+        case 198:
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00C6;   //operator_code = 198 (Sberbank/Russia)
+
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+
+
+            /*REG*/
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                       = 0;
+
+            /*CALL*/
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+
+
+            break;
+        }
+        case 199: /* Vivacom Bulgaria */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00C7;   //operator_code = 199 (Vivacom Bulgaria)
+
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;        // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;        // v4_prefer
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 60;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 60;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F;   // enable SRVCC, aSRVCC, bSRVCC and mid-SRVCC
+                  nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp = 0;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                = 1;
+            nvram_ims_profile_ptr->ua_config.evs_support                         = 1;
+        #endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout            = 20;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 2400;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+            nvram_ims_profile_ptr->ua_config.rereg_in_oos_end                   = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.wait_for_sgn_timer                = 86400; // 24h
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        case 200: /* JTL Kenya,MEA region*/
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00C8;   //operator_code = 200(JTL/Kenya)
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+
+            /*REG*/
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                       = 0;
+            /*CALL*/
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 55;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 65;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 30;
+			nvram_ims_profile_ptr->ua_config.conf_refer_order_by_call_id        = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        case 201: /* KPN Netherlands */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00C9;   //operator_code = 201 (KPN Netherlands)
+
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;        // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F;   // enable SRVCC, aSRVCC, bSRVCC and mid-SRVCC
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none            = 0;
+            nvram_ims_profile_ptr->ua_config.reg_when_norsp_before_timeout      = 1;
+            nvram_ims_profile_ptr->ua_config.conf_sub_timer_timeout             = 3660;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+            nvram_ims_profile_ptr->ua_config.cmr                                = 1;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 3;
+            nvram_ims_profile_ptr->ua_config.UA_call_evs_pt                     = 112;
+        #endif
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+            nvram_ims_profile_ptr->ua_config.de_subscribe                       = 0;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            break;
+        }
+        
+        case 202: /* Spark@Newzealand */
+        {   
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00CA;  //operator_code = 202 (Spark@Newzealand)
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            
+            
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.delay_unhold_call                  = 1;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.play_local_tone_when_no_rtp_pkt_on_remote_hold        = 1;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                = 1;
+            nvram_ims_profile_ptr->ua_config.evs_support                         = 1;
+        #endif
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                = 1;
+            nvram_ims_profile_ptr->ua_config.evs_support                         = 1;
+        #endif /* __EVS_SUPPORT__ */
+
+           /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+            
+           /* SMS */
+           nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x00;
+            
+           break;    
+        }
+        
+        case 203: /* NOS Portugal */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00CB;   //operator_code = 203 (NOS Portugal)
+
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x000F;   // enable SRVCC, aSRVCC, bSRVCC and mid-SRVCC
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.reuse_transport_methods            = 0x000020D8;  // ACK, CANCEL, PRACK, BYE, UPDATE
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0xff;     // ch-aw-recv: -1
+        #endif /* __EVS_SUPPORT__ */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 4;
+            nvram_ims_profile_ptr->ua_config.access_network_info_type           = 4;
+
+            /* IMCB */
+            break;
+        }
+        case 204: /* Rogers/Canada */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00CC;   //operator_code = 204 (Rogers/Canada)
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 1;
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn             = 1;
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+            nvram_ims_profile_ptr->imc_config.emergency_call_category_mapping   = 2; // SOS URN only
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x0F;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.text_feature_tag                   = 1;
+            nvram_ims_profile_ptr->ua_config.tty_enable                         = 1;
+            /* Reg.*/
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_c_timer                     = 120000;
+            nvram_ims_profile_ptr->ua_config.reg_disable_pidf                   = 0x0F;    // Enable WFC normal reg
+            nvram_ims_profile_ptr->ua_config.delay_normal_or_em_reg_if_they_occur_simulta   = 2;
+            nvram_ims_profile_ptr->ua_config.sit_tcp_2xx_rsp_retransmission     = 0;
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype            = 1;
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism        = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 2;  // for VPLMN only
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3 = 1;
+            nvram_ims_profile_ptr->ua_config.br_end = 11;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1 = 0;
+            break;
+        }
+        case 205: /* Altan/Mexico */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00CD;   //operator_code = 205 (Altan/Mexico)
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 45;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.use_org_sdp_for_invite_without_sdp = 1;
+            nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_ptime             = 0;
+            nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_fmtp              = 1;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg           = 1;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            break;
+        }
+        case 206: /* Sky UK */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x00CE;   //operator_code = 283(MEO/Portugal)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 90;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_enable                           = 1;
+            nvram_ims_profile_ptr->ua_config.ect_without_target_hold              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai                 = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                     = 1;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+        
+            break;
+        }
+        case 207: /* CTM@/Macao */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00CF;   //operator_code = 207 (CTM@/Macao)
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP    = 1;
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 7200;
+
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req           = 1;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_resp          = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable     = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 30;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode         = 1;
+            break;
+         }
+
+        case 208: /* 3/Macao  */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00D0;   //operator_code = 208 (3@Macao)
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                       = 0;
+
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req           = 1;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_resp          = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 0;
+            break;
+         }
+
+        case 209: /* Avantel */
+        {
+            /*Colombia mcc = 732*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00d1;     //operator_code = 209(Avantel)
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 20;         
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 20;         
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;          
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 20000;      
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;       
+            nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;
+            nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi                 = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;          
+
+            /* IMC */
+            break;
+        }
+
+        case 210:
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                                      = 0x00D2;   //operator_code = 211 (BSNL@India)
+
+             /*IMCB, IMC*/
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference                               = 2;            
+            nvram_ims_profile_ptr->imc_config.ussd_support                                      = 1;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                                      = 0x12;       // relied on            
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable                          = 1;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg                           = 1;
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel                 = 1;    //delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout                           = 30;
+            nvram_ims_profile_ptr->ua_config.support_ringing_downgrade                          = 1;
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g                            = 2;
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery                             = 1;			
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy ( (char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                "0,2,6,1,4,5,3,0", 
+                sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1         //set pcscf policy for home NW 
+                );
+
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy ( (char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,  
+                "0,2,6,1,4,5,3,0", 
+                sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1        //set pcscf policy for visit NW 
+                );
+
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy ( (char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,27,18,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout                         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout                        = 45;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call                     = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                             = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode                         = 1;
+            
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming                        = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe                     = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.update_ipsec_port_494                              = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                                    = 20000;
+            nvram_ims_profile_ptr->ua_config.call_invite_no_rsp_ran_prio_req_timer_timeout      = 3;
+
+            break;
+        }
+        case 211: /* CW */
+        {
+            /*Panama mcc = 714*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00d3      ;//operator_code = 211(CW)
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;         
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;          
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;          
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;          
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;
+            nvram_ims_profile_ptr->ua_config.enable_in_band_tone_in_hold        = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;       
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 7200;       
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;          
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;          
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+            break;
+        }
+        case 213: /* Motiv/Russia */
+        {
+            /* default is for Russia MCC = 250 */
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00D5;   //operator_code = 213(Motiv)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+            
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable               = 1;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count        = 0;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time                = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+            
+            break;    
+        }
+        case 214: /* IDC Moldova  */
+        {
+            /* Moldova mcc = 259 */
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00D6;   //operator_code = 214 (IDC Moldova)
+            
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x0001;   // enable SRVCC
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.join_send_bye                      = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 32;
+            
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;
+            break;
+
+        }
+        case 215: /* Cellcard Cambodia */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x00D7;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 60;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 20;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1300;
+        
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference                 = 2;
+
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->imc_config.ussd_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP    = 1;          
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable     = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 30;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode         = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+
+            /*Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 1800;
+
+            break;
+        }
+        
+        case 216: /* Zong@Pakistan */
+        {   
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x00D8;   //operator_code = 216 (Zong Pakistan)
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g              = 1;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference                 = 2;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403          = 0;
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 40;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 45;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;      //disable precondition
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable     = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 30;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode         = 1;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                = 1;
+            nvram_ims_profile_ptr->ua_config.evs_support                         = 1;
+        #endif /* __EVS_SUPPORT__ */
+            
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+           break;    
+        }
+        
+        
+        
+        
+        case 217: /* Telekom */
+        {
+            /*Slovenia mcc = 293*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00d9;     //operator_code = 217(Telekom)
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;         
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;          
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;          
+            nvram_ims_profile_ptr->ua_config.br_end                             = 6;          
+            nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;          
+            nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;          
+            nvram_ims_profile_ptr->ua_config.bw_end                             = 2;          
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                        = 2;          
+            nvram_ims_profile_ptr->ua_config.bw_send_end                        = 2;          
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;         
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;          
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;          
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye_delay               = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;        
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;       
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;       
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;       
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 900;        
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;          
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;          
+            break;
+        }
+        case 218: /* Rakuten */
+        {
+            /*Japan mcc = 440*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00da;     //operator_code = 218(Rakuten)
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;          
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 45;
+            strncpy ( (char*)nvram_ims_profile_ptr->ua_config.user_agent,  
+                      "00", 
+                      sizeof (nvram_ims_profile_ptr->ua_config.user_agent)-1
+                    );
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;            
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 8000;
+            nvram_ims_profile_ptr->ua_config.UA_call_no_resource_code           = 580;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status               = 2;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0xFF;
+            nvram_ims_profile_ptr->ua_config.hf_only                            = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_no_resource_code           = 580;
+			
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 100;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP    = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;          
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status               = 0x02;
+            break;
+        }
+        case 219: /* MyTel */
+        {
+            /*Myanmar mcc = 414*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00db;     //operator_code = 219(MyTel)
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+          
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;/*3600s*/
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1;
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_max_timer             = 7200*1000;
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_base_timer            = 120*1000;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;      // v4_prefer
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;
+       
+            break;
+        }
+        case 220: /* Tigo */
+        {
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /*Guatemala mcc = 704*/
+                if (strncmp((char *)&mccmnc[0], "704", 3) == 0) {
+                    /*Guatemala mcc = 704*/
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00dc;     //operator_code = 220(Tigo)
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;          
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;        
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;        
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP    = 1;          
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;          
+
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg           = 1;
+                }    
+                /* Colombia */
+                else if (strncmp((char *)&mccmnc[0], "732", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00dc;     //operator_code = 220(Tigo)
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;          
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;         
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;       
+                    nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 2;   
+
+                    /* IMCB */
+
+                    /* IMC */
+                }
+                /* Bolivia */
+                else if (strncmp((char *)&mccmnc[0], "736", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00dc;     //operator_code = 220(Tigo)
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    
+                    /* Call*/
+                    
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+
+                    /* Reg/Stack */
+
+                    /* IMCB */
+
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+                
+                }
+            }    
+            break;
+        }
+
+        case 221: /* TPG Singapore */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00DD;   //operator_code = 221 (TPG Singapore)            
+            nvram_ims_profile_ptr->imc_config.nr_recovery_support               = 1;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 60;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 60;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant            = 0x1111;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.curr_loc_dir_none_for_wifi         = 1;
+            
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                = 5000;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;
+            nvram_ims_profile_ptr->ua_config.sip_bye_retransmit_total_time      = 32000;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.dereg_sms_disconnect_stack     = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable      = 1;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count   = 0;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time           = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time            = 10000;
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp            = 1;
+
+            break;
+        }
+
+        case 223: /* Ooredoo */
+        {
+            /*Kuwait mcc = 419*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00df;     //operator_code = 223(Ooredoo)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;         
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;          
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;          
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;          
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;          
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;          
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;          
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;          
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;          
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_On_Demand    = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 7200;          
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;
+            if (with_imsi_info) {
+                /*indosat*/
+                if (strncmp((char *)&mccmnc[0], "510", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00df;     //operator_code = 223(Ooredoo)
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                     /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_On_Demand    = 0;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+                    nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;
+                    nvram_ims_profile_ptr->ua_config.delay_unhold_call                  = 1;
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+                    nvram_ims_profile_ptr->ua_config.ect_delay_target_unhold            = 2;
+                    nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+                    
+                    /*Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                }
+            } 
+
+            /* IMC */
+            break;
+        }
+        case 224: /* Telkomsel/Indonesia */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                             = 0x00E0;     //operator_code = 224 (Telkomsel/Indonesia
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            //call
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout                = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout               = 120;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition                      = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                    = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call            = 0;
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none                   = 0;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server                = 1;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature                    = 1;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                      = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                      = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                      = 1;
+            nvram_ims_profile_ptr->ua_config.evs_support                               = 1;
+        #endif /* __EVS_SUPPORT__ */
+            
+            /* Reg/Stack */      
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe            = 1;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size            = 1500;
+
+            /*IMCB*/
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer                    = 8000;     //resource_retain_timer = 8000ms (8 seconds)
+            nvram_ims_profile_ptr->imc_config.disable_isim_application                 = 1;
+            break;
+        }
+
+        case 225: /*XL/Indonesia*/
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                             = 0x00E1;     //operator_code = 2225 (XL/Indonesia)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            if (with_imsi_info) {
+                /*XL*/
+                if (strncmp((char *)&mccmnc[0], "510", 3) == 0) {
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout                = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout               = 90;
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403               = 0;
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming               = 1;
+                    nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout             = 30;
+                    nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout      = 5;
+                    nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature                    = 1;
+                    nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode                = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant                   = 0x1111;     
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout                  = 20;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe            = 1;
+                    nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable            = 1;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MSS                 = 1230;
+                    nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context           = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call            = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                    = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server                = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                      = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                      = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                      = 1;
+                    nvram_ims_profile_ptr->ua_config.evs_support                               = 1;
+                #endif /* __EVS_SUPPORT__ */
+
+                    /*Reg/Stack*/
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg                 = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                       = 3;        // Add country in WFC and VOLTE MESSAGE/REG/INVITE
+
+                    /*IMC*/
+                    nvram_ims_profile_ptr->imc_config.ussd_support                             = 1;
+                }
+            }
+            break;
+        }
+        
+        case 227: /* Wind */
+        {
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00e3;     //operator_code = 227(Wind)
+                /*Italy mcc = 222*/
+
+                if (strncmp((char *)&mccmnc[0], "222", 3) == 0) {
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 900;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_retry_base_time             = 30;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_retry_max_time              = 300;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype            = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 24000;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+                    nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                = 0;
+                    
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.auto_re_reg_max_timer             = 300000;     
+                    
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 2;
+                    nvram_ims_profile_ptr->imc_config.send_sip_dereg_at_23g             = 0;
+                }
+                /* Greece */
+                else if (strncmp((char *)&mccmnc[0], "202", 3) == 0) {
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00e3;     //operator_code = 227(Wind)
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;         
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;          
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;          
+                    nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x00;       
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;          
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;        
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;       
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;       
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1390;       
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 2400;       
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = -1;
+                #endif /* __EVS_SUPPORT__ */
+                    /* IMCB */
+
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;          
+                }
+            }
+            break;
+        }
+        case 228: /* Celcom/Malaysia */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00E4; //operator_code = 228 (Celcom/Malaysia)            
+  
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                       = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;      //disable precondition
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode         = 1;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable     = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 30;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;			
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+            nvram_ims_profile_ptr->ua_config.delay_unhold_call                  = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 3;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x0A;
+            nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi                 = 1;
+            
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;        //v4_prefer
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype            = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                  = 0X03;
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 8000;     //resource_retain_timer = 8000ms (8 seconds)
+
+            /*Reg/Stack*/
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg           = 1;
+            
+            break;
+        }
+
+
+        case 231: /*Maxis/Malaysia*/
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00E7; //operator_code = 231 (Maxis/Malaysia)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 8000;     //resource_retain_timer = 8000ms (8 seconds)
+            
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.terminal_based_cw                  = 0;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+        #endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp = 0;
+
+            /*Reg/Stack*/
+            nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi                 = 1;
+            nvram_ims_profile_ptr->ua_config.add_timezone_to_pani               = 2;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+
+            /*IMCB*/
+            nvram_ims_profile_ptr->imc_config.dedicated_fallback_support        = 1;
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+
+            break;
+       }
+                
+        case 232: /* Mobitel@SriLanka */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                             = 0x00E8;     //operator_code = 232 (Mobitel
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g                   = 2;
+            nvram_ims_profile_ptr->imc_config.ussd_support                             = 1;
+            nvram_ims_profile_ptr->ua_config.register_expiry                           = 300000;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                    = 1;
+
+            //call
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout                = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout               = 90;
+            nvram_ims_profile_ptr->ua_config.register_cap_whenever                     = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context           = 0;    
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming               = 1;    
+
+            break;
+        }
+
+        case 233: /* Pelephone */
+        {
+            /*Israel mcc = 425*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00e9;     //operator_code = 233(Pelephone)
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant            = 0x1111;     
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 2400;       
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;         
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.UA_reg_http_digest                 = 2;          
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP    = 1;          
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;       
+
+            /* IMCB */
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 3;          
+            break;
+        }
+        case 234: /* Plus/Poland */
+        {
+
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00EA;   //operator_code = 234(Plus)
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;    
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 1800;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.dedicated_fallback_support        = 1;
+
+            /* IMC */
+        
+            break;
+        }
+        case 235: /* VIP */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                              = 0x00eb;     //operator_code = 235(VIP)
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /*Serbia mcc = 220*/
+                if (strncmp((char *)&mccmnc[0], "220", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 40;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 40;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                         = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                              = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                         = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                         = 6;
+                #endif /* __EVS_SUPPORT__ */
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+                    /* SMS */
+                    nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x00;
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;        //v4_prefer
+                }
+                /* Macedonia */
+                else if (strncmp((char *)&mccmnc[0], "294", 3) == 0) {                    
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+
+                    /* IMCB */
+
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;       // 11000, IMS reg maintained but initial reg not allowed
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;          // not register for WFC during a CS call
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;          // delay IMS dereg in 23G until call is released
+                }
+            }
+            break;
+        }
+        case 236: /* USCC */
+        {
+
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00EC;     //operator_code = 236(USCC)
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;          //lbs location info service: on
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x12;       // relied on
+            nvram_ims_profile_ptr->imc_config.emergency_call_category_mapping   = 2;          // SOS URN only
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.sip_dscp                           = 0x28; //40 in DEC
+            nvram_ims_profile_ptr->ua_config.audio_dscp                         = 0x2E; //46 in DEC
+            nvram_ims_profile_ptr->ua_config.video_dscp                         = 0x0A; //10 in DEC
+            nvram_ims_profile_ptr->ua_config.call_lte_emc_timer_timeout         = 20;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 12;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 900;
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set[0],0,16);
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,  
+            "0,1,2", sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set,  
+            "0,2,4,7", sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set)-1);
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 60;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+            nvram_ims_profile_ptr->ua_config.conf_sub_timer_timeout             = 7200;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.text_feature_tag                   = 1;
+            nvram_ims_profile_ptr->ua_config.tty_enable                         = 1;
+            nvram_ims_profile_ptr->ua_config.cur_loc_for_emergency_enable       = 0;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x0E; // CC_PIDF_VOLTE_NORMAL_DISABLE | CC_PIDF_VOLTE_EMERG_DISABLE | CC_PIDF_WFC_NORMAL_DISABLE
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                    = 0x01;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant            = 0x1111;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.bw_begin                           = 2;
+            nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+            nvram_ims_profile_ptr->ua_config.br_begin                           = 4;
+            nvram_ims_profile_ptr->ua_config.br_end                             = 4;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 2;
+#endif /* __EVS_SUPPORT__ */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 7200;
+            nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                     = 130000; // 130 sec
+            nvram_ims_profile_ptr->ua_config.UA_reg_f_timer                     = 128000;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1080;
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism        = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+            nvram_ims_profile_ptr->ua_config.sip_compact_headers                = 1;
+            nvram_ims_profile_ptr->ua_config.confidence_level                   = 90;
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                       = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_video_qci                     = 7;
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 10*1000; // 10 sec
+            nvram_ims_profile_ptr->imc_config.restore_pcscf                     = 1;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status               = 2; // RELIED_ON_AUTO_REREG
+
+            break;
+        }
+        case 237: /* ICE */
+        {
+            /*Norway mcc = 242*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00ed;     //operator_code = 237(ICE)
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;
+
+            /* IMCB */
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery         = 1;
+
+            break;
+        }
+        case 238: /* VideoTron */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00EE;     //operator_code = 238(VideoTron)
+            nvram_ims_profile_ptr->imc_config.emergency_call_category_mapping   = 1;          // Videotron_V4.20_D10
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 45;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 45;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+#ifdef __EVS_SUPPORT__            
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host           = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                  = 1;
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                = 0;
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                 = 0;
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all           = 20;
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism        = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+
+            /* IMCB */
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list[0],0,32);
+            strncpy ( (char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,
+                      "0,2,6,3,1,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy ( (char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,
+                      "0,2,6,3,1,4,5,0",
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW
+                    );
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.emergency_call_category_mapping = 1;
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn           = 1;
+
+            break;
+        }
+
+        case 239: /* EastLink/Canada */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00EF;     //operator_code = EastLink/Canada
+            
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49512;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                        = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                        = 2;
+#endif /* __EVS_SUPPORT__ */
+
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite= 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host           = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled         = 1;
+            nvram_ims_profile_ptr->ua_config.add_pani_in_ack                    = 1;
+            nvram_ims_profile_ptr->ua_config.stir_shaken_for_privacy            = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                  = 1;
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                = 0;
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                 = 0;
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all           = 20;
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism        = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 9000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_c_timer                     = 240000;
+
+            /* IMC, IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp            = 1;
+            break;
+        }
+
+		case 241 /*Claro*/:
+		{
+			//if(strncmp((char *)&mccmnc[0], "330", 3) == 0){
+                    /* reset to default */
+                    imc_set_mtk_default_value(nvram_ims_profile_ptr);
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00F1;     //operator_code = 241(Claro-Puerto Rico)
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x01;
+
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    nvram_ims_profile_ptr->imc_config.wait_for_sgn_timer                = 86400;
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.sub_def_expires                    = 259200;     
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype            = 1;
+                    nvram_ims_profile_ptr->ua_config.pidf_country                       = 1;
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+                    nvram_ims_profile_ptr->ua_config.access_network_info_type           = 4;
+
+                    /* IMCB */
+
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.allow_emergency_dereg             = 2;                  
+                    nvram_ims_profile_ptr->imc_config.location_info_support             = 1;          
+                    nvram_ims_profile_ptr->imc_config.isim_invalidation_rules           = 1;
+                //}
+            break;
+        }
+        case 240: /* Xplore Mobile Canada */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00F0; //operator_code = 240 (Xplore Mobile Canada)
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            set_psismsc_by_imsi(&nvram_ims_profile_ptr->imc_config.default_psismsc[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer    = 8000;  // 8000ms (8 seconds)
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_base_timer   = 120*1000;    // 120000s (120 seconds) CDR-LTE-1468
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_max_timer    = 7200*1000;   // 7200000ms (7200 seconds) CDR-LTE-1468
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer     = 0;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size    = 1230;// <CDR-LTE-1451>
+            nvram_ims_profile_ptr->ua_config.UA_call_no_resource_code = 580;   // LTE-BTR-5-5560
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se   = 0;
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g  = 3;     // <CDR-NWS-705> IMS registration allowed and maintained in 23G as well, <CDR-LTE-1880> de-registration in GERAN
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn   = 1;
+            nvram_ims_profile_ptr->imc_config.ecc_guard_timer         = 10;
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery   = 1;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg = 1;
+            nvram_ims_profile_ptr->imc_config.location_info_support   = 1;
+            nvram_ims_profile_ptr->imc_config.ussd_support            = 1;
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status     = 2; // RELIED_ON_AUTO_REREG
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152; // Suggestion values
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383; // Suggestion values
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;     // Suggestion values
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.oir_privacy_to_header              = 1;
+            nvram_ims_profile_ptr->ua_config.register_cap_whenever              = 1;
+            nvram_ims_profile_ptr->ua_config.no_auto_retry_for_mo_call          = 1;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.conference_subscribe_timing        = 1;
+            nvram_ims_profile_ptr->ua_config.set_zero_cell_id_in_wifi           = 1;
+            nvram_ims_profile_ptr->ua_config.reject_mtcall_by_vops              = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 60;
+            nvram_ims_profile_ptr->ua_config.reject_code_in23G                  = 488;
+            nvram_ims_profile_ptr->ua_config.delay_unhold_call                  = 1;
+            nvram_ims_profile_ptr->ua_config.add_imageattr                      = 1;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.call_rel_holdcall_in_midcall_SRVCC = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_send_bye                     = 1;
+            nvram_ims_profile_ptr->ua_config.conf_user_count_includes_host      = 0;
+            nvram_ims_profile_ptr->ua_config.pem_use_sdp_rtp_drct               = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.conference_desub_time              = 2;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.reject_text_when_text_off          = 0;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                             = 2;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                        = 2;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.bw_send_end                        = 2;    // Suggestion values
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.text_feature_tag                   = 1;
+            nvram_ims_profile_ptr->ua_config.tty_enable                         = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.accept_wifi_call_if_audio_cap_0    = 1;
+            nvram_ims_profile_ptr->ua_config.follow_mt_pt_list                  = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 45;
+            nvram_ims_profile_ptr->ua_config.add_pani_in_ack                    = 1;
+
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;   // Suggestion values
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;  // Suggestion values
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;   // Suggestion values
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;    // Suggestion values
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;    // Suggestion values
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host           = 1;    // Suggestion values
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;     // <CDR-IMS-140>
+            nvram_ims_profile_ptr->ua_config.try_same_pcscf_rereg               = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                     = 32000; // <CDR-IMS-260>
+            nvram_ims_profile_ptr->ua_config.UA_reg_d_timer                     = 32000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_f_timer                     = 32000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_h_timer                     = 32000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_j_timer                     = 32000;
+            nvram_ims_profile_ptr->ua_config.reg_try_all_pcscf_5626             = 1;
+            nvram_ims_profile_ptr->ua_config.close_unprotected_conn             = 1;
+            nvram_ims_profile_ptr->ua_config.dereg_delay_time                   = 2;
+            nvram_ims_profile_ptr->ua_config.wfc_refresh_23g                    = 1;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port             = 0;
+            nvram_ims_profile_ptr->ua_config.geolocation_type                   = 2;
+            nvram_ims_profile_ptr->ua_config.init_reg_delay_time                = 2;
+            nvram_ims_profile_ptr->ua_config.rtt_tag_mode                       = 1;
+            nvram_ims_profile_ptr->ua_config.reject_rcs_request                 = 480;
+            nvram_ims_profile_ptr->ua_config.sit_tcp_2xx_rsp_retransmission     = 0;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;
+            nvram_ims_profile_ptr->ua_config.confidence_level                   = 90;
+
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all           = 20;    // Suggestion value
+            nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                  = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                 = 0;     // Suggestion value
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.enable_audio_precondition         = 1;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;     // Suggestion values
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp            = 1;     // Suggestion values
+            break;
+        }
+        case 242: /* INWI */
+        {
+            /*Morocco mcc = 604*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00f2;     //operator_code = 242(INWI)
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+
+            /* Reg/Stack */
+
+            /* IMCB */
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 1;          
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;          
+            break;
+        }
+        case 243: /* Globe/Philippine */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00F3; //operator_code = 243 (Globe/Philippine)            
+  
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1230;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;        //v4_prefer
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;      //disable precondition
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable               = 0x0005;
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+        nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+            
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+            nvram_ims_profile_ptr->imc_config.wait_for_sgn_timer                = 86400;
+            
+            break;
+        }
+        
+        case 244: /* Metfone/Cambodia */
+        {
+
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00F4;     //operator_code = 244(Metfone/Cambodia)
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 1;        // IMS registration allowed and maintained in 23G as well
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 30;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode         = 1;
+
+
+            /* Reg/Stack */
+         
+            break;
+        }
+        case 245: /* Vietnamobile */
+        {
+
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00F5;     //operator_code = 245(Vietnamobile)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;      // v4_prefer
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+            nvram_ims_profile_ptr->imc_config.wait_for_sgn_timer                = 3600;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1200;
+            /*Reg/stack*/
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+
+            break;
+        }
+        case 246: /* Ooredoo Qatar*/
+        {
+            /* mcc = 427*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00f6;     //operator_code = 246(Ooredoo)
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 45;         
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 45;         
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;          
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 24;
+            nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.support_early_upgrade              = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;       
+
+            /* IMCB */
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;          
+            break;
+        }
+        case 247: /* Morocco/Maroc */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x00f7;     //operator_code = 247(Morocco/Maroc)
+            /* IMCB, Reg/Stack, UA internal configurations */
+            
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90; 
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            /* Reg/Stack */      
+
+            /* IMCB */
+
+            /* IMC */
+          
+            break;
+        }
+        case 255: /* Cellular One*/
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                          = 0x00ff; //operator_code = 255(Cellular One)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout            = 45;
+            memset(&nvram_ims_profile_ptr->ua_config.UA_phone_context[0],0,64);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_phone_context,
+            "cellularoneaz.net", sizeof(nvram_ims_profile_ptr->ua_config.UA_phone_context)-1);
+            nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled             = 1;
+
+            /* REG/STACK */
+            nvram_ims_profile_ptr->ua_config.register_expiry                        = 86400;
+            
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn                 = 1;
+            nvram_ims_profile_ptr->imc_config.ussd_support                          = 1;
+            
+            /* Suggested value */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start              = 49512;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range              = 16383;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se                 = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code               = 603;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                 = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                         = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall               = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server             = 1;
+#ifdef __EVS_SUPPORT__            
+            nvram_ims_profile_ptr->ua_config.evs_support                            = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                                 = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                            = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                            = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                   = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                   = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                   = 1;
+#endif
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming            = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported                  = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec                  = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf       = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                   = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                       = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                         = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite    = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                     = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                        = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                    = 1;
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host               = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport                 = 0;
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                      = 1;
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                    = 0;
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                     = 0;
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all               = 20;
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism            = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin                  = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai                   = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri               = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0                = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt                = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp                = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp                = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg              = 1;
+
+            break;
+        }
+        case 257: /* Viaero/US */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0101; //operator_code = 257(Viaero/US)
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host           = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;    // Suggestion value
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;     // Suggestion value
+
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+
+            break;
+        }
+        case 267: /* GCI/US */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x010B; //operator_code = 267 (GCI/US)
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,  
+            "0,1,2", sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1);
+
+            // Suggestion value
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start            = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range            = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code             = 603;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe       = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming          = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported                = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec                = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf     = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                     = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                       = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite  = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                   = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                      = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                  = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin                = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai                 = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri             = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0              = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt              = 1;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;     // Suggestion value
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.geolocation_type                     = 2;
+            nvram_ims_profile_ptr->ua_config.pidf_country                         = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                  = 1;
+            nvram_ims_profile_ptr->ua_config.wfc_emerg_pidf_country               = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;    // Suggestion value
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;     // Suggestion value
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;     // Suggestion value
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;     // Suggestion value
+
+            break;
+        }
+		case 271: /* Sagebrush(Nemont) */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x010F;   //operator_code = 271(Sagebrush(Nemont))
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                               = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                          = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                          = 2;
+#endif /* __EVS_SUPPORT__ */
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+			nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1260;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+            break;
+        }
+		case 273: /* OptimERA */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x0111;   //operator_code = 273(OptimERA)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                               = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                          = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                          = 2;
+#endif /* __EVS_SUPPORT__ */
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+			nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1228;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+            break;
+        }
+        case 274: /* Yoigo */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0112;   //operator_code = 274(Yoigo/Spain)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery               = 1; 
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 90;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+            nvram_ims_profile_ptr->ua_config.ect_enable                           = 1;
+            nvram_ims_profile_ptr->ua_config.ect_without_target_hold              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai                 = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri             = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant              = 0x1111;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                       = 102;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_oct_pt                   = 108;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt                    = 104;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_oct_pt                = 110;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                     = 0;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req             = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 0;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall             = 1;
+            nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_fmtp                = 1;
+            nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_ptime               = 0;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;
+            nvram_ims_profile_ptr->ua_config.add_3gpp_ims_in_Accept               = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                           = 0xFF;
+            nvram_ims_profile_ptr->ua_config.UA_call_evs_pt                       = 106;
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.use_local_conf_participant_list_in_srvcc = 1;
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype              = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inReg              = 1;  
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                     = 1;
+        
+            break;
+        }
+        case 275: /* Lifecell Ukraine */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0113;   //operator_code = 275 (Lifecell Ukraine)
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g            = 1;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 6;        // G711
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+ 
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 1800;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 1000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 8000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 10000;   
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;        // v4_prefer
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 6000;     // 6s
+            
+            break;
+        }
+        case 276: /* AlticeUSA */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0114; //operator_code = 276
+            nvram_ims_profile_ptr->imc_config.location_info_support               = 2;
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_max_timer               = 60000;  // 60 sec
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn               = 1;
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.tty_enable                           = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host           = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.in_reply_to_support                = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                         = 0x01;  // IPsec for Normal Registration only
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;    // Suggestion value
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;     // Suggestion value
+
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference                 = 2;      // v4_prefer
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable            = 1;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                  = 86400;  // 24hr
+            nvram_ims_profile_ptr->imc_config.text_default_fallback_support       = 1;
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer               = 8000;     //resource_retain_timer = 8000ms (8seconds)
+
+            break;
+        }
+        case 277: /* Telemach Slovenia */
+        {
+
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0115;   //operator_code = 277(Telemach/Slovenia)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer                = 900;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout             = 20;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 120;         
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 120;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                               = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                          = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                          = 6;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                           = 0xFF; 
+        #endif /* __EVS_SUPPORT__ */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                     = 1;
+        
+            break;
+        }
+        case 278: /*Jazz Pakistan */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                     = 0x0116;  //operator_code = 278 (Jazz)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference              = 2;      //v4_prefer
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status              = 1; // 0000 0001; ALWAYS
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+             /* Call */
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.terminal_based_cw                  = 0;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable     = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 30;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode         = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant            = 0x1111;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+#endif /* __EVS_SUPPORT__ */
+            
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                  = 0x03;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 2;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            break;
+        }
+
+        case 279: /*DITO Philippines */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0117;
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP = 1;
+            nvram_ims_profile_ptr->imc_config.sms_support                   = 0;
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer              = 5000;     //resource_retain_timer = 5000ms (5 seconds)
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+            nvram_ims_profile_ptr->ua_config.call_mo_pidf_usage                 = 0x0A;
+            nvram_ims_profile_ptr->ua_config.support_video_early_media          = 1;
+            nvram_ims_profile_ptr->ua_config.need_revise_rtp_dir                = 1;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                       = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1              = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2              = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3              = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout            = 30;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support               = 0;
+            nvram_ims_profile_ptr->ua_config.register_expiry                = 7200;
+            nvram_ims_profile_ptr->ua_config.UA_reg_f_timer                 = 30000;  // 30 sec
+            nvram_ims_profile_ptr->imc_config.is_ims_retry_status           = 2; // Depend on AUTO_REREG status
+            
+            break;
+        }
+        case 282: /* Mobily */
+        {
+            /*Saudi mcc = 420*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x011a;     //operator_code = 282(Mobily)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;        
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;            
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                    = 0x01; 
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;       
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;          
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;         
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;      
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;          
+
+            /* IMC */
+            break;
+        }
+        case 280: /* OTZ-US */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0118; //operator_code = 280
+            nvram_ims_profile_ptr->imc_config.location_info_support               = 2;
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host           = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none = 0;
+            nvram_ims_profile_ptr->ua_config.contact_with_username_inCall = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size   = 1228;
+            nvram_ims_profile_ptr->ua_config.dynamic_pdn_mtu = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_http_digest     = 2;      //AKAv2_MD5
+
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;    // Suggestion value
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.contact_with_username = 0;
+
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ignore_media_qos_check = 0xfff;
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference                 = 2;      // v4_prefer
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable            = 1;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                  = 86400;  // 24hr
+
+            break;
+        }
+
+        case 281: /* Kyivstar */
+        {
+
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0119;   //operator_code = 281(Kyivstar/Ukraine)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g              = 2;        // IMS reg maintained at 23G but initial reg not initiated
+            nvram_ims_profile_ptr->imc_config.empty_pcscf_list_fail_cause         = 18;       // IMS_PDN_Fatal_Fail
+            nvram_ims_profile_ptr->imc_config.ignore_sgn_qci_check                = 0x7;      // Ignore QCI in 3GPP HPLMN, VPLMN and NON-3GPP HPLMN
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_code                     = 603;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 180;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.ignore_380_emg_xml                   = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                     = 1;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+            nvram_ims_profile_ptr->ua_config.rereg_in_rat_change                  = 1;
+        
+            break;
+        }
+        case 283: /* MEO */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x011B;   //operator_code = 283(MEO/Portugal)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 190;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_enable                           = 1;
+            nvram_ims_profile_ptr->ua_config.ect_without_target_hold              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai                 = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri             = 1;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                               = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                          = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                          = 6;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                           = 0xff;     // ch-aw-recv: -1
+        #endif /* __EVS_SUPPORT__ */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                     = 0;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                     = 1;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+        
+            break;
+        }
+        case 284: /* MTS Serbia */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x011C;   //operator_code = 284(MTS Serbia)
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+        #endif /* __EVS_SUPPORT__ */
+            
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1358;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+            
+            /* IMCB */
+            
+            break;
+        }
+        case 286: /* MNShubs */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x011e; //operator_code = 286(MNShubs)
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host           = 1;
+
+            /* USSD */
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;    // fundamental setting
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;    // Suggestion value
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;     // Suggestion value
+
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+
+            break;
+        }
+        case 285: /* Vinafhone/Vietnam */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x011d;     //operator_code = 285(Vinafhone)
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;         
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;          
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;          
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 7200;       
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;          
+
+            /* IMC */          
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;          
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;          
+            break;
+        }
+        case 287: /* Free France */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x011F;   //operator_code = 287(Free/France)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1500; 
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype              = 1;
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0;
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 120;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                     = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req             = 1;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe       = 1;
+            break;
+        }
+        case 288: /* Virgin UK */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0120;   //operator_code = 288(Virgin UK)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.sip_dscp                             = 0x28;     //40 in DEC
+            nvram_ims_profile_ptr->ua_config.audio_dscp                           = 0x2E;     //46 in DEC
+            nvram_ims_profile_ptr->ua_config.video_dscp                           = 0x0A;     //10 in DEC
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 180;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                               = 11;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                          = 11;
+            nvram_ims_profile_ptr->ua_config.br_send_end                          = 11;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                           = 0xff;     // ch-aw-recv: -1
+            nvram_ims_profile_ptr->ua_config.cmr                                  = 1;
+        #endif /* __EVS_SUPPORT__ */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1280; 
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                     = 0;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                     = 1;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+        
+            break;
+        }
+        case 290: /* Omantel */
+        {
+            /*Oman mcc = 422*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0122;     //operator_code = 290(Omantel)
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;          
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;         
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;         
+            nvram_ims_profile_ptr->ua_config.join_send_bye                      = 0;          
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;          
+
+            /* Reg/Stack */        
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;          
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;          
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;          
+            nvram_ims_profile_ptr->ua_config.register_expiry                    = 3600;       
+
+            /* IMCB */
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;          
+            break;
+        }
+        case 289: /* Batelco */
+        {
+            /*Bahrain mcc = 426*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0121;     //operator_code = 289(Batelco)
+            /* IMCB, Reg/Stack, UA internal configurations */
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 60;         
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 9;          
+            nvram_ims_profile_ptr->ua_config.enable_in_band_tone_in_hold        = 0;          
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;       
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;          
+
+            /* IMCB */
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;          
+            break;
+        }
+        case 291: /* LMT */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0123;   //operator_code = 291(Latvian Mobile Telephone)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g              = 2;        // IMS reg maintained at 23G but initial reg not initiated
+            nvram_ims_profile_ptr->imc_config.sms_support                         = 0;
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1230;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 45;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 90;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                     = 1;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.sms_network_types                    = 0x00;
+        
+            break;
+        }
+        case 292: /*CMHK-HKIA/Hongkong*/
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0124;   //operator_code = 292(CMHK-HKIA)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 60;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 60;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition                 = 0;           //disable precondition
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                      = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                      = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                      = 5000;
+
+            /*IMC*/
+            nvram_ims_profile_ptr->imc_config.ussd_support                        = 1;  // defaultly enable ussd support
+
+            /*Reg/Stack*/
+            nvram_ims_profile_ptr->ua_config.register_expiry                      = 7200;
+            break;
+        }
+            
+        case 294: /*MPT Myanmar*/
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0126;   //operator_code = 294(MPT Myanmar)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP    = 1;
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1230;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                    = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                    = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                    = 5000;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                       = 0;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                  = 0X03;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;           //disable precondition
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;          
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable     = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 30;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode         = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.disable_tcall_timer_in_hold        = 1;
+            break;
+        }
+            
+        case 295: /*NTC Nepal*/
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0127;   //operator_code = 294(MPT Myanmar)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 1800;
+            nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+#ifdef __EVS_SUPPORT__            
+            nvram_ims_profile_ptr->ua_config.evs_support                       = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1              = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2              = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3              = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe    = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming       = 1;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable    = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout     = 30;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode         = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+            /*IMC*/
+            nvram_ims_profile_ptr->imc_config.ussd_support                     = 1;  // defaultly enable ussd support
+            break;
+        }
+
+        case 296: /* CWW (Carolina West Wireless) in USA */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                       = 0x0128;   //operator_code = 296
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+
+            /* Call/SMS */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start           = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range           = 16383;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se              = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code            = 603;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall            = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming         = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported               = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec               = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf    = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                    = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                      = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                  = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                     = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                 = 1;
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host            = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai                = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri            = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0             = 1;   
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport              = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                   = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                 = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                  = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg           = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all            = 20;    // Suggestion value
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism         = 1;     // Suggestion value
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp             = 1;     // Suggestion value
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp             = 1;     // Suggestion value
+
+            break;
+        }
+
+        case 297: /* Fastweb */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0129;   //operator_code = 297(Fastweb/Italy)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->imc_config.ussd_support                        = 1;
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 180;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout             = 15;
+            nvram_ims_profile_ptr->ua_config.not_add_SDP_in_OPTIONS               = 1;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                               = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                          = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                          = 6;
+        #endif /* __EVS_SUPPORT__ */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0;
+            
+            break;
+        }
+        case 298: /*Umniah */
+        {
+            /*Jordan mcc = 416*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x012A;
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            
+            nvram_ims_profile_ptr->imc_config.disable_isim_application          = 1;
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none            = 0;
+            break;
+        }
+        case 299: /* NRJ */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x012b;    //operator_code = 299(NRJ France)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            
+            memset(&nvram_ims_profile_ptr->ua_config.required_loc_info_num_set[0],0,128);
+            strncpy ( (char *)nvram_ims_profile_ptr->ua_config.required_loc_info_num_set,  
+                    "112,15,17,18,115,119,191,196,197,116000,116117", 
+                    sizeof (nvram_ims_profile_ptr->ua_config.required_loc_info_num_set)-1
+                    );
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer             = 6000;     // 6s
+            
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery             = 1; 
+        
+            break;
+        }
+        case 300: /* Nedaa */
+        {
+            /*UAE mcc = 424*/
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x012C;     //operator_code = 300(Nedaa)
+            /* IMCB, Reg/Stack, UA internal configurations */            
+            /* Call */ 
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.UA_reg_http_digest                 = 2;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;
+            /* IMCB */
+            /* IMC */
+            break;
+        }
+        case 302: /* Ooredoo Oman */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x012E;   //operator_code = 302 (Ooredoo Oman)
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled         = 1;
+
+            /* Reg/Stack */
+
+            /* IMCB */
+            
+            /* IMC */
+            
+            break;
+        }
+
+        case 304: /* CTMO Macau */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0130;      //operator_code = 304(CTMO Macau)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1400;
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery               = 1; 
+            nvram_ims_profile_ptr->imc_config.emc_dereg_while_volte_off           = 1;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg             = 1;
+            nvram_ims_profile_ptr->ua_config.always_fetch_1st_entry_in_hisInfo    = 1;
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 60;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 60;
+            nvram_ims_profile_ptr->ua_config.ect_enable                           = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming          = 1;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable       = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout        = 30;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature               = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode           = 1;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->imc_config.ussd_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                      = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                      = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                      = 5000;
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context      = 0;
+            nvram_ims_profile_ptr->ua_config.not_add_SDP_in_OPTIONS               = 1;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf     = 1;
+            nvram_ims_profile_ptr->ua_config.send_bw_ind_when_recv_183_prack      = 1;
+            nvram_ims_profile_ptr->ua_config.add_qos_when_offer_present           = 1;
+            nvram_ims_profile_ptr->ua_config.add_3gpp_ims_in_Accept               = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                       = 96;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant              = 0x1111;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                     = 0;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                       = 32000;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                     = 1;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403          = 1;
+            nvram_ims_profile_ptr->ua_config.try_same_pcscf_rereg                 = 1;
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_base_timer              = 30*1000;
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_max_timer               = 1800*1000;
+            nvram_ims_profile_ptr->ua_config.open_pcscf_retry_count_limit         = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.wait_for_sgn_timer                  = 0xFFFFFFFE;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.ignore_media_qos_check              = 0xfff;
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer               = 6000;     //resource_retain_timer = 6000ms (6 seconds)
+            nvram_ims_profile_ptr->imc_config.default_fallback_support            = 1;
+
+            break;
+        }
+
+
+        case 306: /*HKCU Hongkong*/
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0132;      //operator_code = 304(HKCU Hongkong)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* HKCU Hongkong */
+                if (strncmp((char *)&mccmnc[0], "454", 3) == 0) {
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 60;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 60;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                      = 500;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                      = 4000;
+                    nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                      = 5000;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout             = 32;
+               }
+           }
+           break;
+        }
+        
+        case 307: /*Cellcom - Israel*/
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0133;     //operator_code = 307 Cellcom - Israe
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/         
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 60;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 60;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_tel_evt                    = 0;
+            nvram_ims_profile_ptr->ua_config.in_reply_to_support                = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+       
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+            break;
+        }
+        case 310: /*  Hotmobile */
+        {
+            if (with_imsi_info) {
+                if (strncmp((char *)&mccmnc[0], "425", 3) == 0) { /* Israel*/
+                    nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0136;      //operator_code = 310
+                    /* IMCB, Reg/Stack, UA internal configurations */
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 2;
+                    nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+                    nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp            = 1;
+                    nvram_ims_profile_ptr->imc_config.default_fallback_support          = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server				= 1;
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+                    nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403        = 0;
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1280;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype            = 1;
+                    nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                   = 0;
+                    
+                }    
+            }
+            break;
+        }
+        case 313: /* Axtel/Mexico */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0139;   //operator_code = 313-334 (Axtel/Mexico)
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 45;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.use_org_sdp_for_invite_without_sdp = 1;
+            nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_ptime             = 0;
+            nvram_ims_profile_ptr->ua_config.sdp_group_rtpmap_fmtp              = 1;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg           = 1;
+            break;
+        }
+
+        case 315: /*Beeline Kazakhstan*/
+        {
+             nvram_ims_profile_ptr->ua_config.operator_code                        = 0x013B;      //operator_code = 315(Beeline Kazakhstan)
+             set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id ,special_profile);
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Beeline Kazakhstan */
+                if (strncmp((char *)&mccmnc[0], "401", 3) == 0) {
+                /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 60;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 60;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+                    nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                    = 0x01;
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+                    nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable     = 1;
+                    nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 30;
+                    nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+                    nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+                    nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode         = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    nvram_ims_profile_ptr->ua_config.conference_desub_time              = 0;
+                    #ifdef __EVS_SUPPORT__            
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    
+                    nvram_ims_profile_ptr->ua_config.register_expiry                    = 1800;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1200;
+
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference               = 0;        //v4_only
+                    nvram_ims_profile_ptr->imc_config.sms_support                       = 1;
+                    nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg           = 1;
+                    
+                    
+                }
+            }
+            break;
+        }
+
+		case 317: /* Commnet Wireless(Choice) */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x013D; //operator_code = 317 (Commnet)
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.location_info_support             = 1;
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,  
+            "0,1,2", sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1);
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+
+            // Suggestion value
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start            = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range            = 16383;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code             = 603;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe       = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall             = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming          = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported                = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec                = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf     = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                     = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                       = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite  = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                   = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                      = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                  = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin                = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai                 = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri             = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0              = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt              = 1;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;     // Suggestion value
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.geolocation_type                     = 2;
+            nvram_ims_profile_ptr->ua_config.pidf_country                         = 1;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                  = 1;
+            nvram_ims_profile_ptr->ua_config.wfc_emerg_pidf_country               = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;    // Suggestion value
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;     // Suggestion value
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;     // Suggestion value
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;     // Suggestion value
+
+            break;
+        }
+
+        case 321: /* Ora(viti) French */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                             = 0x0141;      //operator_code = 141(Viti/french polynesia)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Ora(viti) French */
+                if (strncmp((char *)&mccmnc[0], "547", 3) == 0) {
+                /* call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 35;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 35;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0xff;     // ch-aw-recv: -1
+                    nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+                    nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable     = 1;
+                    nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 30;
+                    nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+                    nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+                    nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode         = 1;
+                    nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+                    #ifdef __EVS_SUPPORT__            
+                    nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+                    #endif /* __EVS_SUPPORT__ */
+                /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1080;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype            = 1;
+                    nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 1;
+                    nvram_ims_profile_ptr->ua_config.add_cni_in_wifi                    = 0x01;  // Add CNI to all operations.
+                /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.sms_support                       = 1;
+                     nvram_ims_profile_ptr->imc_config.ims_v4v6_preference              = 2;
+                }
+            }
+            break;
+        }
+               
+        case 314: /* TelePost/Greenland */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                       = 0x013A;     //operator_code = TelePost/Greenland
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport              = 0;
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                   = 1;
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                 = 0;
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                  = 0;
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all            = 20;
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism         = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg           = 1;
+
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start           = 49512;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range           = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                       = 5000;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se              = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code            = 603;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                         = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                              = 6;
+            nvram_ims_profile_ptr->ua_config.bw_end                              = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                         = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                         = 2;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                          = 0;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server              = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                      = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe      = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall            = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server          = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming         = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported               = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec               = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf    = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                    = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                      = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                  = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                     = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                 = 1;
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host            = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai                = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri            = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0             = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt             = 1;
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set[0],0,16);
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,
+            "0,2,4,7", sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set,
+            "0,2,4,7", sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set)-1);
+
+            /* Reg/Stack */
+            
+            break;
+        }
+        case 318: /* Vianova */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x013e;   //operator_code = 318(Vianova/Italy )
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g              = 2;
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery               = 1; 
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 90;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                               = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                          = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                          = 6;
+        #endif
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                     = 0;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1300;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+
+            /*IMCB*/
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            
+            break;
+        } 
+        case 319: /* Epic Cyprus/Monaco Telecom */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                                = 0x013f;   //operator_code = 319(Epic/Monaco Telecom)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                /* Epic Cyprus */
+                if (strncmp((char *)&mccmnc[0], "280", 3) == 0) {
+                    /* IMC, IMCB */
+                    nvram_ims_profile_ptr->imc_config.ussd_support                        = 1;
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference                 = 2;
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery               = 1; 
+
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 90;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                               = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                          = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                          = 6;
+                #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+                }
+                /* Monaco Telecom */
+                else if (strncmp((char *)&mccmnc[0], "212", 3) == 0) {
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery               = 1; 
+
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 180;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1;
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+                    nvram_ims_profile_ptr->ua_config.reg_gruu_support                     = 0;
+                    nvram_ims_profile_ptr->ua_config.not_auto_reg_403                     = 1;
+                    nvram_ims_profile_ptr->ua_config.contact_with_accesstype              = 1;
+                    nvram_ims_profile_ptr->ua_config.contact_with_username                = 0;
+            
+                    /* SMS */
+                    nvram_ims_profile_ptr->ua_config.sms_network_types                    = 0x00;
+                }
+            }
+            break;
+        }
+        case 320: /* Coriolis */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0140;   //operator_code = 320(Coriolis/France)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g              = 2;        // IMS reg maintained at 23G but initial reg not initiated
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery               = 1;
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn               = 1;      // ePDG should use sos APN for EC over WiFi
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 90;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable                 = 0x0D;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp  = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1300;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                     = 0;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                     = 1;
+            nvram_ims_profile_ptr->ua_config.reuse_transport_methods              = 0x00002254; // REFER, CANCEL, ACK, SUBSCRIBE, PRACK
+            
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.sms_network_types                    = 0x00;
+            
+            break;
+        }
+        case 322: /* UPC */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0142;   //operator_code = 322(UPC/Switzerland )
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery               = 1;
+            nvram_ims_profile_ptr->imc_config.ussd_support                        = 1;
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 180;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable                 = 0x0001;   // enable SRVCC
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                     = 0;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                     = 1;
+            
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference                 = 2;
+            nvram_ims_profile_ptr->imc_config.dedicated_fallback_support          = 1;
+            
+            break;
+        }
+        case 323: /* Lycamobile */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0143;   //operator_code = 323(Lycamobile/Italy)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery               = 1; 
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 120;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer                = 900;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable                 = 0x0003;   // enable SRVCC/aSRVCC
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1280;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+            
+            break;
+        } 
+        case 324: /* Moldcell */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0144;   //operator_code = 324(Moldcell/Moldova)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery               = 1; 
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 180;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                               = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                          = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                          = 6;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                           = 0xff;     // ch-aw-recv: -1
+            nvram_ims_profile_ptr->ua_config.cmr                                  = 1;
+        #endif
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.sms_network_types                    = 0x00;
+            
+            break;
+        }
+        case 325: /* Jambotel */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                                = 0x0145;   //operator_code = 325(Jambotel/Kenya)
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                if (strncmp((char *)&mccmnc[0], "639", 3) == 0) {/*Jambotel*/
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1; 
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 90;
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP      = 1;
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1500;                    
+                }
+            }
+            break;   
+        } 
+        case 327: /* SaskTel/CA */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                       = 0x0147;     //operator_code = SaskTel/CA
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMC, IMCB */
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference                = 2;
+
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.register_expiry                     = 86400;
+            nvram_ims_profile_ptr->ua_config.UA_reg_b_timer                      = 180000;
+            
+            nvram_ims_profile_ptr->ua_config.contact_with_transport              = 0;
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                   = 1;
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                 = 0;
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                  = 0;
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all            = 20;
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism         = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg           = 1;
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition                = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer               = 3600;
+            nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled          = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout         = 182;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout          = 180;
+            
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start           = 49512;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range           = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                       = 5000;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se              = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code            = 603;
+
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server              = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                      = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe      = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall            = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server          = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming         = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported               = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec               = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf    = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                    = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                      = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                  = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                     = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                 = 1;
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host            = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai                = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri            = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0             = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt             = 1;
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set[0],0,16);
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,
+            "0,2,4,7", sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set,
+            "0,2,4,7", sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_mode_set)-1);
+            break;
+        }
+        case 329: /* Plintron */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0149;   //(Plintron/Italy)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery               = 1; 
+            nvram_ims_profile_ptr->imc_config.sms_support                         = 0;
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 120;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer                = 900;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable                 = 0x0003;   // enable SRVCC/aSRVCC
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1280;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.sms_network_types                    = 0x00;
+            
+            break;
+        }
+        case 332: /* SoLinc/USA */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                       = 0x014C;     //operator_code = SoLinc/USA
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMC, IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.register_expiry                     = 1800;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                     = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                     = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                     = 5000;
+
+            nvram_ims_profile_ptr->ua_config.contact_with_transport              = 0;
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                   = 1;
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                 = 0;
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                  = 0;
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all            = 20;
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism         = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg           = 1;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size      = 1260;
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled          = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout          = 240;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                         = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                              = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                         = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                         = 2;
+#endif /* __EVS_SUPPORT__ */
+            
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start           = 49512;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range           = 16383;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se              = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code            = 603;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                       = 1;
+
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server              = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                      = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe      = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall            = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server          = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming         = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported               = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec               = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf    = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                    = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                      = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                  = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                     = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                 = 1;
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host            = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai                = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri            = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0             = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt             = 1;
+            break;
+        }
+        case 333: /* Cellcom */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x014D;   //operator_code = 333(Cellcom)
+            nvram_ims_profile_ptr->imc_config.emergency_call_category_mapping     = 2;        // SOS URN only
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /*IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 900;
+            nvram_ims_profile_ptr->ua_config.rtcp_xr_support                    = 1;
+            nvram_ims_profile_ptr->ua_config.tty_enable                         = 1;
+            nvram_ims_profile_ptr->ua_config.mwi_license                        = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.terminal_based_cw                  = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->imc_config.ignore_media_qos_check            = 0xfff;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 20;
+#ifdef __EVS_SUPPORT__            
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+#endif /* __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.rel_conf_if_no_participant         = 1;
+            nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi                 = 1;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1         = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+
+            nvram_ims_profile_ptr->ua_config.access_network_info_type           = 4;
+            nvram_ims_profile_ptr->ua_config.add_country_to_pani                = 3;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->imc_config.poweroff_ims_dereg_timer          = 6;
+            nvram_ims_profile_ptr->ua_config.reg_after_nw_dereg_60s             = 1;
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                       = 0;
+
+            /* IMCB */
+            strncpy ( (char *)nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list,  
+                      "0,2,4,5,3,6,0,1", 
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_home_policy_list)-1   //set pcscf policy for home NW 
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list[0],0,32);
+            strncpy ( (char *)nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list,  
+                      "0,2,4,5,3,6,0,1", 
+                      sizeof (nvram_ims_profile_ptr->imc_config.pcscf_visit_policy_list)-1   //set pcscf policy for visit NW 
+                    );
+            memset(&nvram_ims_profile_ptr->imc_config.pdn_rej_handle[0],0,64);
+            strncpy ( (char *)nvram_ims_profile_ptr->imc_config.pdn_rej_handle,
+                    "N,33,16,0;N,28,16,0;N,*,0,1;E,*,0,1;",
+                    sizeof (nvram_ims_profile_ptr->imc_config.pdn_rej_handle)-1
+                    );
+            nvram_ims_profile_ptr->imc_config.pdn_retry_backoff_enable          = 1;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_base_time               = 10;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_max_time                = 10000;
+            nvram_ims_profile_ptr->imc_config.pdn_retry_pre_backoff_count       = 0;
+            break;
+
+        }
+        case 336: /*   Mobifone/Vietnam   */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x150;   //operator_code = 336(Mobifone)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.disable_isim_application            = 1;
+            nvram_ims_profile_ptr->imc_config.ussd_support                        = 1;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg             = 1;
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 60;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 60;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403          = 0;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming          = 1;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable       = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout        = 30;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature               = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode           = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi                   = 1;
+            nvram_ims_profile_ptr->ua_config.register_expiry                      = 7200;
+            nvram_ims_profile_ptr->ua_config.reg_gruu_support                     = 0;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;     // Suggestion value
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.default_fallback_support            = 1;
+            nvram_ims_profile_ptr->imc_config.dedicated_fallback_support          = 1;
+            break;
+        }
+		case 337: /* Antel-Uruguay */
+		{
+			nvram_ims_profile_ptr->ua_config.operator_code                          = 0x0151;   //(Antel-Uruguay)
+			set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+			
+			/* IMC */
+			
+			/* Call*/
+			nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       	= 0;
+			nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled				= 1;
+			
+			/* Reg/Stack */
+			
+			/* SMS */
+			break;
+		}
+        case 338: /* Spusu */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                                = 0x0152;   //(Spusu)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            
+            /* Country specific configurations */
+            if (with_imsi_info) {
+                if (strncmp((char *)&mccmnc[0], "232", 3) == 0) { /* Austria */
+                    /* IMC */
+                    nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+                    nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+                    nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+                    nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery               = 1;
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference                 = 2;        //v4_prefer
+                    nvram_ims_profile_ptr->imc_config.sms_support                         = 0;
+
+                    /* Call*/
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 180;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 180;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+                    nvram_ims_profile_ptr->ua_config.srvcc_feature_enable                 = 0x0000;   // SRVCC not supported by network
+                    nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+                    nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+                    nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+                #ifdef __EVS_SUPPORT__
+                    nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+                    nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+                    nvram_ims_profile_ptr->ua_config.br_end                               = 6;
+                    nvram_ims_profile_ptr->ua_config.br_recv_end                          = 6;
+                    nvram_ims_profile_ptr->ua_config.br_send_end                          = 6;
+                    nvram_ims_profile_ptr->ua_config.ch_aw_recv                           = 0xff;     // ch-aw-recv: -1
+                #endif /* __EVS_SUPPORT__ */
+
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+                    nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+
+                    /* SMS */
+                    nvram_ims_profile_ptr->ua_config.sms_network_types                    = 0x00;
+                }
+            }
+            
+            break;
+        }
+        case 339: /* Unitel/Angola */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0153;   //operator_code = 339
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->ua_config.send_183_when_prcd_none              = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1500;
+            /* IMCB */
+            break;
+        }
+        case 342: /* ECOTEL/Canada */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                       = 0x0156;     //operator_code = ECOTEL/Canada
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start	        = 49512;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range	        = 16383;
+
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se	            = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code	        = 603;
+
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server	            = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye	                    = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe	    = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall	        = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server	        = 1;
+            
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming	    = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported	            = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec	            = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf	= 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer	            = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align	                = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos	                    = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite= 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663	                = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0	                = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous	            = 1;
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host	        = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin	            = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai	            = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri	        = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0	        = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt	        = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport	            = 0;
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec	                = 1;
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail	            = 0;
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed	                = 0;
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all	        = 20;
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism	    = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg	        = 1;
+
+            /* IMC, IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp	            = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp	            = 1;            
+            break;
+        }
+        case 344: /* 4ka */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                                = 0x0158;   //(4ka/Slovakia)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                                = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call            = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel           = 1;        // delay IMS dereg in 23G until call is released
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout                   = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout                  = 180;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se                       = 90;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                               = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1                   = 0;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server                   = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                       = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call               = 0;
+            nvram_ims_profile_ptr->ua_config.ignore_380_emg_xml                           = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size               = 1500;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani                     = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg                    = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                             = 1;
+            break;
+        }
+        case 345: /* PrimeTel */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                                = 0x0159;   //(PrimeTel/Cyprus)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                                = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call            = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel           = 1;        // delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery                       = 1;
+            nvram_ims_profile_ptr->imc_config.auto_re_reg_base_timer                      = 60*1000;
+            nvram_ims_profile_ptr->imc_config.ussd_support                                = 1;
+            nvram_ims_profile_ptr->imc_config.location_info_support                       = 1;         //lbs location info service: on
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout                   = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout                  = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se                       = 90;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                               = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1                   = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                       = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call               = 0;
+       #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                                  = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                         = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                         = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                         = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                                       = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                                  = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                                  = 6;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                                   = 0xff;     // ch-aw-recv: -1
+        #endif /* __EVS_SUPPORT__ */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani                     = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg                    = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                             = 1;
+            nvram_ims_profile_ptr->ua_config.bypass_403_reason_phrase                     = 1;
+            
+            break;
+        }
+        case 347: /*  Airtel  */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                              = 0x015B;      //operator_code = 347
+            if (with_imsi_info) {
+                if (strncmp((char *)&mccmnc[0], "639", 3) == 0) {  /*  Airtel/Kenya  */
+                    /* call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 35;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+					nvram_ims_profile_ptr->ua_config.conf_refer_order_by_call_id        = 1;
+                    nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 15;
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                }
+            }
+            break;
+        }
+
+        case 348: /*  NCell/Nepal  */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x015C;   //operator_code = 348(NCell)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant            = 0x1111;
+
+            nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode         = 1;
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature             = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable     = 1;
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout      = 30;
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                         = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                = 1;
+        #endif /*  __EVS_SUPPORT__ */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                    = 0x02;   // NULL+SHA1
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP      = 1;
+
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;     // Suggestion value
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;    // Suggestion value
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;    // Suggestion value
+            nvram_ims_profile_ptr->imc_config.default_fallback_support            = 1;
+            nvram_ims_profile_ptr->imc_config.dedicated_fallback_support          = 1;
+            break;
+        }
+
+        case 350: /* Gibtelecom/Gibraltar */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                                = 0x015E;   //(Gibtelecom/Gibraltar)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                                = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call            = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel           = 1;        // delay IMS dereg in 23G until call is released
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout                   = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout                  = 120;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se                       = 90;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                               = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1                   = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call               = 0;            
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server                   = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                       = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                              = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                              = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                              = 5000;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani                     = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg                    = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                             = 1;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.sms_network_types                            = 0x00;
+            break;
+        }
+        case 352: /* MOD/Egypt */
+        {            
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0160;      //operator_code = 352
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500; 
+            
+            /* IMC */
+           
+            /* IMCB */
+
+            break;
+   
+        }
+        case 353: /*  Israel / We4G */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                              = 0x0161;      //operator_code = 353
+            if (with_imsi_info) {
+                if (strncmp((char *)&mccmnc[0], "425", 3) == 0) {  /* Israel*/
+                    /* call */
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;
+                    /* IMCB */
+                    
+                }
+            }
+            break;
+        }
+        case 354: /* Poste Mobile */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0162;   //(Poste Mobile/Italy )
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                        = 0x18;     // 11000, IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call    = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel   = 1;        // delay IMS dereg in 23G until call is released
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery               = 1;
+
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se               = 90;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                 = 0;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+        #ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                               = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                          = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                          = 6;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                           = 0xff;     // ch-aw-recv: -1
+        #endif /* __EVS_SUPPORT__ */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1280;
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani             = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+            
+            break;
+        }
+        case 355: /* Lebanon/Alfa */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0163;   //operator_code = 355(Alfa)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 180;
+            /* Reg/Stack */
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.disable_isim_application            = 1;
+            break;
+        }
+        case 356: /* Africa / Rain */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0164;   //operator_code = 356(Africa)
+            
+            if (with_imsi_info) {
+                if (strncmp((char *)&mccmnc[0], "655", 3) == 0) {
+                    nvram_ims_profile_ptr->imc_config.ims_v4v6_preference         = 2;
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server       = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout   = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout  = 120;
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.sip_compact_headers          = 1;
+                    nvram_ims_profile_ptr->ua_config.add_pcni_in_vowifi           = 1;
+                    nvram_ims_profile_ptr->ua_config.add_timezone_to_pani         = 2;
+                }
+            }
+            break;
+        }
+        case 357: /* Ecuador / CNT */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                             = 0x0165;   //operator_code = 357(Ecuador)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            if (with_imsi_info) {
+                if (strncmp((char *)&mccmnc[0], "740", 3) == 0) {
+                    
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.send_refer_to_peer                 = 1;
+                    nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 120;
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 120;
+                    nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 120;
+                    
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP   = 1;
+                    
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.ussd_support                     = 1;
+                }
+            }
+            break;
+        }
+        case 358: /* Madagascar / Telma */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x0166;   //operator_code = 358(Telma)
+            
+            if (with_imsi_info) {
+                if (strncmp((char *)&mccmnc[0], "646", 3) == 0) {
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout       = 90;
+                    nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout      = 90;
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size   = 1500;
+                }
+            }
+            break;
+        }
+        case 359: /* Bahamas / Aliv */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0167;   //operator_code = 359(Bahamas)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            if (with_imsi_info) {
+                if (strncmp((char *)&mccmnc[0], "364", 3) == 0) {
+                    
+                    /* Call */
+                    nvram_ims_profile_ptr->ua_config.use_eps_prefix_in_phone_context    = 0;
+                    nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+                    nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant            = 0x1111;
+                    nvram_ims_profile_ptr->ua_config.ect_enable                         = 1;
+                    /* Reg/Stack */
+                    nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1400;
+                    nvram_ims_profile_ptr->ua_config.UA_net_ipsec                       = 0;
+                    
+                    
+                    /* IMCB */
+                    nvram_ims_profile_ptr->imc_config.ussd_support                      = 1;
+                    /* SMS */
+                    nvram_ims_profile_ptr->ua_config.sms_network_types                  = 0x01;
+                }
+            }
+            break;
+        }
+
+		case 363: /* C Spire */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x016B;   //operator_code = 363(C Spire)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+			nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+			nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 900;
+			nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled         = 1;
+			nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;
+			
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                               = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                          = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                          = 2;
+#endif /* __EVS_SUPPORT__ */
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+			nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1228;
+			
+			/* IMC */
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+            break;
+        }
+		
+		case 364: /* United Wireless */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x016C;   //operator_code = 364(United Wireless)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+			nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host           = 1;			
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+			nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1150;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+			
+            break;
+        }
+		
+		case 365: /* Illinois Valley Cellular */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x016D;   //operator_code = 365(Illinois Valley Cellular)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+			nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+			nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled         = 1;
+			
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                               = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                          = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                          = 2;
+#endif /* __EVS_SUPPORT__ */
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+			nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+			
+			/* IMC */
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+			
+            break;
+        }
+		
+		case 366: /* Appalachian Wireless */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x016E;   //operator_code = 366(Appalachian Wireless)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+			nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+			
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                               = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                          = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                          = 2;
+#endif /* __EVS_SUPPORT__ */
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;
+			
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+			nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1160;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+			
+            break;
+        }
+		
+		case 367: /* James Valley Wireless */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x016F;   //operator_code = 367(James Valley Wireless)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+			nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+			nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled         = 1;
+			
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                               = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                          = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                          = 2;
+#endif /* __EVS_SUPPORT__ */
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1080;
+
+
+            /* IMC */
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+			
+            break;
+        }
+		
+		case 368: /* Pioneer Cellular */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x0170;   //operator_code = 368(Pioneer Cellular)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+			nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+			
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+			nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+			nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                      = 20000;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+			
+            break;
+        }
+		
+		case 369: /* Pine Belt Wireless */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x0171;   //operator_code = 369(Pine Belt Wireless)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+			nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+			
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                               = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                          = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                          = 2;
+#endif /* __EVS_SUPPORT__ */
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+			nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+			nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1160;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+			
+            break;
+        }
+		
+		case 370: /* STRATA */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x0172;   //operator_code = 370(STRATA)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+			nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+			nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled         = 1;
+			
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                               = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                          = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                          = 2;
+#endif /* __EVS_SUPPORT__ */
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+			nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+			nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1260;
+			
+			/* IMC */
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+			
+            break;
+        }
+		
+		case 371: /* Silver Star */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x0173;   //operator_code = 371(Silver Star)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+			nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+			nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled         = 1;
+			
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                               = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                          = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                          = 2;
+#endif /* __EVS_SUPPORT__ */
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+			nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+			nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1260;
+			
+			/* IMC */
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+			
+            break;
+        }
+		
+		case 372: /* OneComm */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x0174;   //operator_code = 372(OneComm)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+			nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+			
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                               = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                          = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                          = 2;
+#endif /* __EVS_SUPPORT__ */
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+			nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+			nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1158;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+			
+            break;
+        }
+		
+		case 373: /* Cordova Wireless */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x0175;   //operator_code = 373(Cordova Wireless)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+			nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+			nvram_ims_profile_ptr->ua_config.UA_call_precondition               = 0;
+			
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                               = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                          = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                          = 2;
+#endif /* __EVS_SUPPORT__ */
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+			nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+			nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1228;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+			
+            break;
+        }
+		
+		case 374: /* Copper Valley Wireless */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x0176;   //operator_code = 374(Copper Valley Wireless)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+			nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+			nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled         = 1;
+			
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                               = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                          = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                          = 2;
+#endif /* __EVS_SUPPORT__ */
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+			nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+			nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1260;
+			
+			/* IMC */
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+			
+            break;
+        }
+		
+		case 375: /* Blue Wireless */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x0177;   //operator_code = 375(Blue Wireless)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+			nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+			
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                               = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                          = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                          = 2;
+#endif /* __EVS_SUPPORT__ */
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+			nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+			nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1260;
+
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+			
+            break;
+        }
+		
+		case 376: /* Inland Cellular */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x0178;   //operator_code = 376(Inland Cellular)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+			nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+			nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 1;
+			nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled         = 1;
+			
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+			nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+			nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1260;
+			
+			/* IMC */
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+			nvram_ims_profile_ptr->imc_config.ussd_support                        = 1;
+			
+            break;
+        }
+
+        case 377: /* Ooredoo / Tunisia */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x0179;   //operator_code = 377(Ooredoo)
+            
+			if (with_imsi_info) {
+                if (strncmp((char *)&mccmnc[0], "605", 3) == 0) {
+					/* Call */
+					nvram_ims_profile_ptr->ua_config.refer_dialog_to_server           = 1;
+                    nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server       = 1;
+					/* Reg/Stack */
+					nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size   = 1500;
+                }
+			}
+            break;
+        }
+
+		case 378: /* Geoverse */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                            = 0x017A;   //operator_code = 378(Geoverse)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.rtcp_interval                      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+	        nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+	        nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+	        nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+			nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+			
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                               = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                          = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                          = 2;
+#endif /* __EVS_SUPPORT__ */
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host             = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport               = 0;    
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                    = 1; 
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                  = 0; 
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                   = 0; 
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all             = 20;  
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism          = 1;  
+			nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg            = 1;
+			nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size       = 1100;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp              = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp              = 1;
+			
+            break;
+        }
+        case 379: /* PTCI/US */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x017B;     //operator_code = PTCI/US
+            
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start	        = 49512;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range	        = 16383;
+
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se	            = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code	        = 603;
+
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                        = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                        = 2;
+#endif /* __EVS_SUPPORT__ */
+
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server	            = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye	                    = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe	    = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall	        = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server	        = 1;
+            
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming	    = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported	            = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec	            = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf	= 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer	            = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align	                = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos	                    = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite= 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663	                = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0	                = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous	            = 1;
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host	        = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin	            = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai	            = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri	        = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0	        = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt	        = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 40;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 40;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer              = 7200;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport	            = 0;
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec	                = 1;
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail	            = 0;
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed	                = 0;
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all	        = 20;
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism	    = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg	        = 1;
+            
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1500;
+
+            /* IMC, IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp	        = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp	        = 1;            
+            break;
+        }
+
+        case 383: /* Magti */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x017F;    //operator_code = 383(Magti/Georgia)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call     = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server             = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout           = 15;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani           = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                   = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+
+            /* IMCB */
+            
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.nw_vops_rule                      = 0x18;     // IMS reg maintained but initial reg not allowed
+            nvram_ims_profile_ptr->imc_config.no_ims_reg_during_active_cs_call  = 1;        // not register for WFC during a CS call
+            nvram_ims_profile_ptr->imc_config.srvcc_no_ims_dereg_until_call_rel = 1;        // delay IMS dereg in 23G until call is released
+            break;
+        }
+        case 386: /* ENetworks/Guyana */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x0182;    //operator_code = 386(ENetworks/Guyana)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 180;
+            nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled         = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+            nvram_ims_profile_ptr->ua_config.bw_end                             = 2;
+            nvram_ims_profile_ptr->ua_config.ch_aw_recv                         = 0xFF;
+#endif /* __EVS_SUPPORT__ */
+            
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size     = 1180;
+
+            /* IMCB */
+            
+            /* IMC */
+            
+            break;
+        }
+		
+		case 387: /* West Central Wireless */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                              = 0x0183;   //operator_code = 387(West Central Wireless)
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            /* IMC */
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn                     = 1;
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout                 = 120;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout                = 120;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_pt                             = 118;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_oct_pt                         = 96;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_pt                          = 116;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_oct_pt                      = 107;
+            nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_pt                         = 110;
+            nvram_ims_profile_ptr->ua_config.UA_call_tel_evt_wb_pt                      = 111;
+			nvram_ims_profile_ptr->ua_config.tty_t140_pt                                = 113; // avoid conflict with 111
+            nvram_ims_profile_ptr->ua_config.ims_notify_feature_enabled                 = 1;
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size             = 1460; 
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MSS                  = 1000;
+            nvram_ims_profile_ptr->ua_config.tty_enable                                 = 1;
+
+            /* Suggestion value */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start                  = 49512;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range                  = 16383;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se                     = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code                   = 603;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server                     = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                             = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe             = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall                   = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server                 = 1;
+#ifdef __EVS_SUPPORT__            
+            nvram_ims_profile_ptr->ua_config.evs_support                                = 1;
+            nvram_ims_profile_ptr->ua_config.bw_end                                     = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                                = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                                = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                       = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                       = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                       = 1;
+#endif
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming                = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported                      = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec                      = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf           = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer                       = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                           = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                             = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite        = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                         = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                            = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                        = 1;
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host                   = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport                     = 0;
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                          = 1;
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                        = 0;
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                         = 0;
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all                   = 20;
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin                      = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai                       = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri                   = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0                    = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt                    = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp                    = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp                    = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg                  = 1;
+            break;
+        }
+
+        case 389: /* Unitel/Loas */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0185;    //operator_code = 385(Unitel/Loas)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            nvram_ims_profile_ptr->imc_config.ims_v4v6_preference                 = 2;        //v4_prefer
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 90;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call       = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming          = 1; // Suggestion value
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable       = 1; // Suggestion value
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout        = 30; // Suggestion value
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout = 5; // Suggestion value
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature               = 1; // Suggestion value
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode           = 1; // Suggestion value
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe       = 1; // Suggestion value
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                       = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                       = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                       = 5000;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg              = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport                = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                     = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                   = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                    = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all              = 20;    // Suggestion value
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism           = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg             = 1;     // Suggestion value
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp               = 1;      // Suggestion value
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp               = 1;      // Suggestion value
+            break;
+       }
+       case 390: /* LTC-Mobile/Liberia */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                        = 0x0186;    //operator_code = 390(LTC-Mobile/Liberia)
+            
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call*/
+			nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.br_end                             = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                        = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                        = 6;
+            nvram_ims_profile_ptr->ua_config.evs_support                        = 1;
+		    nvram_ims_profile_ptr->ua_config.UA_call_codec_order1               = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3               = 1;
+#endif
+        
+            /* Reg/Stack */
+            
+            /* IMCB */
+            
+            break;
+        }
+
+        case 392: /* MobileNation */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                      = 0x188;        //operator_code = 392(MobileNation)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_start          = 49152;
+            nvram_ims_profile_ptr->ua_config.rtp_rtcp_local_port_range          = 16383;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_min_se             = 90;
+            nvram_ims_profile_ptr->ua_config.UA_call_rej_by_user_code           = 603;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                     = 0;
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe     = 1;
+            nvram_ims_profile_ptr->ua_config.call_id_with_host_inCall           = 1;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming        = 1;
+            nvram_ims_profile_ptr->ua_config.histinfo_in_supported              = 1;
+            nvram_ims_profile_ptr->ua_config.prefer_original_codec              = 0;
+            nvram_ims_profile_ptr->ua_config.resp_precondition_without_bw_cnf   = 1;
+            nvram_ims_profile_ptr->ua_config.force_srvcc_transfer               = 0;
+            nvram_ims_profile_ptr->ua_config.show_octet_align                   = 0;
+            nvram_ims_profile_ptr->ua_config.check_curr_qos                     = 1;
+            nvram_ims_profile_ptr->ua_config.keep_original_refresher_in_reinvite = 1;
+            nvram_ims_profile_ptr->ua_config.force_csfb_when663                 = 1;
+            nvram_ims_profile_ptr->ua_config.set_text_rtcp_0                    = 0;
+            nvram_ims_profile_ptr->ua_config.use_lower_anonymous                = 1;
+            nvram_ims_profile_ptr->ua_config.use_pau_at_sdp_origin              = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_pai               = 1;
+            nvram_ims_profile_ptr->ua_config.ect_refer_to_use_sip_uri           = 1;
+            nvram_ims_profile_ptr->ua_config.set_non_sendrecv_rtcp_0            = 1;
+            nvram_ims_profile_ptr->ua_config.add_param_in_rm_prtcpnt            = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2               = 0;
+
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout         = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout        = 90;
+            nvram_ims_profile_ptr->ua_config.send_refer_to_peer                 = 1;
+            memset(&nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set[0],0,20);
+            strncpy((char *)nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set,
+            "8", sizeof(nvram_ims_profile_ptr->ua_config.UA_call_amr_wb_mode_set)-1);
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant            = 0x0101;
+
+            /* SMS */
+            nvram_ims_profile_ptr->ua_config.update_call_id_with_host           = 1;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_transport             = 0;
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                  = 1;
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                = 0;
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                 = 0;
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all           = 20;
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism        = 1;
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_reg_ipsec_algo                  = 0x15; //all+MD5
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp            = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp            = 1;
+			
+            break;
+        }
+
+        case 397:
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                          = 0x018d; //operator_code = 397(MECTEL/Myanmar)
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call         = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout             = 90;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout            = 90;
+            nvram_ims_profile_ptr->ua_config.early_media_when_rtp_coming            = 1; // Suggestion value
+            nvram_ims_profile_ptr->ua_config.asymmetric_payload_type_enable         = 1; // Suggestion value
+            nvram_ims_profile_ptr->ua_config.mod_session_cnf_timer_timeout          = 30; // Suggestion value
+            nvram_ims_profile_ptr->ua_config.conf_call_final_notify_timer_timeout   = 5; // Suggestion value
+            nvram_ims_profile_ptr->ua_config.upgrade_cancel_feature                 = 1; // Suggestion value
+            nvram_ims_profile_ptr->ua_config.hold_unhold_send_eimscmode             = 1; // Suggestion value
+            nvram_ims_profile_ptr->ua_config.conf_participant_not_subscribe         = 1; // Suggestion value
+
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_accesstype                = 1;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_On_Demand        = 0;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP        = 1;
+            nvram_ims_profile_ptr->imc_config.switch_prefer_rat_dereg               = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_transport                 = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.dereg_clear_ipsec                      = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.use_udp_on_tcp_fail                    = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.ipsec_fail_allowed                     = 0;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.tcp_connect_max_time_all               = 20;    // Suggestion value
+            nvram_ims_profile_ptr->ua_config.default_reg_retry_mechanism            = 1;     // Suggestion value
+            nvram_ims_profile_ptr->ua_config.pend_dereg_in_initial_reg              = 1;     // Suggestion value
+     
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.sms_support                           = 1;
+            nvram_ims_profile_ptr->imc_config.not_acquire_audio_rtcp                = 1;      // Suggestion value
+            nvram_ims_profile_ptr->imc_config.not_acquire_video_rtcp                = 1;      // Suggestion value
+            break;
+        }
+
+        case 1001: /* Ericsson IMS IWLAN */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code           = 0x03E9;      //operator_code = 1001(Ericsson IMS IWLAN)
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer   = 0x00000708;  // UA_call_session_timer = 1800
+            nvram_ims_profile_ptr->ua_config.local_sip_protocol_type = 0x00;
+
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_Force_Use_UDP  = 0;
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size   = 1200; /* we change to 1200 for TMO specific 1300;*/
+            nvram_ims_profile_ptr->ua_config.UA_call_mo_invite_to_bw_cnf_time = 10;
+            nvram_ims_profile_ptr->ua_config.UA_call_def_max_ptime            = 80;
+            nvram_ims_profile_ptr->imc_config.ussd_support                    = 1;  // defaultly enable ussd support
+            nvram_ims_profile_ptr->imc_config.location_info_support           = 1;      //lbs location info service: on
+            nvram_ims_profile_ptr->imc_config.wifi_em_reg_by_em_pdn           = 1;
+            strncpy((char*)nvram_ims_profile_ptr->ua_config.user_agent,
+                      "T-Mobile VoLTE-ePDG MTK/2.0",
+                      sizeof (nvram_ims_profile_ptr->ua_config.user_agent)-1
+                    );
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            nvram_ims_profile_ptr->imc_config.resource_retain_timer     = 10*1000;  // resource_retain_timer = 10 000ms (10 seconds)
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g    = 1;
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.contact_with_username_inCall         = 0;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server               = 1;
+            nvram_ims_profile_ptr->ua_config.add_sdp_in_180_for_non_precond       = 1;
+            nvram_ims_profile_ptr->ua_config.attempt_reg_when_receive403          = 1;
+            nvram_ims_profile_ptr->ua_config.waiting_487_for_cancel_timer_timeout = 5;
+            nvram_ims_profile_ptr->ua_config.bcsfb_feature_enable                 = 1;
+            nvram_ims_profile_ptr->ua_config.ecc_session_timer_enable             = 0;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout           = 30;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout          = 120;
+            nvram_ims_profile_ptr->ua_config.call_tcall_timer_timeout             = 10;
+            nvram_ims_profile_ptr->ua_config.subscribe_dialog_to_server           = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                       = 0;
+            nvram_ims_profile_ptr->ua_config.join_send_bye                        = 0;
+            nvram_ims_profile_ptr->ua_config.add_precondition_in_hold_unhold_sdp  = 0;
+            nvram_ims_profile_ptr->ua_config.srvcc_feature_enable                 = 0x000F; // enable SRVCC, aSRVCC, midSRVCC, bSRVCC
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1           = 0;
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                          = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1                 = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2                 = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3                 = 1;
+            nvram_ims_profile_ptr->ua_config.br_end                               = 6;
+            nvram_ims_profile_ptr->ua_config.br_recv_end                          = 6;
+            nvram_ims_profile_ptr->ua_config.br_send_end                          = 6;
+            nvram_ims_profile_ptr->ua_config.bw_end                               = 2;
+            nvram_ims_profile_ptr->ua_config.bw_send_end                          = 2;
+            nvram_ims_profile_ptr->ua_config.bw_recv_end                          = 2;
+#endif /* __EVS_SUPPORT__ */
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.contact_with_regid                   = 1;
+            nvram_ims_profile_ptr->ua_config.authorization_with_algo              = 1;
+            nvram_ims_profile_ptr->ua_config.try_next_pcscf                       = 1;
+            nvram_ims_profile_ptr->ua_config.not_auto_reg_403                     = 1;
+            nvram_ims_profile_ptr->ua_config.ems_mode_ind                         = 1;
+            nvram_ims_profile_ptr->ua_config.wfc_with_plani                       = 1;
+            nvram_ims_profile_ptr->ua_config.contact_with_video_feature_tag_in_subscribe    = 1;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port               = 0;
+
+            /* IMCB */
+            nvram_ims_profile_ptr->imc_config.ignore_sgn_qci_check                = 0x7; // 111
+            break;
+        }
+        case 1002: /* Nokia Finland */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                  = 0x03EA; //operator_code = 1002(Nokia Finland collaboration testing)
+            nvram_ims_profile_ptr->ua_config.VoLTE_Setting_SIP_TCP_MTU_Size = 1200;
+            nvram_ims_profile_ptr->imc_config.rfc5626_flow_recovery         = 1;
+
+            nvram_ims_profile_ptr->imc_config.ims_reg_allowed_at_23g        = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+
+            /* IMCB */
+
+            break;
+        }
+        case 1003: /* HQLAB_ERICSSON */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                  = 0x03EB; //operator_code = 1003(HQLAB_ERICSSON)
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer          = 0x0000EA60; // UA_call_session_timer = 60000
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.call_callend_timer_timeout     = 30;
+            nvram_ims_profile_ptr->ua_config.contact_with_username          = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_amr_fmt_variant        = 0x0101;
+            nvram_ims_profile_ptr->ua_config.show_octet_align               = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+            nvram_ims_profile_ptr->ua_config.disable_conf_call_prcd         = 1;
+            nvram_ims_profile_ptr->ua_config.merge_send_bye                 = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+            /* IMCB */
+
+            break;
+        }
+        case 1004: /* Huawei IMS */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code                  = 0x03EC; //operator_code = 1004(Huawei IMS)
+            /* align EVS compile option since Gen92 */
+#ifdef __EVS_SUPPORT__
+            nvram_ims_profile_ptr->ua_config.evs_support                    = 1;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order1           = 17;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order2           = 2;
+            nvram_ims_profile_ptr->ua_config.UA_call_codec_order3           = 1;
+#endif /* __EVS_SUPPORT__ */
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+
+            /* IMCB, Reg/Stack, UA internal configurations */
+            /* Call */
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+
+            /* Reg/Stack */
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+
+            /* IMCB */
+            break;
+        }
+        case 0x6000: /* Sony GTE/Lund */
+        {
+            nvram_ims_profile_ptr->ua_config.operator_code             = 0x6000; //operator_code = 0x6000
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani  = 1;
+            nvram_ims_profile_ptr->ua_config.session_id_header_enable  = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server    = 1;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port    = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+            nvram_ims_profile_ptr->ua_config.UA_call_session_timer          = 0x0000EA60; // UA_call_session_timer = 60000
+            nvram_ims_profile_ptr->ua_config.video_offer_rtp_profile        = 0x02; // AVPF only
+
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            break;
+        }
+        case 0x6001: /* Sony GTE/BeiJing */
+        {
+            /* Copy 0x6000 */
+            nvram_ims_profile_ptr->ua_config.operator_code                  = 0x6001; //operator_code = 0x6001
+            nvram_ims_profile_ptr->ua_config.initial_reg_without_pani       = 1;
+            nvram_ims_profile_ptr->ua_config.session_id_header_enable       = 1;
+            nvram_ims_profile_ptr->ua_config.refer_dialog_to_server         = 1;
+
+            /* New Add for 0x6001 */
+            nvram_ims_profile_ptr->ua_config.UA_reg_t1_timer                = 500;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t2_timer                = 4000;
+            nvram_ims_profile_ptr->ua_config.UA_reg_t4_timer                = 5000;
+            nvram_ims_profile_ptr->ua_config.call_ringing_timer_timeout     = 180;
+            nvram_ims_profile_ptr->ua_config.call_ringback_timer_timeout    = 180;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_req       = 1;
+            nvram_ims_profile_ptr->ua_config.session_refresher_in_resp      = 1;
+            nvram_ims_profile_ptr->ua_config.UA_net_ipsec                   = 0;
+            nvram_ims_profile_ptr->ua_config.random_init_ipsec_port         = 0;
+            nvram_ims_profile_ptr->ua_config.always_use_sip_uri_for_mo_call = 0;
+            nvram_ims_profile_ptr->ua_config.transfer_conf_call_as_1to1     = 0;
+
+            nvram_ims_profile_ptr->imc_config.ussd_support                   = 1;
+
+            set_conf_factory_uri_by_imsi(&nvram_ims_profile_ptr->ua_config.UA_conf_factory_uri[0], with_imsi_info, imsi_mnc_len, mccmnc, op_id, special_profile);
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+#if defined(__EVS_MAX_BW_FB__)
+#elif defined(__EVS_MAX_BW_SWB__)
+    if (nvram_ims_profile_ptr->ua_config.bw_begin == 3) {
+        nvram_ims_profile_ptr->ua_config.bw_begin = 2;
+    }
+    if (nvram_ims_profile_ptr->ua_config.bw_send_begin == 3) {
+        nvram_ims_profile_ptr->ua_config.bw_send_begin = 2;
+    }
+    if (nvram_ims_profile_ptr->ua_config.bw_recv_begin == 3) {
+        nvram_ims_profile_ptr->ua_config.bw_recv_begin = 2;
+    }
+    if (nvram_ims_profile_ptr->ua_config.bw_end == 3) {
+        nvram_ims_profile_ptr->ua_config.bw_end = 2;
+    }
+    if (nvram_ims_profile_ptr->ua_config.bw_send_end == 3) {
+        nvram_ims_profile_ptr->ua_config.bw_send_end = 2;
+    }
+    if (nvram_ims_profile_ptr->ua_config.bw_recv_end == 3) {
+        nvram_ims_profile_ptr->ua_config.bw_recv_end = 2;
+    }
+#else
+    /* __EVS_MAX_BW_WB__ */
+    if (nvram_ims_profile_ptr->ua_config.bw_begin == 3 || nvram_ims_profile_ptr->ua_config.bw_begin == 2) {
+        nvram_ims_profile_ptr->ua_config.bw_begin = 1;
+    }
+    if (nvram_ims_profile_ptr->ua_config.bw_send_begin == 3 || nvram_ims_profile_ptr->ua_config.bw_send_begin == 2) {
+        nvram_ims_profile_ptr->ua_config.bw_send_begin = 1;
+    }
+    if (nvram_ims_profile_ptr->ua_config.bw_recv_begin == 3 || nvram_ims_profile_ptr->ua_config.bw_recv_begin == 2) {
+        nvram_ims_profile_ptr->ua_config.bw_recv_begin = 1;
+    }
+    if (nvram_ims_profile_ptr->ua_config.bw_end == 3 || nvram_ims_profile_ptr->ua_config.bw_end == 2) {
+        nvram_ims_profile_ptr->ua_config.bw_end = 1;
+    }
+    if (nvram_ims_profile_ptr->ua_config.bw_send_end == 3 || nvram_ims_profile_ptr->ua_config.bw_send_end == 2) {
+        nvram_ims_profile_ptr->ua_config.bw_send_end = 1;
+    }
+    if (nvram_ims_profile_ptr->ua_config.bw_recv_end == 3 || nvram_ims_profile_ptr->ua_config.bw_recv_end == 2) {
+        nvram_ims_profile_ptr->ua_config.bw_recv_end = 1;
+    }
+#endif
+
+    dump_ims_profile_structure_difference(ps_id, RUNTIME_DEFAULT_N_OP_CUS, nvram_ims_profile_ptr);
+
+    //**************************************************************
+
+    /* Level4 - reserve for MO/Provisioning */
+    //**************************************************************
+
+    //**************************************************************
+
+    /* Level5 - reserve for SIM */
+    //**************************************************************
+
+    //**************************************************************
+
+    /* Level6 - MCF: NVRAM-OTA-BY-OP */
+    //**************************************************************
+    if (!is_test_mode_enable) {
+        mcf_tlvota_sbp_tag_t sbp_tag;
+        memset((void *)&sbp_tag, 0, sizeof(mcf_tlvota_sbp_tag_t));
+        memset((void *)nvram_tmp_ims_profile_ptr, 0xff, sizeof(nvram_ef_ims_profile_record_struct));
+        sbp_tag.sbp_id = op_id;
+        if (with_imsi_info) {
+            strncpy((char *)&sbp_tag.mcc[0], (const char *)mccmnc, 3);
+            strncpy((char *)&sbp_tag.mnc[0], (const char *)(mccmnc+3), imsi_mnc_len);
+        }
+
+        rv = mcf_read_tlvota_buffer_sbp_tag(ps_id, sbp_tag, NVRAM_EF_IMS_PROFILE_LID, (kal_uint8 *)nvram_tmp_ims_profile_ptr, sizeof(nvram_ef_ims_profile_record_struct));
+        if (rv == MCF_OTA_R_SUCCESS) {
+            imc_set_diff_configuration(nvram_tmp_ims_profile_ptr, nvram_ims_profile_ptr);
+            dump_ims_profile_structure_difference(ps_id, MCF_OTA_BY_OP, nvram_tmp_ims_profile_ptr);
+        }
+    }
+    //**************************************************************
+
+    /* Level7 - NVRAM */
+    //**************************************************************
+    memset((void *)nvram_tmp_ims_profile_ptr, 0xff, sizeof(nvram_ef_ims_profile_record_struct));
+    if (!is_test_mode_enable) {
+        if (!nvram_external_read_data(NVRAM_EF_IMS_PROFILE_LID,
+                                 record_idx,
+                                 (kal_uint8 *)nvram_tmp_ims_profile_ptr,
+                                 NVRAM_EF_IMS_PROFILE_SIZE)) {
+            free_ctrl_buffer(nvram_tmp_ims_profile_ptr);
+            free_ctrl_buffer(nvram_ims_profile_ptr);
+            return NULL;
+        }
+ 
+        /* No any customization is needed when setting to FREE TEST mode */
+        /* Workaround for not reset PCT/CMW500/8475/ERICSSON/NSN operator_code */
+        if ((nvram_tmp_ims_profile_ptr->ua_config.operator_code == 0xFEE0) ||
+            (nvram_tmp_ims_profile_ptr->ua_config.operator_code == 0x4000) ||    // MD8475
+            (nvram_tmp_ims_profile_ptr->ua_config.operator_code == 0x4001) ||    // ERICSSON
+            (nvram_tmp_ims_profile_ptr->ua_config.operator_code == 0x4002) ||    // CMW500
+            (nvram_tmp_ims_profile_ptr->ua_config.operator_code == 0x4003) ||    // PCT
+            (nvram_tmp_ims_profile_ptr->ua_config.operator_code == 0x5000)       // NSN
+          ) {
+            imc_set_mtk_default_value(nvram_ims_profile_ptr);
+        }
+
+        imc_set_diff_configuration(nvram_tmp_ims_profile_ptr, nvram_ims_profile_ptr);
+        dump_ims_profile_structure_difference(ps_id, NVRAM, nvram_tmp_ims_profile_ptr);
+    }
+    //**************************************************************
+
+    free_ctrl_buffer(nvram_tmp_ims_profile_ptr);
+    return nvram_ims_profile_ptr;
+}
+
+kal_bool mcf_custom_dump_ims_data(mcf_custom_dump_param_struct *param_ptr) {  
+    nvram_ef_ims_profile_record_struct *nvram_ims_profile_ptr = NULL; 
+    sim_interface_enum sim_slot_id = 0;
+    kal_uint8  mnc_len = 0;
+    kal_uint8  mccmnc[6] = {0};
+    kal_bool result = KAL_FALSE;
+
+    memcpy((void *)&mccmnc[0], (kal_char*)param_ptr->mcc, 3);
+    memcpy((void *)&mccmnc[3], (kal_char*)param_ptr->mnc, 3);
+    mnc_len = strlen((const char *)param_ptr->mnc);
+
+    if (param_ptr->lid == NVRAM_EF_IMS_PROFILE_LID) {
+        switch (param_ptr->type) {
+            case MCF_TYPE_OTA:
+                /* MCF can not map ps_id in DEFAULT_OTA case, need use record_id and map ourselves */
+                sim_slot_id = (sim_interface_enum)(param_ptr->record_idx -1);
+                nvram_ims_profile_ptr = imc_nvram_customization(0, sim_slot_id, KAL_FALSE, 0, NULL, 0);
+                result = KAL_TRUE;
+                break;
+            case MCF_TYPE_OTA_BY_OP:
+                sim_slot_id = l4c_gemini_get_actual_sim_id(param_ptr->ps_id);
+                nvram_ims_profile_ptr = imc_nvram_customization(param_ptr->sbp_id, sim_slot_id, KAL_TRUE, mnc_len, mccmnc, 0);
+                result = KAL_TRUE;
+                break;
+            default:
+                break;
+        }
+    }
+
+    if (nvram_ims_profile_ptr) {
+        *(param_ptr->size) = sizeof(nvram_ef_ims_profile_record_struct);
+        memcpy(param_ptr->buffer, nvram_ims_profile_ptr, sizeof(nvram_ef_ims_profile_record_struct));
+        free_ctrl_buffer(nvram_ims_profile_ptr);
+    }
+
+    return result;
+}
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_imc_config.h b/mcu/custom/protocol/common/ps/custom_imc_config.h
new file mode 100644
index 0000000..18a0fd1
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_imc_config.h
@@ -0,0 +1,161 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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:
+ * ---------
+ *   custom_imc_config.h
+ *
+ * Project:
+ * --------
+ *   MOLY
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the MM configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "ps_public_enum.h"
+#include "ps_public_utility.h"
+#include "l4_ps_api.h"
+#include "sim_ps_api.h"
+#include "md_sap.h"
+#include "mcf_if.h"
+#include "mcf_enum.h"
+#include "mcf_struct.h"
+
+#include "nvram_editor_data_item.h"
+#include "nvram_interface.h"
+#include "ims_nvram_editor.h"
+#include "imc_msgid.h"
+
+#define IMS_UNDEF_CONFIG 0xFFFFFFFF
+
+#define IMS_UNDEF_CONFIG_32 (kal_uint32)0xFFFFFFFF
+#define IMS_UNDEF_CONFIG_16 (kal_uint16)0xFFFF
+#define IMS_UNDEF_CONFIG_8 (kal_uint8)0xFF
+
+#ifdef __MOD_IMC__
+
+typedef enum {
+    RUNTIME_DEFAULT_N_OP_CUS = 0,
+    MO_OR_NW_PROVISION,
+    SIM_PROVISION,
+    MCF_OTA_DEFAULT,
+    MCF_OTA_BY_OP,
+    NVRAM
+} ims_profile_type_enum;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    ims_profile_type_enum type;
+    nvram_ef_ims_profile_record_struct ims_profile;
+} imc_dump_ims_profile_ntf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint32 sbp_id;
+    kal_uint8  sim_slot_id;
+    kal_bool   is_in_dynamic_sbp;
+    kal_uint8  imsi_mnc_len;
+    kal_uint8  mccmnc[6];
+} imc_dsbp_reconfigure_req_struct;
+
+void imc_set_mtk_default_value(nvram_ef_ims_profile_record_struct *nvram_ims_profile_ptr);
+void imc_set_diff_configuration(nvram_ef_ims_profile_record_struct *src, nvram_ef_ims_profile_record_struct *dest);
+nvram_ef_ims_profile_record_struct* imc_nvram_customization(kal_uint16 op_id, sim_interface_enum sim_slot_id, kal_bool with_imsi_info, kal_uint8 imsi_mnc_len, kal_uint8 *mccmnc, kal_uint32 special_profile);
+kal_bool mcf_custom_dump_ims_data(mcf_custom_dump_param_struct *param_ptr);
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_iwlan_config.c b/mcu/custom/protocol/common/ps/custom_iwlan_config.c
new file mode 100644
index 0000000..ca4b40b
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_iwlan_config.c
@@ -0,0 +1,2751 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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).
+*
+*****************************************************************************/
+
+
+#include "custom_iwlan_config.h"
+#include "mcf_if.h"
+#include <stdlib.h>
+
+extern sim_interface_enum l4c_gemini_get_actual_sim_id(sim_interface_enum simId);
+
+extern kal_uint8 PS_SIM_MAP[];
+
+protocol_id_enum iwlan_get_psid_from_simid(sim_interface_enum simId) {
+    kal_uint8 map_index;
+
+    for(map_index = 0 ; map_index < MAX_SIM_NUM ; map_index ++) {
+        if ((sim_interface_enum)PS_SIM_MAP[map_index] == simId) {
+            return (protocol_id_enum)map_index;
+        }
+    }
+
+    return MAX_SIM_NUM;
+}
+
+static kal_bool iwlan_cfg_reset_default(iwlan_cust_cfg_t* cfg) {
+
+#define __IWLAN_CFG_ACTION__ 2 /* IWLAN CFG Macro Structure Value Assign */
+#define __IWLAN_CFG_PTR__ (cfg)
+#include "iwlan_nvram_config.h"
+#undef __IWLAN_CFG_PTR__
+#undef __IWLAN_CFG_ACTION__
+
+    return KAL_TRUE;
+}
+
+//Set to nvram value if nvram has been set.
+static kal_bool iwlan_cfg_set_to_nvram_value(iwlan_cust_cfg_t* cfg, protocol_id_enum ps_id) {
+    kal_uint8* nvram_iwlan_read_buf_ptr = NULL;
+    nvram_ef_iwlan_profile_record_struct* nv_ptr = NULL;
+    kal_bool rtn = KAL_FALSE;
+    sim_interface_enum sim_slot_id;
+
+    // Allocate buffer to read NVRAM setting
+    nvram_iwlan_read_buf_ptr = (kal_uint8*)get_ctrl_buffer(sizeof(kal_uint8) * NVRAM_EF_IWLAN_PROFILE_SIZE);
+
+    //Transfer PS ID to SIM slot ID
+
+    sim_slot_id = l4c_gemini_get_actual_sim_id((sim_interface_enum)ps_id);
+
+    //read nvram
+
+    rtn = nvram_external_read_data(NVRAM_EF_IWLAN_PROFILE_LID,
+                             sim_slot_id+1, //record from 1 to n
+                             nvram_iwlan_read_buf_ptr,
+                             NVRAM_EF_IWLAN_PROFILE_SIZE);
+    //EXT_ASSERT(rtn,rtn,rtn,rtn);
+
+    nv_ptr = (nvram_ef_iwlan_profile_record_struct*)nvram_iwlan_read_buf_ptr;
+
+    if (rtn == KAL_TRUE) {
+#define __IWLAN_CFG_ACTION__ 3 /* IWLAN CFG Macro NVRAN Value Assign */
+#define __IWLAN_NVRAM_PTR__ (nv_ptr)
+#define __IWLAN_CFG_PTR__ (cfg)
+#include "iwlan_nvram_config.h"
+#undef __IWLAN_CFG_PTR__
+#undef __IWLAN_NVRAM_PTR__
+#undef __IWLAN_CFG_ACTION__
+    }
+    // Free allocated buffer
+    free_ctrl_buffer(nvram_iwlan_read_buf_ptr);
+    nvram_iwlan_read_buf_ptr = NULL;
+    return rtn;
+}
+
+
+
+void iwlan_cust_init(kal_uint32 op_id, protocol_id_enum ps_id, kal_char *sim_mcc, kal_char *sim_mnc, cust_init_factor_t *cust_init_factor, iwlan_cust_cfg_t *cfg) {
+    /***********************/
+    /*   Config priority   */
+    /*---------------------*/
+    /*    NVRAM default    */
+    /*     Post default    */
+    /*   MCF by default    */
+    /*   Operator config.  */
+    /*   Post OP config.   */
+    /*      MCF by OP      */
+    /*         EM          */
+    /***********************/
+    sim_interface_enum sim_slot_id;
+    mcf_tlvota_sbp_tag_t ota_sbp_tag;
+
+    /* reset configuration to default*/
+    iwlan_cfg_reset_default(cfg);
+
+    iwlan_post_default_config(cfg);
+
+    // Default OTA
+    // MCF Invalid buffer size
+    sim_slot_id = l4c_gemini_get_actual_sim_id((sim_interface_enum)ps_id);
+    cust_init_factor->default_ota_result = mcf_read_ota_buffer(NVRAM_EF_IWLAN_PROFILE_LID, sim_slot_id+1, (kal_uint8*)cfg, sizeof(iwlan_cust_cfg_t));
+
+
+    switch (op_id) {
+		/* LCOV_EXCL_START */
+        case 1: /* CMCC */
+        {
+            cfg->ipol_ans_cfg.afr_cfg.ipol_ims_afr_cs_paging_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.afr_cfg.ipol_ims_afr_reg_maintain_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+            /* icap */
+            cfg->ipol_ans_cfg.icap_cfg.voice_cap_whenever = KAL_TRUE;
+            cfg->comm_ans_cfg.ims_maintain_when_rf_off = KAL_FALSE;
+
+            cfg->ipol_ans_cfg.ipol_ims_vops_off_call_guard_enable = KAL_TRUE;
+
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable  = KAL_FALSE;
+            break;
+        }
+        case 2: /* CU */
+        {
+            cfg->ipol_ans_cfg.afr_cfg.ipol_ims_afr_reg_maintain_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+            /* icap */
+            cfg->ipol_ans_cfg.icap_cfg.voice_cap_whenever = KAL_TRUE;
+            cfg->comm_ans_cfg.ims_maintain_when_rf_off = KAL_FALSE;
+
+            cfg->ipol_ans_cfg.ipol_ims_vops_off_call_guard_enable = KAL_TRUE;
+
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable  = KAL_FALSE;
+
+            cfg->ipol_ans_cfg.ipol_ims_dereg_after_rau_enable = KAL_TRUE;
+            break;
+        }
+        case 3: /* Orange */
+        {
+            /* WLAN signal strength threshold */
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th    = -75;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th    = -65;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th      = -75;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th      = -65;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_no_cell_poor_th = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_no_cell_fair_th = -75;
+
+            //For Orange general(most country) configuration
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat             = 0x40 | 0x01;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable     = 0x03;
+            cfg->ipol_ans_cfg.ipol_ims_vops_setup_barring_enable     = 0x03;
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable      = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable        = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable   = KAL_FALSE;
+            cfg->mms_ans_cfg.mms_epdg_connected_barring_enable = KAL_TRUE;
+            cfg->xcap_ans_cfg.xcap_epdg_connected_epdg_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable             = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_enable        = KAL_TRUE;
+
+            /* WiFi Call Rove Out Alert */
+            cfg->ipol_ans_cfg.ipol_wifi_call_roveout_alert_enable  = KAL_TRUE;
+
+            /* icap */
+            cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x00;
+
+            switch (atoi(sim_mcc)) {
+                case 206: //BE
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable              = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_rat_reselect_by_dreg_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_incall_ho_enable            = KAL_FALSE;
+                    break;
+                case 208: //FR
+                    cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat           = 0x40 | 0x07;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable      = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable           = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable   = 0x00;
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable         = KAL_TRUE;
+
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0xF;
+                    break;
+                case 226: //RO
+                    cfg->mms_ans_cfg.mms_cell_only_barring_enable                  = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable              = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_rat_reselect_by_dreg_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_incall_ho_enable            = KAL_FALSE;
+                    break;
+                case 214: //ES
+                    cfg->mms_ans_cfg.mms_cell_only_barring_enable                  = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable              = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_rat_reselect_by_dreg_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_incall_ho_enable            = KAL_FALSE;
+                    break;
+                case 231: //SK
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types                   = 0xF;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable              = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_rat_reselect_by_dreg_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_incall_ho_enable            = KAL_FALSE;
+                    break;
+                case 259: //MD
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable              = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_rat_reselect_by_dreg_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_incall_ho_enable            = KAL_FALSE;
+                    break;
+                case 260: //PL
+                    cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat                   = 0x40 | 0x07;
+                    cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable           = 0x00;
+                    cfg->ipol_ans_cfg.ipol_ims_incall_voice_cap_pref               = KAL_TRUE;
+                    cfg->mms_ans_cfg.mms_wlan_only_barring_enable                  = KAL_TRUE;
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types                   = 0xF;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable              = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_rat_reselect_by_dreg_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_incall_ho_enable            = KAL_FALSE;
+                    break;
+                case 270: //LU
+                    cfg->mms_ans_cfg.mms_wlan_only_barring_enable                  = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable              = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_rat_reselect_by_dreg_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_incall_ho_enable            = KAL_FALSE;
+                    break;
+				case 308: 
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable              = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_incall_ho_enable            = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_incall_voice_cap_pref               = KAL_TRUE;
+                    break;
+                case 602: //EG
+                    cfg->xcap_ans_cfg.xcap_wlan_only_barring_enable      = KAL_TRUE;
+                    cfg->mms_ans_cfg.mms_cell_only_barring_enable      = KAL_TRUE;
+                    break;
+                case 604: //Morocco
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+                    cfg->xcap_ans_cfg.xcap_roaming_barring_enable          = KAL_TRUE;
+                    cfg->mms_ans_cfg.mms_cell_only_barring_enable          = KAL_TRUE;
+                    break;
+				case 647:
+					cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable  	   = KAL_FALSE;
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types           = 0xF;
+					break;
+                default :
+                    break;
+            }
+            break;
+        }
+        case 5: /* DTAG */
+        {
+            /*TMOEU*/
+            // Supporting RAT, MTR-29627 requires that IMS registration is maintained in 3G/2G
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat        = 0x40 | 0x7; // NR/LTE/3G/2G
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_23g_wifi_rat_reselect_by_dreg_enable = KAL_TRUE;
+
+            /* If VoLTE roaming is allowed (depends on country),
+             * HO without new initial registration is not allowed
+             */
+            cfg->ipol_ans_cfg.ipol_ims_roaming_rat_reselect_by_dreg_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_while_roaming_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_incall_ho_enable = KAL_FALSE;
+
+            /* IMS cell prefer wlan dereg*/
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable = KAL_TRUE;
+            /* Throttling timer Settings */
+            cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 10;
+            cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable   = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time= 10;
+            /* WLAN signal strength threshold */
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -90;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -75;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -75;
+            /* MD signal strength threshold */
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th   = -117;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th   = -112;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th  = -113;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th  = -99;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_poor_th   = -106;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_fair_th   = -89;
+
+            /* icap */
+            cfg->ipol_ans_cfg.icap_cfg.sms_check_vops = KAL_TRUE;
+            cfg->ipol_ans_cfg.icap_cfg.check_vops = KAL_TRUE;
+            cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x0B;
+
+            switch (atoi(sim_mcc)) {
+                case 262: // DE
+                    cfg->ipol_ans_cfg.ipol_ims_cs_pref_while_roaming_enable = KAL_FALSE;
+                    break;
+                case 260: // PL
+                    cfg->comm_ans_cfg.trtl_cfg.initial_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+                    cfg->comm_ans_cfg.trtl_cfg.initial_rove_in_trtl_time = 3;
+                    break;
+                case 294: // Macedonia
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x00;
+                    break;
+                case 232: // AT
+                    break;
+                case 226: // Romania
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x00;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_TRUE;
+                    break;
+                case 276: // Albania
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x00;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_TRUE;
+                    break;
+                default:
+                    break;
+            }
+
+            break;
+        }
+        case 6: /* Vodafone */
+        {
+            // Supporting RAT
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat           = 0x40 | 0x1; // NR LTE
+
+            /* VoLTE roaming barring */
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable         = KAL_FALSE;
+
+            /* IMS cell prefer wlan dereg*/
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable = KAL_TRUE;
+
+            /* Throttling timer Settings */
+            cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable             = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time               = 20;
+            cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable               = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time              = 20;
+            cfg->comm_ans_cfg.trtl_cfg.wlan_poor_stop_cell_trtl_enable = KAL_TRUE;
+
+            /* Measurement timer Settings */
+            cfg->comm_ans_cfg.meas_cfg.wlan_rove_in_meas_time   = 640;
+            cfg->comm_ans_cfg.meas_cfg.cell_rove_in_meas_time  = 640;
+
+            /* WiFi Call Rove Out Alert */
+            cfg->ipol_ans_cfg.ipol_wifi_call_roveout_alert_enable  = KAL_TRUE;
+
+            /* Threshold of QoS */
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -75;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -75;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th   = -116;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th   = -106;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th  = -109;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th  = -104;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_poor_th   = -102;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_fair_th   = -94;
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_rtp_qos_enable                = KAL_TRUE;
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_wlan_voice_rtp_jitter_th  = 255; // 0~255
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_wlan_video_rtp_jitter_th  = 255; // 0~255
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_rtp_wlan_pkt_loss_th      = 4;   // 0~100
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_rtp_wlan_qos_bkoff_t      = 20;  // 20 s
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_rtp_pkt_loss_th          = 4;   // 0~100
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_rtp_sampling_duration    = 5;   // 5 s
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_rtcp_jitter_delay_th     = UNDEF_CONFIG_32;   // not to enable
+            switch (atoi(sim_mcc)) {
+                case 202: // GR(Greece)
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th   = -118;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th   = -110;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th  = -106;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th  = -100;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_poor_th   = -100;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_fair_th   = -94;
+                    /* Enable VoLTE roaming */
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable                = KAL_FALSE;
+                    break;
+                case 204: // NL(Netherlands)
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th   = -118;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th   = -104;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th  = -112;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th  = -104;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_poor_th   = -102;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_fair_th   = -94;
+                    /* Enable VoLTE roaming */
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable                = KAL_FALSE;
+                    break;
+                case 214: // ES(Spain)
+                    /* Enable VoLTE roaming */
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable                = KAL_FALSE;
+                    break;
+                case 222: // IT(Italy)
+                    /* Enable VoLTE roaming */
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable                = KAL_FALSE;
+                    break;
+                case 226: // RO
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable         = KAL_TRUE;
+                    break;
+                case 230: // CZ
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th   = -118;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th   = -110;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th  = -110;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th  = -100;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_poor_th   = -100;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_fair_th   = -94;
+                    /* Enable VoLTE roaming */
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable                = KAL_FALSE;
+                    break;
+                case 234: // GB(UK)
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable         = KAL_TRUE;
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_ims_wlan_use_nv_md_srv_if_unknown_home_in_flight_mode = KAL_FALSE;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th   = -116;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th   = -110;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th  = -110;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th  = -105;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_poor_th   = -102;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_fair_th   = -99;
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x03;
+                    /* Enable VoLTE roaming */
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable                = KAL_FALSE;
+                    break;
+                case 262: // DE
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable         = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_block_wifi_until_srvcc_call_end = KAL_TRUE;
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x0B;
+                    /* Enable VoLTE roaming */
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable                = KAL_FALSE;
+                    break;
+                case 272: // IE(Ireland)
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable         = KAL_TRUE;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -79;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -72;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -88;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -78;
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x0B;
+                    /* Disable VoWiFi roaming */
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+                    break;
+                case 276: // AL
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th   = -118;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th   = -110;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th  = -110;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th  = -100;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_poor_th   = -100;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_fair_th   = -94;
+                    /* Enable VoLTE roaming */
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable                = KAL_FALSE;
+                    break;
+                case 280: // VDF/CyTa Cyprus
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types   = 0x00;
+                    break;
+                case 286: // TR(Turkey)
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -79;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -72;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -79;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -72;
+                    break;
+                case 404: // IN
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable         = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_vops_barring_vplmn_enable   = 0x00;
+                    break;
+                case 530: //VDF NZ
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -80;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -60;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -80;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -60;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th = -100;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th = -90;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th = -100;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th = -90;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_poor_th = -90;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_fair_th = -80;
+                    break;
+                case 602: //EG
+                    cfg->ipol_ans_cfg.ipol_ims_vops_setup_barring_enable = 0x00;
+                    cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable = 0x00;
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable         = KAL_TRUE;
+                    break;
+                case 655: //South Africa
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th = -110;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th = -105;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th = -116;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th = -110;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_poor_th = -102;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_fair_th = -99;
+					cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable              = KAL_FALSE;
+                    break;
+                default:
+                    break;
+            }
+
+            break;
+        }
+        case 7: /* AT&T */
+        case 145: /* Cricket */
+        case 196: /*FirstNet*/
+        {
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat           = 0x40 | 0x3; // NR LTE&3G
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable   = 0x00;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_vplmn_enable   = 0x00;
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable         = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_vops_setup_barring_enable   = 0x00;
+
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_nr_rsrp_poor_th   = -108; // CDR-WiFi-1750
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_nr_rsrp_fair_th   = -90;  // CDR-WiFi-1750
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th   = -108;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th   = -90;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rssnr_poor_th  = -3;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rssnr_fair_th  = 2;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th  = -93;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th  = -73;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_ecno_poor_th  = -15;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_ecno_fair_th  = -11;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_poor_th   = -102;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_fair_th   = -94;
+
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -80; //from v19.1
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -75;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -80; //from v19.1
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -75;
+
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_rtp_qos_enable                = KAL_TRUE;
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_wlan_voice_rtp_jitter_th  = UNDEF_CONFIG_32; // 0~255
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_wlan_video_rtp_jitter_th  = UNDEF_CONFIG_32; // 0~255
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_rtp_wlan_qos_bkoff_t      = UNDEF_CONFIG_32; //s
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_rtp_sampling_duration    = 15; //s
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_rtcp_jitter_delay_th    = 100; //ms
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_rtcp_plr_th             = 30; //percentage
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_rtp_wlan_pkt_loss_th     =UNDEF_CONFIG_32; // not to enable
+
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable    = KAL_FALSE; //CDR-WiFi-1510 2G part removial
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable = KAL_FALSE; //CDR-WiFi-1510 2G part removial
+
+            // WiFi Call Rove Out Alert , 18384_UXrequirements_1906_v3.0.pdf DS7
+            cfg->ipol_ans_cfg.ipol_wifi_call_roveout_alert_enable  = KAL_TRUE;
+
+            cfg->ipol_ans_cfg.ipol_ims_incall_voice_cap_pref = KAL_TRUE;
+            cfg->comm_ans_cfg.pref_cfg.wans_ims_pref_setting = 0x0F; //MS 4bits : 0 = not refer to WFC on/off
+
+            cfg->dflt_ans_cfg.default_roaming_barring_enable = KAL_FALSE; //1.ALPS03840135(not refer to data roaming UI). 2.next gen we plat to default disable defatul PDN barring logic
+            cfg->comm_ans_cfg.wifi_sig_polling_time    = 100;                     // CDR-WiFi-1510 500 ms
+            cfg->comm_ans_cfg.wifi_sig_measure_time    = 500;                     // CDR-WiFi-1510 500 ms
+            cfg->comm_ans_cfg.cell_sig_report_timer_type = IWLAN_L4C_TIMER_STRICT;
+            cfg->comm_ans_cfg.cell_sig_report_duration = 500;
+
+            /* icap */
+            cfg->ipol_ans_cfg.icap_cfg.voice_cap_whenever = KAL_TRUE;
+            switch (atoi(sim_mcc)) {
+                case 334: /* Mexico */
+                    cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x40 | 0x1;
+                    cfg->ipol_ans_cfg.icap_cfg.voice_cap_whenever = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_normal_call_ho_lte_to_wifi_enable 		   = KAL_FALSE;
+
+					// Throttling
+					cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE); //From requirement v2.2.1
+					cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time  = 60;
+					cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable  = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+					cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time  = 60;
+					
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -80; //From ALPS05359181
+					cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -75;
+					cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -80;
+					cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -75;
+					cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_nr_rsrp_poor_th   = -114; 
+					cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_nr_rsrp_fair_th   = -94; 
+					cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th   = -114;
+					cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th   = -94;	
+                    break;
+                default:
+                    break;
+            }
+
+            break;
+        }
+        case 8: /* TMOUS */
+        {
+            // Supporting RAT
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x40 | 0x1; // NR LTE
+
+            cfg->ipol_ans_cfg.ipol_ims_nr_incall_ho_enable = KAL_TRUE;
+
+            cfg->ipol_ans_cfg.ipol_ims_roaming_rat_reselect_by_dreg_enable = KAL_TRUE;
+            /* VoLTE VoPS barring */
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable = 0x03;
+            cfg->ipol_ans_cfg.ipol_ims_vops_setup_barring_enable = 0x03;
+
+            /* VoLTE roaming barring */
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+
+            /* VoWiFi roaming barring */
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_FALSE;
+
+            /* IMS romaing No incall Handover */
+            cfg->ipol_ans_cfg.ipol_ims_roaming_incall_ho_enable = KAL_FALSE;
+
+            /* IMS cell prefer wlan dereg*/
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable = KAL_FALSE;
+
+            /* IMS SIPCPI barring */
+            cfg->ipol_ans_cfg.ipol_ims_sipcpi_barring_enable = KAL_TRUE;
+
+            /* IMS PCSCF Quality */
+            cfg->ipol_ans_cfg.ipol_ims_pcscf_quality_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_pcscf_state_bkoff_t = 120; // 2 min
+
+            /* IMS EVS Call thr offset */
+            cfg->ipol_ans_cfg.ipol_ims_evs_call_thr_offset = 0; // -2 dbm => 0 dbm because only need to align cellular prefer threshold REQ (from TMO SME)
+
+            /* IMS ECC over IMS Handover Disable */
+            cfg->ipol_ans_cfg.ipol_ims_ecc_over_ims_ho_lte_to_wifi_enable = KAL_FALSE;
+
+            /* WiFi Calling Rove-out Alert */
+            cfg->ipol_ans_cfg.ipol_wifi_call_roveout_alert_enable = KAL_TRUE;
+
+            /* 1st PDN Cellular prefer APN type (ipol_ans_cfg_apn_type_bitmap_e) */
+            cfg->comm_ans_cfg.first_pdn_cell_pref_apn_type = 0x1 | 0x2;
+
+            /* PTT always cellular prefer */
+            cfg->comm_ans_cfg.pref_cfg.wans_ptt_pref_setting = 2;
+
+            /* Cellular Threshold settings (rove out threshold is comapre by "<=") */
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_nr_rsrp_poor_th  = -113; // -114 roveout
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_nr_rsrp_fair_th  = -109;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th  = -113; // -114 roveout
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th  = -109;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th = -109; // -110 roveout
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th = -100;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_poor_th  = -104; // -105 roveout
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_fair_th  = -95;
+
+            /* WiFi Rove-in/out, Hand-in/out Threshold setting */
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -80;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -70;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -80;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -70;
+
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_rtp_qos_enable                = KAL_TRUE;
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_ho_begin_no_rtp_rollback = 2000; // 2 secs
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_cell_ho_begin_no_rtp_rollback = 2000; // 2 secs
+
+            /* No Roaming barring for Xcap, supl Service */
+            cfg->xcap_ans_cfg.xcap_roaming_barring_enable = KAL_FALSE;
+
+            /* MD signal power level monitor hysteresis duration(seconds) */
+            cfg->comm_ans_cfg.cell_sig_report_duration = 3;
+            break;
+        }
+        case 9: /* CT */
+        {
+            /* icap */
+            cfg->ipol_ans_cfg.icap_cfg.check_call_domain = KAL_TRUE;
+            cfg->comm_ans_cfg.ims_maintain_when_rf_off = KAL_FALSE;
+
+            // Supporting RAT
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x70 | 0x09; // NR LTE/EHRPD/HRPD/1x/LTE
+
+            cfg->ipol_ans_cfg.ipol_ims_vops_off_call_guard_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_FALSE;
+            break;
+        }
+        case 11: /* H3G */
+        {
+            /* RAT preference order; 4G -> 3G/2G -> WiFi */
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable    = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable = KAL_TRUE;
+
+            /* MD signal strength threshold */
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th   = -116;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th   = -110;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th  = -110;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th  = -105;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_poor_th   = -102;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_fair_th   = -97;
+
+            /* Setup and idle handover of IMS PDN are not allowed */
+            cfg->ipol_ans_cfg.ipol_ims_vops_setup_barring_enable   = 0x03;
+            cfg->ipol_ans_cfg.ipol_ims_vops_idle_ho_barring_enable = 0x03;
+
+            /* Trigger de-register in WiFi when in idle mode and rove-out threshold reached */
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_incall_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_no_cell_poor_th = -90;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_no_cell_fair_th = -85;
+
+            /* icap */
+            cfg->ipol_ans_cfg.icap_cfg.sms_check_vops = KAL_TRUE;
+            cfg->ipol_ans_cfg.icap_cfg.check_vops = KAL_TRUE;
+
+            switch (atoi(sim_mcc)) {
+                case 232: // AU
+                    /* VoLTE roaming barring */
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.check_vops = KAL_FALSE;
+                    break;
+                case 234: // UK
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x0B;
+                case 235: // UK
+                    /* Throttling timer Settings */
+                    cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = KAL_TRUE;
+                    cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 30;
+                    cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable   = KAL_TRUE;
+                    cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time= 30;
+
+                    /* VoWiFi roaming barring */
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable         = KAL_TRUE;
+
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_check_vops = 1;
+                    break;
+                case 240: //SE
+                case 238: //DK
+                    /* Maintain IMS PDN and registration on non-vops cellular */
+                    cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable  = 0x00;
+                    cfg->mms_ans_cfg.mms_ims_pdn_connected_barring_enable = KAL_TRUE;
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_check_vops = KAL_TRUE;
+                    cfg->ipol_ans_cfg.icap_cfg.check_vops = KAL_FALSE;
+                    break;
+                default :
+                    break;
+            }
+            break;
+        }
+        case 12: /* VzW */
+        {
+            // Supporting RAT
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x70 | 0x09; // NR LTE/EHRPD/HRPD/1x/LTE
+
+            /* C2K setup barring */
+            cfg->ipol_ans_cfg.ipol_c2k_setup_barring = KAL_FALSE;
+
+            /* VoLTE VoPS barring */
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable = 0x01;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_vplmn_enable = 0x01;
+            cfg->ipol_ans_cfg.ipol_ims_vops_setup_barring_enable = 0x03;
+
+            /* VoLTE roaming barring */
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+
+            /* VoWiFi roaming barring */
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_FALSE;
+
+            /* IMS romaing Handover */
+            cfg->ipol_ans_cfg.ipol_ims_roaming_incall_ho_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_ho_enable = KAL_TRUE;
+
+            /* IMS cell prefer wlan dereg*/
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable = KAL_FALSE;
+
+            /* Emergency PDN handover */
+            cfg->ecc_ans_cfg.ipol_ecc_ho_enable = KAL_TRUE;
+
+            /* 5G IMS PDN handover */
+            /* Reqs-WiFi VZ_REQ_WIFI_4105999311948080 Note that the requirement is 5G 3GPP cannot handover to 4G N3GPP */
+            cfg->ipol_ans_cfg.ipol_ims_nr_idle_ho_mode = 3;
+            cfg->ipol_ans_cfg.ipol_ims_nr_incall_ho_enable = 1;
+            cfg->ipol_ans_cfg.ipol_ims_nr_incall_ho_mode_when_incall_ho_enable = 2;
+
+            /* Throttling timer Setting, only enable for idle mode */
+            cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = 0x3;
+            cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable   = 0x3;
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time  = 120;
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time = 120;
+
+            /* Threshold Settings */
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th = -115;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th = -112;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_good_th = -100;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrq_poor_th = -18;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrq_fair_th = -15;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrq_good_th = -11;
+
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -80;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -65;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -80;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -65;
+
+            /* IMS no voice sup sms enable */
+            cfg->ipol_ans_cfg.ipol_ims_no_voice_sup_sms_enable = KAL_TRUE;
+
+            /* IMS voice cap prefer enable */
+            cfg->ipol_ans_cfg.ipol_ims_voice_cap_pref_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_incall_voice_cap_pref = KAL_TRUE;
+
+            /* Threshold of QoS */
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_rtp_qos_enable                = KAL_TRUE;
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_wlan_voice_rtp_jitter_th  = 255; // 0~255
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_wlan_video_rtp_jitter_th  = 255; // 0~255
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_rtp_wlan_pkt_loss_th      = 99;  // VzW needs RTP QoS, but doesn't set quality POOR
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_rtp_wlan_qos_bkoff_t      = 20;  // 20 s
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_rtp_pkt_loss_th          = 99;  // 0~100(%)
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_rtp_sampling_duration    = 5;   // 5 s
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_rtcp_jitter_delay_th     = UNDEF_CONFIG_32;   // not to enable
+
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_cell_no_rtp_handover_enable   = KAL_TRUE;
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_no_rtp_handover_enable   = KAL_FALSE;
+            cfg->ipol_ans_cfg.qos_cfg.qos_dpd_cfg.ipol_dpd_qos_enable                = KAL_TRUE;
+            cfg->ipol_ans_cfg.qos_cfg.qos_dpd_cfg.ipol_ims_rtp_high_pkt_loss_for_dpd_th = 30;  // 0~100(%)
+            cfg->ipol_ans_cfg.qos_cfg.qos_dpd_cfg.ipol_ims_rtp_low_pkt_loss_for_dpd_th  = 10;  // 0~100(%)
+
+
+            /* icap */
+            cfg->ipol_ans_cfg.icap_cfg.check_msisdn = KAL_TRUE;
+            cfg->ipol_ans_cfg.icap_cfg.check_call_domain = KAL_TRUE;
+            cfg->ipol_ans_cfg.icap_cfg.video_cap_depend_on_voice_wifi = KAL_FALSE;
+            cfg->ipol_ans_cfg.icap_cfg.check_roam_vops = KAL_FALSE;
+
+            cfg->comm_ans_cfg.ims_maintain_when_rf_off = KAL_TRUE;
+
+            cfg->comm_ans_cfg.pref_cfg.wans_ims_pref_setting = 0x0F; //MS 4bits : 0 = not refer to WFC on/off
+            cfg->comm_ans_cfg.pref_cfg.wans_ecc_pref_setting = 0x0F; //MS 4bits : 0 = not refer to WFC on/off
+
+            cfg->comm_ans_cfg.pref_cfg.wans_default_pref_setting = 0x0F; //MS 4bits : 0 = not refer to WFC on/off
+            cfg->comm_ans_cfg.pref_cfg.wans_mms_pref_setting = 0x0F; //MS 4bits : 0 = not refer to WFC on/off
+            cfg->comm_ans_cfg.pref_cfg.wans_xcap_pref_setting = 0x0F; //MS 4bits : 0 = not refer to WFC on/off
+            cfg->comm_ans_cfg.pref_cfg.wans_bip_pref_setting = 0x0F; //MS 4bits : 0 = not refer to WFC on/off
+            cfg->comm_ans_cfg.pref_cfg.wans_supl_pref_setting = 0x0F; //MS 4bits : 0 = not refer to WFC on/off
+            cfg->comm_ans_cfg.pref_cfg.wans_vsim_pref_setting = 0x0F; //MS 4bits : 0 = not refer to WFC on/off
+            cfg->comm_ans_cfg.pref_cfg.wans_ptt_pref_setting = 0x0F; //MS 4bits : 0 = not refer to WFC on/off
+            break;
+        }
+        case 15: /* Telefonica */
+        {
+            switch (atoi(sim_mcc)) {
+                case 234: // UK
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -75;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -70;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th = -75;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th = -70;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th       = -116; //-43~-141
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th       = -90; //-43~-141
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x00;
+                    break;
+                case 262: // DE
+                    cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat        = 0x40 | 0x7; // NR/LTE/3G/2G
+                    cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_TRUE;
+                    break;
+                case 214: // ES
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x00;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 16: /* EE */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x40 | 0x1;
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable    = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ecc_ans_cfg.ipol_ecc_ho_enable = KAL_FALSE;
+
+            /* Should be enabled for [GCF][VoWiFi-46.2.3][92.6.2.3]. Default = KAL_FALSE */
+            cfg->ipol_ans_cfg.ipol_ims_dereg_poor_wifi_enable = KAL_FALSE;
+
+            /* Threshold of QoS */
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_rtp_qos_enable                = KAL_TRUE;
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_rtp_wlan_pkt_loss_th      = 50;   // 0~100
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_rtp_wlan_qos_bkoff_t      = 20;  // 20 s
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_rtp_sampling_duration    = 5;   // 5 s
+
+            /* Handover thresholds for call active */
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -75;
+            break;
+        }
+        case 17: /* DoCoMo */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 18: /* RJIL */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable   = 0x01;
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_rtp_qos_enable                = KAL_TRUE;
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_wlan_voice_rtp_jitter_th  = 25; //0~255
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_wlan_video_rtp_jitter_th  = 25; //0~255
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_rtp_wlan_pkt_loss_th      = 50; //0~100
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_rtp_wlan_qos_bkoff_t      = 600; //default is 10 mins
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_rtp_pkt_loss_th          = 50; //0~100
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_rtp_sampling_duration    = 5; //5 s
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_rtcp_jitter_delay_th     = UNDEF_CONFIG_32;   // not to enable
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -75;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -75;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th       = -116; //-43~-141
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th       = -106; //-43~-141
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrq_poor_th       = -19; //-3~-20
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrq_fair_th       = -17; //-3~-20
+            //ping
+            cfg->ipol_ans_cfg.qos_cfg.qos_ping_cfg.ipol_ping_qos_enable     = KAL_TRUE;
+            cfg->ipol_ans_cfg.qos_cfg.qos_ping_cfg.ipol_ping_interval       = 1800; //in sec = 30 mins
+            cfg->ipol_ans_cfg.qos_cfg.qos_ping_cfg.ipol_ping_latency_th     = 5000; //in ms
+            cfg->ipol_ans_cfg.qos_cfg.qos_ping_cfg.ipol_ping_loss_th        = 50; //0~100%
+            cfg->comm_ans_cfg.ims_maintain_when_rf_off = KAL_TRUE;
+            break;
+        }
+        case 19: /* Telstra */
+        {
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th       = -118; //-43~-141
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th       = -110; //-43~-141
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th      = -110;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th      = -106;
+
+            // Throttling
+            cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time  = 30;
+            cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable  = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time  = 30;
+
+            break;
+        }
+        case 20: /* Sprint */
+        {
+            /* Supporting RAT   ************/
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat                       = 0x40 | 0x1;       // NR LTE
+                                                                                       // IMS-00378
+            /* VoLTE VoPS barring **********/
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable               = 0x00; // Sprint can register IMS when only SMSIP
+            cfg->ipol_ans_cfg.ipol_ims_vops_setup_barring_enable               = 0x00; // IMS-00306
+            cfg->ipol_ans_cfg.ipol_ims_vops_idle_ho_barring_enable             = 0x00;
+
+            /* VoLTE  roaming barring  ******/
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable                  = KAL_FALSE; // IMS-00306: Sprint doesn't restrict roaming
+
+            /* VoWiFi roaming barring ******/
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable             = KAL_FALSE; // IMS-00306: Sprint doesn't restrict roaming
+
+            /* IMS romaing Handover ********/
+            cfg->ipol_ans_cfg.ipol_ims_roaming_incall_ho_enable                = KAL_FALSE; // Sprint doesn't describe romaing handover
+            cfg->ipol_ans_cfg.ipol_ims_roaming_ho_enable                       = KAL_TRUE;  // So, follow VzW
+
+            /* IMS cell prefer wlan dereg **/
+            /* Refer to VLTE-00095  ********/
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable                          = KAL_TRUE;  // Sprint needs CS prefer
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable                       = KAL_TRUE;
+
+            cfg->comm_ans_cfg.pref_cfg.wans_ims_pref_setting = 0x0F; //MS 4bits : 0 = not refer to WFC on/off
+
+            /* Throttling timer setting ****/
+            cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable       = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable       = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 120;       // Sprint needs throttling
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time = 120;       // But not define timer
+                                                                                       // IMS-00249
+            /* Threshold Settings **********/
+            // Sprint doesn't define LTE / Wi-Fi quality threshold                     // IMS-00426, IMS-00442, IMS-00247
+                                                                                       // IMS-00419, IMS-00425, IMS-00421
+            /* Default LTE and C2K thresholds */
+
+            /* Threshold of QoS ************/
+            // Sprint doesn't QoS threshold
+
+            /* IMS SMSIP REG ***************/
+            cfg->ipol_ans_cfg.ipol_ims_no_voice_sup_sms_enable                 = KAL_TRUE;  // Sprint requirement IMS-00306, IMS-00423, IMS-00443
+
+            /* IMS prefer voice capability */
+            cfg->ipol_ans_cfg.ipol_ims_voice_cap_pref_enable                   = KAL_TRUE;  // Sprint doesn't define
+
+            /* IMS location query  *********/
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable                     = KAL_TRUE;  // Sprint queries country code after WiFi association
+            cfg->ipol_ans_cfg.loc_cfg.ipol_ims_wlan_no_location_barring_enable = KAL_TRUE;  // IMS-00199
+            cfg->ipol_ans_cfg.loc_cfg.ipol_ims_wlan_block_in_ap_mode_when_home_enable = KAL_FALSE;
+
+            /* Emergency call rules  *******/
+            cfg->ecc_ans_cfg.ipol_ecc_ho_enable                                = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_ecc_over_ims_ho_lte_to_wifi_enable      = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_ecc_over_ims_ho_wifi_to_lte_enable      = KAL_TRUE;
+
+            /* icap */
+            cfg->ipol_ans_cfg.icap_cfg.check_call_domain = IMCF_TRUE;
+            cfg->ipol_ans_cfg.icap_cfg.check_roam_vops = KAL_FALSE;
+
+            break;
+        }
+        case 21: /* DISH */
+        {
+            // Initial package
+            cfg->ipol_ans_cfg.ipol_ims_incall_voice_cap_pref = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_23g_wifi_rat_reselect_by_dreg_enable = KAL_TRUE;
+            // DISH_v1.2_30802.34
+            cfg->comm_ans_cfg.pref_cfg.wans_ims_pref_setting = 0x0F; // Refer to WFC UI
+            // DISH_v1.2_32703.15
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable        = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable   = KAL_FALSE;
+            // DISH_v1.9_32902.03
+            cfg->ipol_ans_cfg.ipol_ims_roaming_incall_ho_enable = KAL_FALSE;
+            // DISH_v1.2_32901.02 DISH_v1.2_32901.03 DISH_v1.2_32901.09
+            cfg->ipol_ans_cfg.ipol_ims_nr_idle_ho_mode = 1;
+            cfg->ipol_ans_cfg.ipol_ims_nr_incall_ho_enable = 1;
+            cfg->ipol_ans_cfg.ipol_ims_nr_incall_ho_mode_when_incall_ho_enable = 0;
+            // DISH_v1.2_32901.11
+            cfg->ipol_ans_cfg.ipol_incall_prefer_current_rat = 2;
+            // DISH_v1.2_32901.12
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -78;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -72;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -78;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -72;
+            // DISH_v1.9_30805.29
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_rtp_qos_enable             = KAL_TRUE;
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_rtcp_jitter_delay_th  = 20; // ms 
+            cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable       = KAL_TRUE;
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 5;
+            cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable       = KAL_TRUE;
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time = 5;
+            // Dish_TC_LT31408.09-1 abd Dish_TC_LT31408.10-1
+            cfg->ecc_ans_cfg.ipol_ecc_ho_enable = KAL_TRUE;
+			break;
+        }
+        case 50: /* softbank */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 100: /* CSL */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable   = KAL_TRUE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+            break;
+        }
+        case 101: /* PCCW */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable   = KAL_TRUE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+            break;
+        }
+        case 102: /* SMT */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable   = KAL_TRUE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+            break;
+        }
+        case 103: /* SingTel */
+        {
+            break;
+        }
+        case 104: /* StarHub */
+        {
+            break;
+        }
+		case 105: /* Claro */
+        {
+            switch (atoi(sim_mcc)) {
+                case 744: /*Paraguay*/
+                    /* WLAN signal strength threshold */
+                    cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time  = 120;
+                    cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time  = 120;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -85;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -75;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -85;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -75;
+
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th = -120;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th = -114;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrq_poor_th = -18;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrq_fair_th = -14;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th = -102;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th = -108;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_ecno_fair_th = -7;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_ecno_poor_th = -12;
+
+                    cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x40 | 0x1;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_vops_barring_vplmn_enable   = 0x00;
+                    cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_enable                = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_mdpoor_barring_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_incall_barring_enable = KAL_TRUE;
+                    cfg->ecc_ans_cfg.ipol_ecc_ho_enable = KAL_TRUE;
+                    break;
+                default:
+                    break; 
+            }
+
+            break;
+        }
+        case 106: /* 3HK */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable   = KAL_TRUE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+            break;
+        }
+        case 107: /* SFR */
+        {
+            cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 30;
+            cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time= 30;
+
+            /* WLAN signal strength threshold */
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -82;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -75;
+
+            break;
+        }
+		case 108: /* TWM */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 110: /* FET */
+        {
+            break;
+        }
+        case 111: /*India VDF*/
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -65;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -65;
+            break;
+        }
+        case 112: /* Telcel */
+        {
+            /* WLAN signal strength threshold */
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 120;
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time = 120;
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x40 | 0x1;
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_vplmn_enable   = 0x00;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -75;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -75;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th = -120;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th = -114;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrq_fair_th = -10;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrq_poor_th = -14;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th = -102;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th = -108;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_ecno_fair_th = -7;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_ecno_poor_th = -12;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_enable                = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_mdpoor_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_incall_barring_enable = KAL_TRUE;
+            cfg->ecc_ans_cfg.ipol_ecc_ho_enable = KAL_TRUE;
+            break;
+        }
+        case 113: /* Beeline */
+        {
+            break;
+        }
+        case 115: /* SKT */
+        {
+            /* icap */
+            cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x04;
+            break;
+        }
+        case 117: /* Smartfren */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable         = KAL_FALSE;
+            break;
+        }
+        case 118: /* YTL */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 119: /* Natcom */
+        {
+            break;
+        }
+        case 120: /* Claro */
+        {
+            /* WLAN signal strength threshold */
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time  = 120;
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time  = 120;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -75;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -75;
+
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th = -120;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th = -114;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrq_poor_th = -18;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrq_fair_th = -14;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th = -102;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th = -108;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_ecno_fair_th = -7;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_ecno_poor_th = -12;
+
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x40 | 0x1;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_vplmn_enable   = 0x00;
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_enable                = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_mdpoor_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_incall_barring_enable = KAL_TRUE;
+            cfg->ecc_ans_cfg.ipol_ecc_ho_enable = KAL_TRUE;
+            break;
+        }
+        case 121: /* Bell */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable    = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable = 0x00;
+            cfg->ipol_ans_cfg.ipol_ims_vops_setup_barring_enable = 0x00;
+            cfg->ipol_ans_cfg.ipol_ims_ecc_over_ims_ho_wifi_to_lte_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.icap_cfg.check_vops = KAL_TRUE;
+            break;
+        }
+        case 122: /* AIS */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_nr_wifi_rat_reselect_by_dreg_enable = KAL_TRUE;
+            break;
+        }
+        case 124: /* APTG */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+            cfg->ipol_ans_cfg.qos_cfg.qos_dpd_cfg.ipol_dpd_qos_enable  = KAL_TRUE;
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_cell_no_rtcp_handover_timer = 0;
+            break;
+        }
+        case 125: /* DTAC */
+        {
+            break;
+        }
+        case 126: /* Turkey Avea */
+        {
+			switch (atoi(sim_mcc)) {
+                case 286:
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+                    break;
+                default:
+                    break;
+                
+            }
+            break;
+        }
+        case 127: /* MEGAFON */
+        {
+            cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 120;
+            cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time= 120;
+
+            // SNR Thresholds
+            // Gen9x values are in dB, assume the iWLAN is as well
+            // prru_ctx->policy.i4wifisnrh = 18;
+            // prru_ctx->policy.i4wifisnrl = 15;
+
+            /* WiFi not support SNR report and if configuration SNR threshlod will always rank WiFi is POOR in this branch*/
+            //cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_snr_fair_th = 18;
+            //cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_snr_poor_th = 15;
+
+            // LTE RSSI
+            // Gen9x values
+            // prru_ctx->policy.i4ltersrph = -80;
+            // prru_ctx->policy.i4ltersrpm = -85;
+            // prru_ctx->policy.i4ltersrpl = -90;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th = -90;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th = -80;
+
+            // Gen9x RSRQ range is 0~34 i.e. mapped integer value
+            // iWLAN RSRQ range is -3~-20 i.e. dB
+            // Gen9x values 10...14 = -12dB...-15dB
+            // prru_ctx->policy.i4ltersrqh = 14;
+            // prru_ctx->policy.i4ltersrqm = 12;
+            // prru_ctx->policy.i4ltersrql = 10;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrq_fair_th = -15;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrq_poor_th = -12;
+
+            break;
+        }
+        case 128: /* DNA Finland */
+        {
+            /* WLAN signal strength threshold */
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -82;
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable    = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable = KAL_TRUE;
+            break;
+        }
+        case 129: /* KDDI */
+        {
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -80;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -74;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th = -80;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th = -74;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable      = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_vplmn_enable   = 0x00;
+            cfg->ipol_ans_cfg.ipol_ims_ecc_over_emerg_ho_enable    = KAL_FALSE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_ims_wlan_no_location_no_cell_no_last_cell_as_home_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_ims_cell_sig_rank_when_cell_dereg_enable = KAL_TRUE;
+            break;
+        }
+        case 130: /* TIM */
+        {
+            cfg->ipol_ans_cfg.icap_cfg.check_vops = KAL_TRUE;
+
+            switch (atoi(sim_mcc)) {
+                case 222: // IT(Italy)
+                    cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat        = 0x40 | 0x7; // NR/LTE/3G/2G
+                    cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_FALSE;
+                    cfg->ipol_ans_cfg.icap_cfg.check_vops               = KAL_FALSE;
+
+                    cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable   = 0x00;
+                    cfg->ipol_ans_cfg.ipol_ims_vops_setup_barring_enable   = 0x00;
+                    cfg->ipol_ans_cfg.ipol_ims_vops_idle_ho_barring_enable = 0x00;
+
+                    break;
+                case 724:
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+                    cfg->ipol_ans_cfg.icap_cfg.check_vops                      = KAL_FALSE;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 131: /* TrueMove */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_vplmn_enable   = 0x00;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -75;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -65;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -75;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -65;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 132: /* Movistar,VIVO */
+        {
+            cfg->xcap_ans_cfg.xcap_cell_only_barring_enable = KAL_TRUE;
+			cfg->xcap_ans_cfg.xcap_epdg_connected_epdg_barring_enable = KAL_TRUE;
+			switch (atoi(sim_mcc)) {
+                case 716: /*Peru*/
+                    cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x40 | 0x1;
+                    cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable    = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_FALSE;
+                    cfg->xcap_ans_cfg.xcap_wlan_only_barring_enable = KAL_TRUE;
+                    break;
+                case 722: /*Argentina*/
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_incall_ho_enable = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable   = KAL_FALSE;
+                    break;
+                case 730: /*Chile*/
+                    cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+                    cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 30;
+                    cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+                    cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time = 30;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+                    break;
+				case 732: /* Colombia */
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+					break;
+                case 740: /* Ecuador */
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+					break;
+                case 748: /* Uruguay */
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+					break;
+				case 334: /* Mexico */
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+					break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 133: /* DU */
+        {
+            break;
+        }
+        case 134: /* Elisa Finland */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable    = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 135: /* MTS */
+        {
+            switch (atoi(sim_mcc)) {
+                case 250: //RUSSIA
+                    cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x40 | 0x01;
+                    break;
+                default :
+                    break;
+            }
+            break;
+        }
+        case 136: /* Entel*/
+        {
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_FALSE;//Chile
+			
+			switch (atoi(sim_mcc)) {
+                case 716: // Peru
+                    cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+                    cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 30;
+                    cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable = KAL_FALSE;
+					cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_rtp_qos_enable = KAL_TRUE;
+					cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_ims_rtp_wlan_pkt_loss_th = 2;   // 0~100
+					cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time  						= 15;
+					cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th 	= -80;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th 	= -75;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   	= -80;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   	= -75;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th 			= -120;
+                    cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th 			= -114;
+					cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th        	= -108;
+					cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th       	= -102;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 137: /* Tele2 */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable    = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable = KAL_TRUE;
+
+            switch (atoi(sim_mcc)) {
+                case 240: // SE (Sweden)
+                    cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x40 | 0x1;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_ecc_over_ims_ho_lte_to_wifi_enable = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_ecc_over_ims_ho_wifi_to_lte_enable = KAL_FALSE;
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+                    break;
+                case 248: // Estonia
+                    /* WLAN signal strength threshold */
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -75;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -70;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -75;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -70;
+
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_voice_cap_pref_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_23g_wifi_rat_reselect_by_dreg_enable = KAL_TRUE;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 139: /* Bouygues */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat                           = 0x40 | 0x7; // NR/LTE/3G/2G
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable                    = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable                      = KAL_FALSE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable                         = KAL_TRUE;
+
+            /* Prevent HO to non-vops 3G */
+            cfg->ipol_ans_cfg.ipol_ims_incall_voice_cap_pref                       = KAL_TRUE;
+            cfg->ipol_ans_cfg.icap_cfg.check_vops                                  = KAL_TRUE;
+
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable                 = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable                   = 0x00;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -79;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -70;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th         = -120;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th         = -110;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th        = -100;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th        = -90;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_poor_th         = -70;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_fair_th         = -60;
+            /* icap */
+            cfg->ipol_ans_cfg.icap_cfg.voice_cap_whenever                          = KAL_TRUE;
+            cfg->ipol_ans_cfg.icap_cfg.sms_network_types                           = 0x02;
+            break;
+        }
+		case 140: /* MTN */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x1;
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_TRUE;
+			switch (atoi(sim_mcc)) {
+                case 620: //Ghana
+					cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable      					  = KAL_TRUE;
+					cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable 					  = KAL_TRUE;
+					cfg->xcap_ans_cfg.xcap_roaming_barring_enable  							  = KAL_TRUE;
+					cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th    = -79;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th    = -72;
+					cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th      = -79;
+					cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th      = -72;
+					break;
+			}
+            break;
+        }
+        case 143: /* TurkCell */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable    = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable = KAL_TRUE;
+            break;
+        }
+        case 146:/* Etisalat */
+        {
+            break;
+        }
+        case 147: /* Airtel */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -75;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -75;
+			cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.qos_cfg.qos_dpd_cfg.ipol_dpd_qos_enable                = KAL_TRUE;
+            cfg->ipol_ans_cfg.qos_cfg.qos_dpd_cfg.ipol_ims_rtp_high_pkt_loss_for_dpd_th = 30;  // 0~100(%)
+            cfg->ipol_ans_cfg.qos_cfg.qos_dpd_cfg.ipol_ims_rtp_low_pkt_loss_for_dpd_th  = 10;  // 0~100(%)
+            break;
+        }
+        case 149: /* CMHK */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable   = KAL_TRUE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+            break;
+        }
+        case 150:/* Swisscom */
+        {
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -80;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -60;
+
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -78;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -60;
+
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th = -122;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th = -105;
+
+            // Throttling
+            cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable  = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time  = 120;
+            cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable  = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time  = 120;
+
+            cfg->comm_ans_cfg.trtl_cfg.wlan_poor_stop_cell_trtl_enable = KAL_TRUE;
+
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_cell_no_rtp_handover_enable = KAL_TRUE;
+            cfg->comm_ans_cfg.trtl_cfg.cell_no_rtp_stop_wlan_trtl_enable = KAL_TRUE;
+			cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 152: /*Optus*/
+        {
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable        = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable     = KAL_TRUE;
+            cfg->ecc_ans_cfg.ipol_ecc_ho_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th       = -113;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th       = -104;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th      = -108;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th      = -99;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_poor_th       = -102;   // 2G defaut value
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_fair_th       = -94;    // 2G defaut value
+            break;
+        }
+        case 153: /*VHA*/
+        {
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th = -121;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th = -113;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -74;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th = -112;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th = -103;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_ecno_poor_th = -16;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_ecno_fair_th = -7;
+            break;
+        }
+        case 154: /* Telia */
+        {
+            /* WLAN signal strength threshold */
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -79;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -72;
+
+            cfg->ipol_ans_cfg.ipol_ims_23g_wifi_rat_reselect_by_dreg_enable = KAL_TRUE;
+
+            /* All location use the same config*/
+            cfg->ecc_ans_cfg.ipol_ecc_ho_enable = KAL_FALSE;
+
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable        = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable   = KAL_FALSE;    // may be true, will be check
+
+            switch (atoi(sim_mcc)) {
+                case 238: // DK (Denmark)
+                    cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat         = 0x40 | 0x7;
+                    cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable  = KAL_TRUE;
+					cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+					cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable         = KAL_TRUE;
+
+                    cfg->xcap_ans_cfg.xcap_roaming_barring_enable   = KAL_FALSE;
+                    // VoPS support in 2G/3G is NO
+                    // Keep IMS context after IRAT to 2G/3G
+                    break;
+
+                case 240: // SE(Sweden)
+                case 244: // FI(Finland)
+                    cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat         = 0x40 | 0x7; // NR/LTE/3G/2G
+                    cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable  = KAL_FALSE;
+
+                    /* VOPS barring disabled to allow IMS PDN and maintain in legacy 3GPP RAT */
+                    cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable = 0x00;
+                    cfg->ipol_ans_cfg.ipol_ims_vops_setup_barring_enable = 0x00;
+                    cfg->ipol_ans_cfg.icap_cfg.check_vops                = KAL_TRUE;
+                    break;
+
+                case 242: // NO(Norway)
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable   = KAL_FALSE;
+                    break;
+
+                default :
+                    break;
+            }
+            break;
+        }
+        case 155: /* DIGI */
+        {
+            switch (atoi(sim_mcc)) {
+                case 216: // Hungary
+                    cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_no_rtp_handover_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_incall_check_no_rtp_enable = KAL_TRUE;
+
+                    cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+                    cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 33;
+                    cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+                    cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time = 33;
+
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -73;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -63;
+
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -76;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -66;
+
+                    cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable = KAL_FALSE;
+
+                    break;
+
+                case 502: // Malaysia
+                    cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_no_rtp_handover_enable = KAL_TRUE;
+                    cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+                    cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 30;
+                    cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+                    cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time = 30;
+					cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x1;
+					cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_TRUE;
+                    break;
+
+                default:
+                    break;
+            }
+            break;
+        }
+        case 156: /* Telenor */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable    = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable = KAL_TRUE;
+            switch (atoi(sim_mcc)) {
+                case 216: // Hungary
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x0B;
+                    break;
+                case 220: // Serbia
+                    /* icap */
+                    cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat           = 0x40 | 0x7; // NR/LTE/3G/2G
+                    cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable    = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable      = KAL_FALSE;
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_FALSE;
+                    break;
+                case 238: // Denmark
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+                    break;
+                case 297: // Montenegro
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x00;
+                    break;
+                case 410: // Pakistan
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x07;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 157: /* Telus */
+        {
+            cfg->xcap_ans_cfg.xcap_pdn_alignment_setting = 2;
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x40 | 0x7; // NR/LTE/3G/2G
+            cfg->ipol_ans_cfg.ipol_ims_no_voice_sup_sms_enable   = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable = 0x00;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_vplmn_enable = 0x00;
+            cfg->ipol_ans_cfg.ipol_ims_vops_setup_barring_enable = 0x00;
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable  = KAL_FALSE;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th = -100;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th = -105;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th  = -116;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th  = -106;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.icap_cfg.check_vops = KAL_TRUE;
+            break;
+        }
+        case 158: /* Zain */
+        {
+            switch (atoi(sim_mcc)) {
+                case 419: //Kuwait
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+                    break;
+                case 420: //Saudi
+                    /* Enable location query */
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+                    /* Block WFC call in AP mode when in home country */
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_ims_wlan_block_in_ap_mode_when_home_enable = KAL_TRUE;
+                    break;
+                default :
+                    break;
+            }
+            break;
+        }
+        case 159: /* STC Saudi */
+        {
+            switch (atoi(sim_mcc)) {
+                case 419: //Kuwait
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable   = KAL_TRUE;
+                    break;
+                case 420: //Saudi
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_ims_wlan_block_in_ap_mode_when_home_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_TRUE;
+                    break;
+                case 426: //Bahrain
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable  = KAL_TRUE;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -83;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -66;
+                    break;
+                default :
+                    break;
+            }
+            break;
+        }
+        case 161: /* Play */
+        {
+            /* WiFI RSSI */
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -75;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -70;
+
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -75;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -70;
+
+            cfg->ipol_ans_cfg.ipol_ims_maintain_call_in_wifi_when_in_cs_preferred = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_incall_barring_enable = KAL_TRUE;
+            cfg->comm_ans_cfg.meas_cfg.wlan_deact_meas_time = 3000;
+            break;
+        }
+        case 165: /* Sunrise */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable             = KAL_TRUE;
+            break;
+        }
+        case 166: /* Salt */
+        {
+            /* IMS cell prefer wlan dereg*/
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable         = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable      = KAL_TRUE;
+
+            /* VoWiFi roaming barring */
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable    = KAL_TRUE;
+
+            /* WiFI RSSI */
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -83;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th    = -76;
+
+            /* Throttling timer Settings */
+			cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 10;
+			cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable  = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time = 10;
+            break;
+        }
+        case 170:  /* Partner*/
+        {
+            switch (atoi(sim_mcc)){
+                case 425: //Israel
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -70;
+                    cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -80;
+					cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+                    break;
+                default :
+                    break;
+            }
+            break;
+        }
+		case 171: /* WOM Colombia */
+		{
+            switch (atoi(sim_mcc)) {
+                case 732:
+					cfg->ecc_ans_cfg.ipol_ecc_ho_enable = KAL_TRUE;
+					cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+                    break;
+                default :
+                    break;
+            }
+            break;
+        }
+        case 172: /* Altice  */
+        {
+            switch (atoi(sim_mcc)) {
+                case 370: //Dominican
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+					cfg->xcap_ans_cfg.xcap_roaming_barring_enable     = KAL_TRUE;
+					cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = KAL_FALSE;
+					cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable = KAL_FALSE;
+                    break;
+                default :
+                    break;
+            }
+            break;
+        }
+        case 175: /* TDC */
+        {
+            switch (atoi(sim_mcc)) {
+                case 238: //Denmark
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+                    break;
+                default :
+                    break;
+            }
+            break;
+        }
+        case 178: /* Smart */
+        {
+            switch (atoi(sim_mcc)) {
+                case 456: /*Cambodia*/
+                    cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = KAL_TRUE;
+                    cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 30;
+                    cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable = KAL_TRUE;
+                    cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time = 30;
+                    break;
+                case 515: /*Philippines*/
+                    cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable = KAL_FALSE;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 179: /* Newroz */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable             = KAL_TRUE;
+
+            cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = KAL_TRUE;
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 30;
+            cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable = KAL_TRUE;
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time = 30;
+            break;
+        }
+        case 181: /* Telkom */
+        {
+            break;
+        }
+        case 182: /* Proximus */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+            /* icap */
+            cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x0B;
+            break;
+        }
+        case 183: /* Personal */
+        {
+		    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 184: /* Viettel */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable    = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_vplmn_enable = 0x00;
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat        = 0x40 | 0x7; // NR/LTE/3G/2G
+            break;
+        }
+        case 185: /*2 Degrees*/
+        {
+            cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 30;
+            cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time = 30;
+            break;
+        }
+        case 186: /* Idea */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_vplmn_enable = 0x00;
+            break;
+        }
+        case 187: /*Safaricom/Kenya*/
+        {
+            cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable       = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 0;
+            cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable       = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time = 0;
+            break;
+        }
+        case 188: /* A1 */
+        {
+            // Throttling
+            cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable  = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time  = 30;
+            cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable  = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time  = 30;
+
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat        = 0x40 | 0x7; // NR LTE/3G/2G
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_TRUE;
+            break;
+        }
+        case 195: /*O2*/
+        {
+            /* WLAN signal strength threshold */
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -79;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -72;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -82;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -75;
+            /* MD signal strength threshold */
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th   = -118;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th   = -108;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th  = -108;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th  = -98;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_poor_th   = -102;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_fair_th   = -92;
+
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+
+            switch (atoi(sim_mcc)) {
+                case 230: /* Czech */
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.loc_cfg.ipol_ims_wlan_use_nv_md_srv_if_unknown_home_in_flight_mode = KAL_TRUE;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 201: /* KPN */
+        {
+            /* VoWiFi roaming barring */
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+
+            /* Location query enabled and use NVRAM cellular registration status if location not found */
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_ims_wlan_use_nv_md_srv_if_unknown_home_in_flight_mode = KAL_TRUE;
+
+            /* MD signal strength threshold */
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th   = -122;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th   = -114;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th  = -110;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th  = -105;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_poor_th   = -104;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_gsm_rssi_fair_th   = -100;
+            break;
+        }
+        case 202: /* Spark NewZealand */
+        {
+            /* icap */
+            cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x04;
+            break;
+        }
+        case 203: /* NOS */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable    = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 204: /* Rogers */
+        {
+            /* Canada */
+            cfg->ipol_ans_cfg.ipol_ims_nr_idle_ho_mode = 2;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_incall_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_mdpoor_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_poor_wifi_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable   = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x40 | 0x7; // NR/LTE/3G/2G
+            cfg->ipol_ans_cfg.ipol_ims_23g_wifi_rat_reselect_by_dreg_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable = 0x00;
+            cfg->ipol_ans_cfg.ipol_ims_vops_setup_barring_enable = 0x00;
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable  = KAL_FALSE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+            break;
+        }
+		case 209: /* Avantel/Colombia */
+        {
+			cfg->ecc_ans_cfg.ipol_ecc_ho_enable = KAL_TRUE;
+            break;
+        }
+        case 210: /* BSNL */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+		case 213: /* Motiv */
+		{
+			/* Russia */
+			cfg->xcap_ans_cfg.xcap_epdg_connected_epdg_barring_enable = KAL_TRUE;  
+			cfg->xcap_ans_cfg.xcap_cell_only_barring_enable		      = KAL_TRUE;
+			break;
+		}
+        case 214: /* IDC */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable         = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_dereg_enable      = KAL_TRUE;
+
+            // Throttling
+            cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable       = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable       = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time = 30;
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time = 30;
+            break;
+        }
+        case 218: /* Rakuten/Japen */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+		case 220: /* Tigo*/
+        {
+           switch (atoi(sim_mcc)) {
+                case 736: /* Bolivia*/
+					cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat         = 0x40 | 0x7; // NR/LTE/3G/2G
+                    cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable  = KAL_FALSE;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 221: /* TPG */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+            switch (atoi(sim_mcc)) {
+                case 525: // Singapore
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable  = KAL_FALSE;
+                    cfg->mms_ans_cfg.mms_epdg_connected_barring_enable = KAL_TRUE;
+                    cfg->mms_ans_cfg.mms_cell_only_barring_enable      = KAL_TRUE;
+                    break;
+
+                default:
+                    break;
+            }
+            break;
+        }
+        case 225: /*XL indonesia*/
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 227: /* Wind */
+        {
+            switch (atoi(sim_mcc)) {
+                case 202: // Greece
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x04;
+                break;
+            default:
+                break;
+            }
+            break;
+        }
+        case 231: /* Maxis/Malaysia */
+        {
+	        cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+            break;
+        }
+        case 233: /* Pelephone/Israel */
+        {
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th    = -79;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th    = -72;
+            break;
+        }
+        case 234: /* Plus/Poland*/
+        {
+            /* WLAN signal strength threshold */
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -75;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -65;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -75;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -65;
+
+            cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable  = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time  = 30;
+            cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable  = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time  = 30;
+            break;
+        }
+        case 235: /* VIP */
+        {
+            switch (atoi(sim_mcc)) {
+                case 220: // Serbia
+                    /* icap */
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types = 0x04;
+                break;
+            default:
+                break;
+            }
+            break;
+        }
+        case 236: /* USCC  */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_vodm_pref_barring_enable = KAL_TRUE;
+            break;
+        }
+        case 237: /* ICE Norway  */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th    = -79;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th    = -72;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th      = -79;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th      = -72;
+            break;
+        }
+        case 238: /* Videotron */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat        = 0x3;
+            cfg->ecc_ans_cfg.ipol_ecc_ho_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th   = -120;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th   = -114;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th  = -110;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th  = -103;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th    = -80;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th    = -74;
+            break;
+
+        }
+
+        case 240: /* XploreMobille */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat           = 0x40 | 0x3; // NR LTE & 3G
+            //cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE; 
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable   = 0x02;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_vplmn_enable   = 0x02;
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable    = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_vops_setup_barring_enable   = KAL_FALSE;
+            break;
+        }
+
+		case 241:  /*Claro - Puerto Rico*/
+     	{
+			cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time  = 120;
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time  = 120;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -75;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -75;
+
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th = -120;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th = -114;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrq_poor_th = -14;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrq_fair_th = -10;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_fair_th = -102;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_rscp_poor_th = -108;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_ecno_fair_th = -7;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_umts_ecno_poor_th = -12;
+
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x40 | 0x1;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_vplmn_enable   = 0x00;
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_enable                = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_mdpoor_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_dereg_dead_zone_incall_barring_enable = KAL_TRUE;
+            cfg->ecc_ans_cfg.ipol_ecc_ho_enable = KAL_TRUE;
+            break;
+	    }
+		case 242: /*INWI/Morocco*/
+     	{
+			cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable    = KAL_FALSE;
+			cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat           = 0x40 | 0x07;
+            break;
+	    }
+        case 243: /*Globe*/
+     	{
+            break;
+	    }
+        case 244: /*Metfone Combodia*/
+     	{
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -70;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th = -70;
+            cfg->comm_ans_cfg.trtl_cfg.wlan_trtl_enable = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.wlan_rove_in_trtl_time  = 30;
+            cfg->comm_ans_cfg.trtl_cfg.cell_trtl_enable  = BITMASK(IPOL_CFG_THROTTLING_ENABLE);
+            cfg->comm_ans_cfg.trtl_cfg.cell_rove_in_trtl_time  = 30;
+            break;
+	    }
+	    case 245: /* vietnam */
+        {
+	        cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+            break;
+        }
+		case 267: /* GCI */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_23g_wifi_rat_reselect_by_dreg_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable 			= KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_incall_voice_cap_pref 				= KAL_TRUE;
+            break;
+        }
+		case 271: /* Nemont(Sagebrush) */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+		case 273: /* OptimERA */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+        case 274: /* Yoigo */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 276: /* Altice USA */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+            break;
+        }
+        case 278: /* jazz pakistan*/
+        {
+            switch (atoi(sim_mcc)){
+                case 410:
+                    cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat           = 0x40 | 0x3; // NR LTE&3G
+                    cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable    = KAL_FALSE;
+                    break;
+                default :
+                    break;
+            }
+            break;
+        }
+        case 279: /* DITO Philippines */
+        {
+            /* WLAN signal strength threshold */
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -82;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -76;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th = -82;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th = -76;
+
+            /* MD signal strength threshold */
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th = -110;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th = -100;
+
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+            /* Roaming WLAN not allowed */
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+            break;
+        }
+		case 280: /* OTZ */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+        case 281: /* Kyivstar/Ukraine */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat        = 0x40 | 0x7; // NR LTE/3G/2G
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 282: /* Mobily/Saudi */
+        {
+            cfg->xcap_ans_cfg.xcap_roaming_barring_enable  = KAL_TRUE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_ims_wlan_block_in_ap_mode_when_home_enable = KAL_TRUE;
+            break;
+        }
+        case 285: /* Vinafhone/Vietnam */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+            break;
+        }
+        case 288: /* Virgin/UK */
+        {
+            /* VoWiFi roaming barring */
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+            break;
+        }
+        case 291: /* LMT Latvia */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 304: /* CMTO Macau */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 310: /* Hotmobile*/
+        {
+            switch (atoi(sim_mcc)){
+                case 425:  //Israel
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+                    break;
+                default :
+                    break;
+            }
+            break;
+        }
+        case 316: /* Nex-Tech */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_ecc_over_ims_ho_lte_to_wifi_enable   = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_23g_wifi_rat_reselect_by_dreg_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable          = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_incall_voice_cap_pref                = KAL_TRUE;
+            break;
+        }
+        case 317: /* Commnet */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_23g_wifi_rat_reselect_by_dreg_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable          = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_incall_voice_cap_pref                = KAL_TRUE;
+            break;
+        }
+        case 318: /* Vianova/Italy */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat        = 0x40 | 0x7; // NR LTE/3G/2G
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_TRUE;
+            break;
+        }
+        case 319: /* Monaco Telecom France/Epic Cyprus */
+        {
+            switch (atoi(sim_mcc)){
+                case 212:  //Monaco Telecom 
+                    cfg->ipol_ans_cfg.ipol_ims_voice_cap_pref_enable                = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_23g_wifi_rat_reselect_by_dreg_enable = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable          = KAL_TRUE;
+                    cfg->ipol_ans_cfg.icap_cfg.sms_network_types                    = 0x00;
+                    break;
+                case 280:  //Epic Cyprus
+                    cfg->ipol_ans_cfg.ipol_ims_voice_cap_pref_enable                = KAL_TRUE;
+                    cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable               = KAL_FALSE;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 320: /* Coriolis/France */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat        = 0x40 | 0x7; // NR LTE/3G/2G
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable   = KAL_FALSE;
+            cfg->ipol_ans_cfg.icap_cfg.sms_network_types        = 0x00;
+            break;
+        }
+        case 323: /* Lycamobile Italy */
+        {
+            cfg->ipol_ans_cfg.icap_cfg.sms_network_types        = 0x00;
+            break;
+        }
+        case 324: /* Moldcell/Moldova */
+        {
+            cfg->ipol_ans_cfg.icap_cfg.sms_network_types        = 0x00;
+            break;
+        }
+        case 327: /* SaskTel */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+            break;
+        }
+        case 329: /* Plintron Italy */
+        {
+            cfg->ipol_ans_cfg.icap_cfg.sms_network_types        = 0x00;
+            break;
+        }
+        case 332: /* SoLinc/US */
+        {
+            // Initial package
+            cfg->ipol_ans_cfg.ipol_ims_23g_wifi_rat_reselect_by_dreg_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable          = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_incall_voice_cap_pref                = KAL_TRUE;
+            // SL-WFC-16
+            cfg->ecc_ans_cfg.ipol_ecc_ho_enable = KAL_TRUE;
+            // SL-WFC-30
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th   = -95;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rssnr_poor_th   = -20;
+            // SL-WFC-31
+            cfg->ipol_ans_cfg.ipol_ims_roaming_incall_ho_enable = KAL_FALSE;
+			cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 333: /* Cellcom */
+        {
+            //  Cellcom v3.0 20.3
+            cfg->ipol_ans_cfg.qos_cfg.qos_rtp_cfg.ipol_wlan_rtcp_jitter_delay_th   = 370; //ms
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -74;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -85;
+            cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -74;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_poor_th         = -116;
+            cfg->ipol_ans_cfg.sig_cfg.md_sig_thr_cfg.ipol_lte_rsrp_fair_th         = -109;
+            // Cellcom v3.0 22.6.2
+            cfg->ecc_ans_cfg.ipol_ecc_ho_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_ecc_over_ims_ho_lte_to_wifi_enable = KAL_FALSE;
+            // Cellcom v3.0 6.3.3
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable             = KAL_FALSE;
+            break;
+        }
+        case 335: /* TOT Thailand */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 336: /* Mobifone Vietnam  */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_TRUE;
+            break;
+        }
+        case 338: /* Spusu Austria */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.icap_cfg.sms_network_types        = 0x00;
+            break;
+        }
+        case 345: /* PrimeTel/Cyprus */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+		case 347: /* Airtel/Kenya */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th    = -65;
+			cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th      = -65;
+            break;
+        }
+        case 349: /* MTS/Armenia */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 350: /* Gibtelecom/Gibraltar */
+        {
+            cfg->ipol_ans_cfg.icap_cfg.sms_network_types        = 0x00;
+            break;
+        }
+		case 353: /* Israel/We4G  */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable                 = KAL_TRUE;
+			cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_fair_th = -72;
+			cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_fair_th   = -72;
+			cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_rove_poor_th = -79;
+			cfg->ipol_ans_cfg.sig_cfg.wlan_sig_thr_cfg.ipol_wlan_rssi_ho_poor_th   = -79;
+            break;
+        }
+		case 356: /* South Africa/Rain  */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable   = KAL_TRUE;
+            break;
+        }
+		case 359: /* Aliv/Bahamas  */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable   = KAL_FALSE;
+            break;
+        }
+        case 360: /* CTExcel/Hongkong  */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 363: /* C Spire */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+		case 364: /* United Wireless */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+        case 365: /* IIIinois Valley Cellular */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+		case 366: /* Appalachian Wireless/United States */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable              = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_wlan_roaming_barring_enable         = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_incall_voice_cap_pref               = KAL_TRUE;
+			break;
+        }
+        case 367: /* James Valley Wireless */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+		case 368: /* Pioneer Cellular */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+		case 369: /* Pine Belt Wireless */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+        case 370: /* STRATA */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+        case 371: /* Silver Star */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+		case 372: /* OneComm */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+		case 373: /* Cordova Wireless */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+        case 374: /* Copper Valley Wireless */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+		case 375: /* Blue Wireless and CellOne */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+        case 376: /* Inland Cellular */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+		case 378: /* Geoverse */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+        case 387: /* West Central Wireless */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+		case 392: /* MobileNation */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+		case 396: /* Thumb Cellular */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_FALSE;
+			break;
+        }
+        case 1001: /* Ericsson IMS IWLAN */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat        = 0x40 | 0x7; // NR/LTE/3G/2G
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_FALSE;
+            cfg->ecc_ans_cfg.ipol_ecc_ho_enable = KAL_TRUE;
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_FALSE;
+            break;
+        }
+        case 1002: /* Nokia Finland */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat        = 0x40 | 0x7; // NR/LTE/3G/2G
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_nr_incall_ho_enable = KAL_TRUE;
+            break;
+        }
+        case 1003: /* HQLAB_ERICSSON */
+        {
+            break;
+        }
+        case 1004: /* Huawei IMS */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable          = KAL_FALSE;
+            break;
+        }
+        case 16387: /* PCT */
+        {
+            cfg->ipol_ans_cfg.ipol_ims_md_supporting_rat = 0x40 | 0x7;
+            cfg->ipol_ans_cfg.ipol_ims_23G_setup_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_vops_barring_hplmn_enable = 0x01;
+            cfg->ipol_ans_cfg.ipol_ims_no_voice_sup_sms_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.loc_cfg.ipol_ims_wlan_no_location_barring_enable = KAL_FALSE;
+            cfg->ipol_ans_cfg.ipol_ims_cs_pref_enable         = KAL_FALSE;
+            break;
+        }
+        default:
+        {
+            break;
+        }
+		/* LCOV_EXCL_STOP */
+    }
+
+    iwlan_post_operator_config(op_id, cfg, cust_init_factor);
+
+    //Operator OTA
+    ota_sbp_tag.sbp_id = op_id;
+    memcpy(&(ota_sbp_tag.mcc), sim_mcc, MAX_MCC_STR_LEN);
+    memcpy(&(ota_sbp_tag.mnc), sim_mnc, MAX_MNC_STR_LEN);
+    cust_init_factor->op_ota_result= mcf_read_tlvota_buffer_sbp_tag(ps_id, ota_sbp_tag, NVRAM_EF_IWLAN_PROFILE_LID, (kal_uint8*)cfg, sizeof(iwlan_cust_cfg_t));
+
+#ifdef __IWLAN_FUNCTION_DISABLE__
+    memset((void*)&(cfg->ipol_ans_cfg.sig_cfg), UNDEF_CONFIG_8, sizeof(cfg->ipol_ans_cfg.sig_cfg));
+    memset((void*)&(cfg->ipol_ans_cfg.qos_cfg), UNDEF_CONFIG_8, sizeof(cfg->ipol_ans_cfg.qos_cfg));
+    memset((void*)&(cfg->ipol_ans_cfg.loc_cfg), UNDEF_CONFIG_8, sizeof(cfg->ipol_ans_cfg.loc_cfg));
+    memset((void*)&(cfg->ipol_ans_cfg.ipol_wifi_call_roveout_alert_enable), UNDEF_CONFIG_8, sizeof(cfg->ipol_ans_cfg.ipol_wifi_call_roveout_alert_enable));
+#endif
+
+    cust_init_factor->nvram_reault = iwlan_cfg_set_to_nvram_value(cfg, ps_id);
+}
+
+void iwlan_post_default_config(iwlan_cust_cfg_t *cfg) {
+#ifdef __DISABLE_QUERY_LOCATION__
+    cfg->ipol_ans_cfg.loc_cfg.ipol_location_enable  = KAL_FALSE;
+#endif
+}
+
+void iwlan_post_operator_config(kal_uint32 op_id, iwlan_cust_cfg_t *cfg, cust_init_factor_t *cust_init_factor) {
+    switch (op_id) {
+        case 12: /* VzW*/
+            if (cust_init_factor->centric_type == DATA_CENTRIC) {
+                cfg->ipol_ans_cfg.ipol_ims_roaming_barring_enable = KAL_TRUE;
+            }
+            break;
+
+        case 18: /* RJIL */
+#ifdef __IWLAN_CUST_DIS_RJIO_VOWIFI116__
+            cfg->ipol_ans_cfg.ipol_special_cust = KAL_TRUE; //disable VoWiFi-TR 11.6
+#endif
+            break;
+
+        default:
+            break;
+    }
+}
+
+kal_bool mcf_custom_dump_iwlan_data(mcf_custom_dump_param_struct *param_ptr) {
+    iwlan_cust_cfg_t  *cfg;
+    cust_init_factor_t rst;
+    kal_bool ret = KAL_FALSE;
+    sim_interface_enum sim_slot_id;
+    protocol_id_enum   ps_id;
+    kal_char null_mcc[4] = {0};
+    kal_char null_mnc[4] = {0};
+
+    cfg = (iwlan_cust_cfg_t *)get_ctrl_buffer(sizeof(iwlan_cust_cfg_t));
+
+    if (cfg == NULL) {
+        // IWLAN_DBG(" MCF dump get_ctrl_buffer fail");
+        return ret;
+    }
+    else {
+        memset(cfg, 0, sizeof(iwlan_cust_cfg_t));
+    }
+
+    if (param_ptr->lid == NVRAM_EF_IWLAN_PROFILE_LID) {
+        switch (param_ptr->type) {
+            case MCF_TYPE_OTA:
+                // Use record_idx, sim_id = record_idx - 1
+                sim_slot_id = (sim_interface_enum)(param_ptr->record_idx - 1);
+                ps_id = iwlan_get_psid_from_simid(sim_slot_id);
+
+                if (ps_id < MAX_SIM_NUM) {
+                    iwlan_cust_init(0, ps_id, null_mcc, null_mnc, &rst, cfg);
+                    ret = KAL_TRUE;
+                }
+                else {
+                    ret = KAL_FALSE;
+                }
+                break;
+            case MCF_TYPE_OTA_BY_OP:
+                iwlan_cust_init(param_ptr->sbp_id, param_ptr->ps_id, (kal_char*)param_ptr->mcc, (kal_char*)param_ptr->mnc, &rst, cfg);
+                ret = KAL_TRUE;
+                break;
+            default:
+                break;
+        }
+    }
+    *(param_ptr->size) = sizeof(iwlan_cust_cfg_t);
+    memcpy(param_ptr->buffer, cfg, sizeof(iwlan_cust_cfg_t));
+
+    // free memory buffer after memcpy( )
+    free_ctrl_buffer(cfg);
+    cfg = NULL;
+
+    return ret;
+}
+
+
+
diff --git a/mcu/custom/protocol/common/ps/custom_iwlan_config.h b/mcu/custom/protocol/common/ps/custom_iwlan_config.h
new file mode 100644
index 0000000..fd37668
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_iwlan_config.h
@@ -0,0 +1,122 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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).
+*
+*****************************************************************************/
+
+
+#include "kal_public_api.h"
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "ps_public_enum.h"
+#include "l4_ps_api.h"
+#include "sim_ps_api.h"
+
+#include "nvram_editor_data_item.h"
+#include "iwlan_nvram_editor.h"
+#include "nvram_interface.h"
+#include "iwlan_nvram_def.h" 
+#include "mcf_if.h"
+
+
+
+
+#ifndef __CUSTOM_IWLAN_CONFIG_H__
+#define __CUSTOM_IWLAN_CONFIG_H__
+
+typedef enum {
+    IPOL_CFG_APN_TYPE_DEFAULT = 0,
+    IPOL_CFG_APN_TYPE_IMS = 1,
+    IPOL_CFG_APN_TYPE_MMS = 2,
+    IPOL_CFG_APN_TYPE_EMERGENCY = 3,
+    IPOL_CFG_APN_TYPE_XCAP = 4,
+    IPOL_CFG_APN_TYPE_RCS = 5,
+    IPOL_CFG_APN_TYPE_BIP = 6,
+    IPOL_CFG_APN_TYPE_SUPL = 7,
+    IPOL_CFG_APN_TYPE_VSIM = 8,
+    IPOL_CFG_APN_TYPE_SUPPORT_MAX = 32
+} ipol_ans_cfg_apn_type_bit_e;
+
+typedef enum {
+    IPOL_CFG_THROTTLING_ENABLE = 0,
+    IPOL_CFG_THROTTLING_IDLE = 1,
+    IPOL_CFG_THROTTLING_INCALL = 2,
+    IPOL_CFG_THROTTLING_SUPPORT_MAX = 8
+} ipol_ans_cfg_throttling_bit_e;
+
+
+typedef enum {
+    IPOL_CFG_PS_SUPPORT_LTE = 0,
+    IPOL_CFG_PS_SUPPORT_UMTS = 1,
+    IPOL_CFG_PS_SUPPORT_GSM = 2,
+    IPOL_CFG_PS_SUPPORT_1X = 3,
+    IPOL_CFG_PS_SUPPORT_HRPD = 4,
+    IPOL_CFG_PS_SUPPORT_EHRPD = 5,
+    IPOL_CFG_PS_SUPPORT_NR = 6,
+
+    IPOL_CFG_PS_SUPPORT_max = 32
+} ipol_ans_cfg_ps_support_bit_e;
+
+typedef enum {
+    IPOL_CFG_ENABLE_RAT_LTE = 0,
+    IPOL_CFG_ENABLE_RAT_NR = 1,
+
+    IPOL_CFG_ENABLE_RAT_max = 8
+} ipol_ans_cfg_enable_rat_bit_e;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint32 sbp_id;
+} iwlan_dsbp_reconfigure_ind_struct;
+
+#define BITMASK(X) (1UL << (X))
+
+typedef ue_usage_setting_enum masf_centric_type_e;
+
+typedef struct {
+    mcf_ota_result_e default_ota_result;
+    mcf_ota_result_e op_ota_result;
+    kal_bool nvram_reault;
+    masf_centric_type_e    centric_type;
+} cust_init_factor_t;
+
+typedef enum {
+    IWLAN_L4C_TIMER_LEGACY = 0, // timer is handle in a previous way as legacy
+    IWLAN_L4C_TIMER_STRICT = 1, // timer is handle in a strict way
+} iwlan_l4c_sig_meas_timer_level;
+
+void iwlan_cust_init(kal_uint32 op_id, protocol_id_enum ps_id, kal_char *sim_mcc, kal_char *sim_mnc, cust_init_factor_t *cust_init_factor, iwlan_cust_cfg_t *cfg);
+void iwlan_post_default_config(iwlan_cust_cfg_t *cfg);
+void iwlan_post_operator_config(kal_uint32 op_id, iwlan_cust_cfg_t *cfg, cust_init_factor_t *cust_init_factor);
+
+#endif // __CUSTOM_IWLAN_CONFIG_H__
+
diff --git a/mcu/custom/protocol/common/ps/custom_l4_utility.c b/mcu/custom/protocol/common/ps/custom_l4_utility.c
new file mode 100644
index 0000000..7d664a5
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_l4_utility.c
@@ -0,0 +1,5024 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ * Filename:
+ * ---------
+ * custom_l4_utility.c
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *   This file is used for L4C customization
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ ****************************************************************************/
+#if !defined(L4_NOT_PRESENT)
+
+#if defined(__ATCMD_ONOFF_CHECK__)
+#include "rmmi_parser.h"
+#endif
+#include "kal_general_types.h"
+//#include "stack_config.h"
+#include "kal_public_api.h"
+#include "gmss_public.h"
+
+#if defined(__MTK_TARGET__)
+#if !defined (L1_NOT_PRESENT)
+#include "l1d_interface_pcore.h"
+#endif
+#endif
+
+#if defined (__MTK_UL1_FDD__)
+#if !defined (UL1_NOT_PRESENT)
+#include "ul1d_rf_public.h" //for UL1D_UeCaBandCapability
+#endif
+#endif
+#ifdef __MTK_TARGET__
+#ifdef __LTE_RAT__
+#ifndef __EL1D_COSIM__
+#include "mrs_eas_capability.h"
+#endif
+#endif
+#endif
+
+#ifdef __MTK_TARGET__
+#ifdef __NR_RAT__
+#include "mrs_nras_capability.h"        
+#endif
+#endif
+
+#include "csmcc_enums.h"
+#include "l4_ps_api.h"
+#if (!defined(__FLAVOR_BASIC__)) && (!defined(__FLAVOR_BASIC_TL1D__))
+# include "mcd_l3_inc_struct.h"
+#endif
+#include "l4c_as_inter_core_struct.h"
+
+#ifdef __ARFCN_TO_CAMERA_SUPPORT__
+#include "l4c_nw_cmd.h"
+#endif
+
+#define CM_DTMF_P_W_SWITCH_FLAG  KAL_FALSE
+//define codec num
+#define SUPPORTED_2G_CODEC_NUM 6 
+#define CUSTOM_ACM_BOUND      (1000)
+#define	CSM_RLC_TIMER_CONFIG  (3)
+
+#ifdef __FWP_NC_LAI_INFO__
+#define CELL_LOCK_PREFIX_LEN 4
+kal_uint8 CELL_LOCK_PREFIX[CELL_LOCK_PREFIX_LEN] = {0x0d, 0x00, 0x00, 0x01};
+#endif /*__FWP_NC_LAI_INFO__*/
+
+#ifdef __CHR_AB_INFO__
+#define CUSTOM_EPSNLTE_URC_IND_TIMER    (15)    // default 15 minutes
+#endif /* __CHR_AB_INFO__ */
+
+/* MAUI_01637672 support CCWE */
+#define CUSTOM_ACM_CALL_METER_WARNING_EVENT_SECONDS      (30)
+
+/* Guard timer for DSBP display loss optimization */
+#define CUSTOM_DSBP_GUARD_TIMER    5
+
+//mtk00924 20051026:  +EIMG and +EMDY download to MS default folder name customization
+//at most 25 characters in UCS2 format for folder name, and 0x005C and 0x0000 should be given at the end
+kal_wchar CUSTOM_AT_AUDIO_DOWNLOAD_FOLDER_NAME[] = {0x0041, 0x0075, 0x0064, 0x0069, 0x006F, 0x005C, 0x0000};  /* default folder = Audio */
+kal_wchar CUSTOM_AT_IMAGE_DOWNLOAD_FOLDER_NAME[] = {0x0049, 0x006D, 0x0061, 0x0067, 0x0065, 0x0073, 0x005C, 0x0000};  /* default folder = Images */
+
+kal_uint8 custom_smsal_wea_test_data1[] ={
+			0x10, 0x0C, 0x23,
+			0x20, 0x78,
+			0xAE, 0xD0, 0x1C, 0xB2,
+			0xE7, 0xAA, 0xEC, 0xAA,
+			0x8B, 0x2E, 0xEE, 0xAE,
+			0xC5, 0x30, 0xB2, 0xE0,
+			0x5A, 0xEC, 0xAA, 0x8B,
+			0x2D, 0x1C, 0xAE, 0xD9,
+			0x38, 0xB2, 0xE0, 0x50,
+			0x30, 0x28,
+			0xAE, 0xD0, 0x1C, 0xB2,
+			0xE7, 0xA0, 0x00, 0x90 
+};
+
+kal_uint8 custom_smsal_wea_test_data2[] ={
+		  	0x10, 0x0C, 0xFF,
+		  	0x30, 0x28, 0xAE, 0xC3,
+		  	0x3C, 0xB2, 0x88, 0x70,
+		  	0x00, 0x40,
+		  	0x20, 0x78, 0xAE, 0xC8,
+		  	0xB0, 0xB2, 0x8F, 0xBA,
+		  	0xEC, 0x33, 0xCB, 0x29,
+		  	0x70, 0xAE, 0xBD, 0xC4,
+		  	0xB2, 0x88, 0x7A, 0xEC,
+		  	0x33, 0xCB, 0x27, 0x9E,
+		  	0xAE, 0xD1, 0xCC, 0xB2,
+		  	0x88, 0x70
+};
+
+
+kal_uint8 custom_cb_message1[] = {
+	0x01,	0x47,	0xF6,	0x5B,	0x1C,	0x66,	0x83,	0xA0,	0xD7,	0x69,	
+	0x84,	0x36,	0xBB,	0xC5,	0x1A,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x0E 
+
+};
+
+kal_uint8 custom_cb_message2[] = {
+	0x01,	0x47,	0xF6,	0x5B,	0x1C,	0x66,	0x83,	0xA0,	0xD7,	0x69,	
+	0x84,	0x36,	0xBB,	0xC5,	0x1A,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x0E 
+
+};
+
+kal_uint8 custom_test_wham_message[] ={
+	0x01,   0x11,	0x40,	0x11,	0x18,	0x40,	0x11,	0x11,	0x20,	0x40,	
+	0x12,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,	
+	0x00,	0x00,	0x00,	0x0A
+};
+
+
+#include "ps_public_enum.h"
+#include "ps_public_struct.h"
+#include "ps_em_enum.h"
+
+#if (defined(__GEMINI__) || defined(__TC10__)) && defined(__SIM_ME_LOCK__)
+#include "custom_nvram_extra.h"
+#include "smu_common_enums.h" //link_SML
+#endif
+
+#include "custom_l4_utility.h"
+#include "l4c_utility.h"
+
+#if (!defined(__FLAVOR_BASIC__)) && (!defined(__FLAVOR_BASIC_TL1D__))
+# include "l4crac_func.h"
+#endif
+
+#include "md_sap.h"
+#include "kal_trace.h"  // for tst_sys_trace
+#include "sim_exported_enum.h"
+
+/* *********** NOTE  ************************************************** 
+ * IMPORTANT READ IT BEFORE UPDATING MTK_RSA_ESCAPE_SIGNATURE_OEM      *
+ * Do not remove the macro MTK_RSA_ESCAPE_SIGNATURE_OEMfrom this file. *
+ * Add the signature pattern withing the double quotes " "             */
+#define MTK_RSA_ESCAPE_SIGNATURE_OEM ""
+
+#define CUSTOM_L4C_LTE_ONLY_LTE_NW_TIMER 360 // in seconds the default timer value is 6 mins
+ 
+/*ALPS04938172:The wait for MT paging in LTE RAT timer value (in seconds)*/
+#define	CSM_WAIT_ON_LTE_PAGING_TIMER_CONFIG  (2)
+                                     
+extern kal_bool nvram_custom_config_ims_profile(sbp_reconfig_custom_param_struct *param_ptr);
+extern kal_bool nvram_custom_config_ltecsr_profile(sbp_reconfig_custom_param_struct *param_ptr);
+extern kal_bool nvram_custom_config_sdm_ads_profile(sbp_reconfig_custom_param_struct *param_ptr);
+extern kal_bool nvram_custom_config_vdm_ads_profile(sbp_reconfig_custom_param_struct *param_ptr);
+extern kal_bool nvram_custom_config_iwlan_profile(sbp_reconfig_custom_param_struct *param_ptr);
+extern module_type l4c_current_mod_id;
+extern sim_interface_enum l4c_gemini_get_switched_sim_id(sim_interface_enum simId);
+extern sim_interface_enum l4c_gemini_get_actual_sim_id(sim_interface_enum psId);
+extern kal_bool l4c_check_cur_protocol_cap_with_gmss_mode(l4c_modem_capability_enum capability);
+
+/*input CC_DISCONNECT cause:*/
+kal_uint16 CUSTOM_DISC_ERROR_CAUSE[] = {CM_NO_CIRCUIT_CHANNEL_AVAIL,     //34
+                                        CM_RESOURCE_UNAVAIL_UNSPECIFIED};//47
+
+/*****************************************************************************
+	If customer want to use other character instead of '?' as wild character 
+	Please re-define this CUSTOM_WILD_CHAR 
+	[Note!!] Wild character definition should be unique and sync with MMI display
+	[Note!!] This is used only apply to L4 protocol. 
+	         Customer still need to revise the definition in MMI and Phonebook 
+*****************************************************************************/
+#define CUSTOM_WILD_CHAR '?'
+
+/*****************************************************************************
+	If customer want to use other character instead of 'w' as auto dtmf modifier 
+	Please re-define this CUSTOM_AUTO_DTMF_MODIFIER 
+	[Note 1] Please always use lowercase character e.g. use 't' instead of 'T'
+	[Note 2] Auto DTMF modifier definition should be unique and sync with MMI display
+	[Note 3] This is used only apply to L4 protocol. 
+	         Customer still need to revise the definition in MMI and Phonebook 
+*****************************************************************************/
+#define CUSTOM_AUTO_DTMF_MODIFIER 'w' 
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_wild_char()
+* DESCRIPTION
+*   	This function is used to return wild character definition
+*	
+* PARAMETERS
+*	none
+* RETURNS
+*	wild character definition
+*****************************************************************************/
+kal_uint8 custom_wild_char(void)
+{
+	return CUSTOM_WILD_CHAR;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_auto_dtmf_modifer()
+* DESCRIPTION
+*   	This function is used to return auto DTMF modifier definition
+*	
+* PARAMETERS
+*	none
+* RETURNS
+*	auto dtmf modifier definition
+*****************************************************************************/
+kal_uint8 custom_auto_dtmf_modifier(void)
+{
+	return CUSTOM_AUTO_DTMF_MODIFIER;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_ext_modem_mod_id()
+* DESCRIPTION
+*   	This function is used to return external modem module id
+*	
+* PARAMETERS
+*	none
+* RETURNS
+*	External modem module id
+*****************************************************************************/
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_short_string_as_call()
+* DESCRIPTION
+*   	This function is used to define specific short string (1 or 2 digit dial string)
+*		  that should be treat as call instead of USSD. 
+*	    In spec 22.030 Figure 3.5.3.2 it define short string except 2 digit starting 
+*     with a '1' shall treat as USSD. However,there might be some special operator requirement 
+*	    ex: "86" is a operator service call number
+* PARAMETERS
+*	kal_uint8 c1
+*	kal_uint8 c2  
+*	kal_uint8 length
+* RETURNS
+*	KAL_TRUE or KAL_FALSE
+* KAL_TRUE is to treat this short string as call
+*****************************************************************************/
+kal_bool custom_short_string_as_call(kal_uint8 c1, kal_uint8 c2, kal_uint8 length)
+{
+	kal_bool ret_val = KAL_FALSE;
+
+	//Implement specific short string parsing rule here
+	#if 0 // Example case :treat "86" as call
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+	#endif
+
+	return ret_val;
+}
+
+
+#define custom_is_digit(c) ((c >= '0') && (c <= '9'))
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_idle_string_as_call()
+* DESCRIPTION
+*   This function is used to define specific string input in idle screen 
+*   that should be treat as call instead of USSD.
+*   This check is prior to the spec 22.030 Figure 3.5.3.2 
+*
+* PARAMETERS
+*	kal_uint8 *str  
+*	kal_uint8 length
+* RETURNS
+*	KAL_TRUE or KAL_FALSE
+* KAL_TRUE is to treat this string as call
+*****************************************************************************/
+kal_bool custom_idle_string_as_call(kal_uint8 *str, kal_uint8 length)
+{
+    kal_bool ret_val = KAL_FALSE;
+
+    //Implement specific string parsing rule here
+    if (((length == 1) && (str[0] == '0'))                          // "0 SEND"
+        || ((length == 2) && ((kal_mem_cmp(str,"00",length) == 0)   // "00 SEND"
+                           || (kal_mem_cmp(str,"*8",length) == 0)   // "*8 SEND"
+                           || (kal_mem_cmp(str,"*0",length) == 0)   // "*0 SEND"
+                           || (kal_mem_cmp(str,"#0",length) == 0))) // "#0 SEND"
+        || ((length == 3) && ((kal_mem_cmp(str,"411",length) == 0)  // "411 SEND"
+                           || (kal_mem_cmp(str,"*08",length) == 0)  // "*08 SEND"
+                           || ((str[0] == '#') 
+                            && (str[1] == '#') 
+                            && custom_is_digit(str[2]))))           // "##<1 digit> SEND"
+        || ((length == 4) && ((str[0] == '*') || (str[0] == '#'))
+                          && custom_is_digit(str[1]) 
+                          && custom_is_digit(str[2]) 
+                          && custom_is_digit(str[3]))               // "*<3 digits> SEND" or "#<3 digits> SEND"
+        || ((length == 5) && (str[0] == '*') 
+                          && custom_is_digit(str[1]) 
+                          && custom_is_digit(str[2]) 
+                          && custom_is_digit(str[3]) 
+                          && custom_is_digit(str[4]))               // "*<4 digits> SEND"
+        || ((length == 5) && (str[0] == '#') 
+                          && custom_is_digit(str[1]) 
+                          && custom_is_digit(str[2]) 
+                          && custom_is_digit(str[3]) 
+                          && custom_is_digit(str[4])
+                          && custom_is_digit(str[5]))               // "#<5 digits> SEND"
+        || ((length == 9) && (str[0] == '*') && (str[1] == '*')
+                          && custom_is_digit(str[2])
+                          && custom_is_digit(str[3])
+                          && custom_is_digit(str[4])
+                          && custom_is_digit(str[5])
+                          && custom_is_digit(str[6])
+                          && custom_is_digit(str[7])
+                          && custom_is_digit(str[8]))               // "**<7 digits> SEND"
+       )
+    {
+        ret_val = KAL_TRUE;
+    }
+    else
+    {
+        ret_val = KAL_FALSE;
+    }
+
+    return ret_val;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*    is_idea_vodafone_in_India_same_circle()
+* DESCRIPTION
+*    the rule is implemented from the mail attachment in ALPS04269333
+*
+* PARAMETERS
+*   kal_uint8* plmn
+*   kal_uint8* mcc_mnc
+* RETURNS
+*   KAL_TRUE or KAL_FALSE
+* KAL_TRUE is to consider these plmns in the same circle
+*****************************************************************************/
+static kal_bool is_idea_vodafone_in_India_same_circle(kal_uint8* plmn, kal_uint8* mcc_mnc)
+{
+    kal_bool is_same_circle = KAL_FALSE;
+
+    // Andhra Prasesh and Telangana
+    if ((kal_mem_cmp(mcc_mnc,"40407",5) == 0) || (kal_mem_cmp(mcc_mnc,"40413",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"40407",5) == 0) || (kal_mem_cmp(plmn,"40413",5) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Assam
+    if ((kal_mem_cmp(mcc_mnc,"405845",6) == 0) || (kal_mem_cmp(mcc_mnc,"405751",6) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"405845",6) == 0) || (kal_mem_cmp(plmn,"405751",6) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Bihar & Jharkhand
+    if ((kal_mem_cmp(mcc_mnc,"40570",5) == 0) || (kal_mem_cmp(mcc_mnc,"405752",6) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"40570",5) == 0) || (kal_mem_cmp(plmn,"405752",6) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Chennai
+    if ((kal_mem_cmp(mcc_mnc,"405852",6) == 0) || (kal_mem_cmp(mcc_mnc,"40484",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"405852",6) == 0) || (kal_mem_cmp(plmn,"40484",5) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Delhi
+    if ((kal_mem_cmp(mcc_mnc,"40404",5) == 0) || (kal_mem_cmp(mcc_mnc,"40411",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"40404",5) == 0) || (kal_mem_cmp(plmn,"40411",5) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Gujarat
+    if ((kal_mem_cmp(mcc_mnc,"40424",5) == 0) || (kal_mem_cmp(mcc_mnc,"40405",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"40424",5) == 0) || (kal_mem_cmp(plmn,"40405",5) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Haryana
+    if ((kal_mem_cmp(mcc_mnc,"40412",5) == 0) || (kal_mem_cmp(mcc_mnc,"40401",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"40412",5) == 0) || (kal_mem_cmp(plmn,"40401",5) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Himachal Pradesh
+    if ((kal_mem_cmp(mcc_mnc,"40482",5) == 0) || (kal_mem_cmp(mcc_mnc,"405754",6) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"40482",5) == 0) || (kal_mem_cmp(plmn,"405754",6) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Jammu & Kashmir
+    if ((kal_mem_cmp(mcc_mnc,"405846",6) == 0) || (kal_mem_cmp(mcc_mnc,"405750",6) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"405846",6) == 0) || (kal_mem_cmp(plmn,"405750",6) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Karnataka
+    if ((kal_mem_cmp(mcc_mnc,"40444",5) == 0) || (kal_mem_cmp(mcc_mnc,"40486",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"40444",5) == 0) || (kal_mem_cmp(plmn,"40486",5) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Kerala
+    if ((kal_mem_cmp(mcc_mnc,"40419",5) == 0) || (kal_mem_cmp(mcc_mnc,"40446",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"40419",5) == 0) || (kal_mem_cmp(plmn,"40446",5) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Kolkata
+    if ((kal_mem_cmp(mcc_mnc,"405848",6) == 0) || (kal_mem_cmp(mcc_mnc,"40430",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"405848",6) == 0) || (kal_mem_cmp(plmn,"40430",5) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Madhya Pradesh & Chattishgarh
+    if ((kal_mem_cmp(mcc_mnc,"40478",5) == 0) || (kal_mem_cmp(mcc_mnc,"405756",6) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"40478",5) == 0) || (kal_mem_cmp(plmn,"405756",6) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Maharashtra
+    if ((kal_mem_cmp(mcc_mnc,"40422",5) == 0) || (kal_mem_cmp(mcc_mnc,"40427",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"40422",5) == 0) || (kal_mem_cmp(plmn,"40427",5) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Mumbai
+    if ((kal_mem_cmp(mcc_mnc,"405799",6) == 0) || (kal_mem_cmp(mcc_mnc,"40420",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"405799",6) == 0) || (kal_mem_cmp(plmn,"40420",5) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // North East
+    if ((kal_mem_cmp(mcc_mnc,"405849",6) == 0) || (kal_mem_cmp(mcc_mnc,"405755",6) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"405849",6) == 0) || (kal_mem_cmp(plmn,"405755",6) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Orissa
+    if ((kal_mem_cmp(mcc_mnc,"405850",6) == 0) || (kal_mem_cmp(mcc_mnc,"405753",6) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"405850",6) == 0) || (kal_mem_cmp(plmn,"405753",6) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Punjab
+    if ((kal_mem_cmp(mcc_mnc,"40414",5) == 0) || (kal_mem_cmp(mcc_mnc,"40488",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"40414",5) == 0) || (kal_mem_cmp(plmn,"40488",5) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Rajasthan
+    if ((kal_mem_cmp(mcc_mnc,"40487",5) == 0) || (kal_mem_cmp(mcc_mnc,"40460",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"40487",5) == 0) || (kal_mem_cmp(plmn,"40460",5) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Tamil Nadu
+    if ((kal_mem_cmp(mcc_mnc,"405852",6) == 0) || (kal_mem_cmp(mcc_mnc,"40443",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"405852",6) == 0) || (kal_mem_cmp(plmn,"40443",5) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Uttar Pradesh (East)
+    if ((kal_mem_cmp(mcc_mnc,"40489",5) == 0) || (kal_mem_cmp(mcc_mnc,"40415",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"40489",5) == 0) || (kal_mem_cmp(plmn,"40415",5) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // Uttar Pradesh (West) and Uttarakhand
+    if ((kal_mem_cmp(mcc_mnc,"40456",5) == 0) || (kal_mem_cmp(mcc_mnc,"40566",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"40456",5) == 0) || (kal_mem_cmp(plmn,"40566",5) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+    // West Bengal & Andaman and Nicobar ls.
+    if ((kal_mem_cmp(mcc_mnc,"405853",6) == 0) || (kal_mem_cmp(mcc_mnc,"40567",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"405853",6) == 0) || (kal_mem_cmp(plmn,"40567",5) == 0))
+        {
+            is_same_circle = KAL_TRUE;
+        }
+    }
+
+
+    return is_same_circle;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_is_home_plmn()
+* DESCRIPTION
+*	For AT+CREG and AT+CGREG network registeration report (defined in spec 27.007)
+*	+CREG : 1 (registered, home network)
+*	+CREG : 5 (registered, roaming)
+*	The basic rule for home plmn is to check if the PLMN id equal to mcc+mnc in IMSI
+*     However, there might be operators having more than one PLMN id
+*     For such case, you can define them in this function
+*
+* PARAMETERS
+*	kal_uint8* plmn
+*	kal_uint8* mcc_mnc
+*     kal_bool is_on_hplmn, for R7 EHPLMN
+* RETURNS
+*	KAL_TRUE or KAL_FALSE
+* KAL_TRUE is to treat this plmn as a home PLMN
+*****************************************************************************/
+kal_bool custom_is_home_plmn(kal_uint8* plmn, kal_uint8* mcc_mnc, kal_bool is_on_hplmn)
+{
+    kal_bool custom_is_on_hplmn = KAL_FALSE;
+
+    //if SIM card MCC+MNC is 46000/46002/46007 , current PLMN is 46000/46002/46007.  Treate as home PLMN. not roaming PLMN
+    if ((kal_mem_cmp(mcc_mnc,"46000",5) == 0) || (kal_mem_cmp(mcc_mnc,"46002",5) == 0) || (kal_mem_cmp(mcc_mnc,"46007",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"46000",5) == 0) || (kal_mem_cmp(plmn,"46002",5) == 0) || (kal_mem_cmp(plmn,"46007",5) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+
+#ifdef __TC10__
+	// BR: TIM
+	else if ((kal_mem_cmp(mcc_mnc,"72402",5) == 0) || (kal_mem_cmp(mcc_mnc,"72403",5) == 0) || (kal_mem_cmp(mcc_mnc,"72404",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"72402",5) == 0) || (kal_mem_cmp(plmn,"72403",5) == 0) || (kal_mem_cmp(plmn,"72404",5) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// BR: Vivo S.A.
+	else if ((kal_mem_cmp(mcc_mnc,"72406",5) == 0) || (kal_mem_cmp(mcc_mnc,"72410",5) == 0) || (kal_mem_cmp(mcc_mnc,"72411",5) == 0) || (kal_mem_cmp(mcc_mnc,"72423",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"72406",5) == 0) || (kal_mem_cmp(plmn,"72410",5) == 0) || (kal_mem_cmp(plmn,"72411",5) == 0) || (kal_mem_cmp(plmn,"72423",5) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// BR: acquired by Oi
+	else if ((kal_mem_cmp(mcc_mnc,"72416",5) == 0) || (kal_mem_cmp(mcc_mnc,"72424",5) == 0) || (kal_mem_cmp(mcc_mnc,"72431",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"72416",5) == 0) || (kal_mem_cmp(plmn,"72424",5) == 0) || (kal_mem_cmp(plmn,"72431",5) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// BR: CTBC Celular S.A.
+	else if ((kal_mem_cmp(mcc_mnc,"72432",5) == 0) || (kal_mem_cmp(mcc_mnc,"72433",5) == 0) || (kal_mem_cmp(mcc_mnc,"72434",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"72432",5) == 0) || (kal_mem_cmp(plmn,"72433",5) == 0) || (kal_mem_cmp(plmn,"72434",5) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// CL: Entel Telefonia Movil S.A.
+	else if ((kal_mem_cmp(mcc_mnc,"73001",5) == 0) || (kal_mem_cmp(mcc_mnc,"73010",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"73001",5) == 0) || (kal_mem_cmp(plmn,"73010",5) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// CL: Telefonica Movil de Chile
+	else if (kal_mem_cmp(mcc_mnc,"73007",5) == 0)
+    {
+        if ((kal_mem_cmp(plmn,"73002",5) == 0) || (kal_mem_cmp(plmn,"73007",5) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// CL: VTR S.A.
+	else if (kal_mem_cmp(mcc_mnc,"73008",5) == 0)
+    {
+        if ((kal_mem_cmp(plmn,"73002",5) == 0) || (kal_mem_cmp(plmn,"73008",5) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// CL: Novator Partners
+	else if (kal_mem_cmp(mcc_mnc,"73009",5) == 0)
+    {
+        if ((kal_mem_cmp(plmn,"73009",5) == 0) || (kal_mem_cmp(plmn,"73001",5) == 0) || (kal_mem_cmp(plmn,"73003",5) == 0) || (kal_mem_cmp(plmn,"73010",5) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// CR: Instituto Costarricense de Electricidad
+	else if ((kal_mem_cmp(mcc_mnc,"71201",5) == 0) || (kal_mem_cmp(mcc_mnc,"71202",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"71201",5) == 0) || (kal_mem_cmp(plmn,"71202",5) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// CO: Colombia Movil S.A. ESP
+	else if ((kal_mem_cmp(mcc_mnc,"732103",6) == 0) || (kal_mem_cmp(mcc_mnc,"732111",6) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"732103",6) == 0) || (kal_mem_cmp(plmn,"732111",6) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// CO: Avantel S.A.S
+	else if (kal_mem_cmp(mcc_mnc,"732130",6) == 0)
+    {
+        if ((kal_mem_cmp(plmn,"732130",6) == 0) || (kal_mem_cmp(plmn,"732103",6) == 0) || (kal_mem_cmp(plmn,"732111",6) == 0) || (kal_mem_cmp(plmn,"732123",6) == 0) || (kal_mem_cmp(plmn,"732101",6) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// CO: Virgin Mobile Colombia S.A.S.
+	else if (kal_mem_cmp(mcc_mnc,"732154",6) == 0)
+    {
+        if ((kal_mem_cmp(plmn,"732154",6) == 0) || (kal_mem_cmp(plmn,"732123",6) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// CO: Empresa de Telecomunicaciones de Bogota S.A. ESP
+	else if (kal_mem_cmp(mcc_mnc,"732187",6) == 0)
+    {
+        if ((kal_mem_cmp(plmn,"732187",6) == 0) || (kal_mem_cmp(plmn,"732103",6) == 0) || (kal_mem_cmp(plmn,"732111",6) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// VE: Corporacion Digitel C.A.
+	else if ((kal_mem_cmp(mcc_mnc,"73401",5) == 0) || (kal_mem_cmp(mcc_mnc,"73402",5) == 0) || (kal_mem_cmp(mcc_mnc,"73403",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"73401",5) == 0) || (kal_mem_cmp(plmn,"73402",5) == 0) || (kal_mem_cmp(plmn,"73403",5) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// EC: Corporacion Nacional de Telecomunicaciones (CNT EP)
+	else if (kal_mem_cmp(mcc_mnc,"74002",5) == 0)
+    {
+        if ((kal_mem_cmp(plmn,"74002",5) == 0) || (kal_mem_cmp(plmn,"74000",5) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// MX: AT&T Mexico
+	else if (kal_mem_cmp(mcc_mnc,"334090",6) == 0)
+    {
+        if ((kal_mem_cmp(plmn,"334090",6) == 0) || (kal_mem_cmp(plmn,"33403",5) == 0) || (kal_mem_cmp(plmn,"334030",6) == 0) || (kal_mem_cmp(plmn,"334050",6) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// MX: AT&T Mexico
+	else if (kal_mem_cmp(mcc_mnc,"334050",6) == 0)
+    {
+        if ((kal_mem_cmp(plmn,"334050",6) == 0) || (kal_mem_cmp(plmn,"334090",6) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// MX: America Movil
+	else if ((kal_mem_cmp(mcc_mnc,"33402",5) == 0) || (kal_mem_cmp(mcc_mnc,"33420",5) == 0) || (kal_mem_cmp(mcc_mnc,"334020",6) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"33402",5) == 0) || (kal_mem_cmp(plmn,"33420",5) == 0) || (kal_mem_cmp(plmn,"334020",6) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// MX: Movistar - Telefonica Moviles
+	else if ((kal_mem_cmp(mcc_mnc,"33403",5) == 0) || (kal_mem_cmp(mcc_mnc,"334030",6) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"33403",5) == 0) || (kal_mem_cmp(plmn,"334030",6) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+	// TC: Digicel (Turks & Caicos) Limited
+	else if ((kal_mem_cmp(mcc_mnc,"33805",5) == 0) || (kal_mem_cmp(mcc_mnc,"338050",6) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"33805",5) == 0) || (kal_mem_cmp(plmn,"338050",6) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+    // DTAC
+    else if ((kal_mem_cmp(mcc_mnc,"52005",5) == 0) || (kal_mem_cmp(mcc_mnc,"52018",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"52005",5) == 0) || (kal_mem_cmp(plmn,"52018",5) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+    // TRUEMOVE
+    else if ((kal_mem_cmp(mcc_mnc,"52000",5) == 0) || (kal_mem_cmp(mcc_mnc,"52004",5) == 0) || (kal_mem_cmp(mcc_mnc,"52099",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"52000",5) == 0) || (kal_mem_cmp(plmn,"52004",5) == 0) || (kal_mem_cmp(plmn,"52099",5) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+    // AIS
+    else if ((kal_mem_cmp(mcc_mnc,"52001",5) == 0) || (kal_mem_cmp(mcc_mnc,"52003",5) == 0) || (kal_mem_cmp(mcc_mnc,"52023",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"52001",5) == 0) || (kal_mem_cmp(plmn,"52003",5) == 0) || (kal_mem_cmp(plmn,"52023",5) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+#endif
+
+
+    /*  [Operator requirement]
+       *   If Idea and Vodafone is in the same circle in India, even though the reigistered PLMN 
+       *   is not contained in HPLMN specified by SIM card, UE should still consider it home  */
+    if (KAL_TRUE == is_idea_vodafone_in_India_same_circle(plmn, mcc_mnc))
+    {
+        custom_is_on_hplmn = KAL_TRUE;
+    }
+    
+    /*  [Operator requirement] H3G Denmark and TDC
+       *   if H3G SIM card MCC+MNC is 23806 and current TDC PLMN is 23801/23810.  Treat as home PLMN. not consider roaming PLMN    */
+
+    if (kal_mem_cmp(mcc_mnc,"23806",5) == 0)
+    {
+       if ((kal_mem_cmp(plmn,"23801",5) == 0) || (kal_mem_cmp(plmn,"23810",5) == 0))
+       {
+           custom_is_on_hplmn = KAL_TRUE;
+       }
+    }
+
+    /* [Operator requirement] 
+     * For AT&T Sim cards in Mexico (), if device registers on 334 03 or 334 020, UE should consider it as home.
+     */
+    if ((kal_mem_cmp(mcc_mnc,"33405",5) == 0) || (kal_mem_cmp(mcc_mnc,"334050",6) == 0) || (kal_mem_cmp(mcc_mnc,"334090",6) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"33405",5) == 0) || (kal_mem_cmp(plmn,"334050",6) == 0) || (kal_mem_cmp(plmn,"334090",6) == 0) 
+             || (kal_mem_cmp(plmn,"33403",5) == 0) || (kal_mem_cmp(plmn,"334020",6) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+
+    /* [Operator requirement] 
+     * Spain Tuenti: SIM 21405 & register 21407 should be regarded as home.
+     */
+    if (kal_mem_cmp(mcc_mnc,"21405",5) == 0)
+    {
+        if (kal_mem_cmp(plmn,"21407",5) == 0)
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+    
+    /* [Operator requirement] 
+     * Sprint-TMO: SIM 310120/312530 & register 310120/312530 should be regarded as home.
+     */
+    if ((kal_mem_cmp(mcc_mnc,"310120",6) == 0) || (kal_mem_cmp(mcc_mnc,"312530",6) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"310120",6) == 0) || (kal_mem_cmp(plmn,"312530",6) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+    /* [Operator requirement]
+     * Sprint-TMO: SIM 310260/312250.
+     */
+    if ((kal_mem_cmp(mcc_mnc,"310260",6) == 0) || (kal_mem_cmp(mcc_mnc,"312250",6) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"310260",6) == 0) || (kal_mem_cmp(plmn,"312250",6) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+    /* [Operator requirement] Canada 
+       *   if SIM card MCC - 302 and any Canada PLMN (MCC-302) 
+       *   Treat as home PLMN not consider roaming PLMN.
+       *   except simcard is 302/490(Shaw), 302/490(Freedom), 302/270(Eastlink)*/
+
+    if (!((kal_mem_cmp(mcc_mnc,"302490",6) == 0)||(kal_mem_cmp(mcc_mnc,"302270",6) == 0)))
+    { 
+       if((kal_mem_cmp(mcc_mnc,"302",3) == 0)&&(kal_mem_cmp(plmn,"302",3) == 0))
+       {
+           custom_is_on_hplmn = KAL_TRUE;
+       }
+    }
+
+    /* [OPPO requirement] ALPS05356064 */
+    if ((kal_mem_cmp(mcc_mnc,"27202",5) == 0) || (kal_mem_cmp(mcc_mnc,"27205",5) == 0))
+    {
+        if ((kal_mem_cmp(plmn,"27202",5) == 0) || (kal_mem_cmp(plmn,"27205",5) == 0))
+        {
+            custom_is_on_hplmn = KAL_TRUE;
+        }
+    }
+    return (custom_is_on_hplmn || is_on_hplmn);
+}
+
+
+/***********************************************************************************************
+* FUNCTION
+*     custom_disable_query_cfu_status()
+* DESCRIPTION
+*     In CPHS spec , it define a file to record if Call Forwarding Uncoditional (CFU) is active.
+*     If CFU is active , ME show indicate user with CFU icon in MMI.
+*     However, not all the SIM card havs this CFU flag file. 
+*     So one SIM card might be with CFU activaed in ME A,but fail to display CFU icon when it is inserted in the ME B.
+*
+*     To dispaly CFU icon correctly,MTK solution might try to query CFU status right after first camping on to NW.
+*     However, this might cause user MO SS operation fail due to the collision of ss operation
+*
+* PARAMETERS
+*     none
+* RETURNS
+*     KAL_FALSE (default) is to query CFU status for the first time camping on to NW
+*     KAL_TRUE is to disable the trick 
+*************************************************************************************************/
+kal_uint8 custom_disable_query_cfu_status(void)
+{
+#if defined(__TC01__) || defined(__SS_CPHS_QUERY_CFU_DISABLE__)
+    return KAL_TRUE;  
+#else	
+    return KAL_FALSE;  
+#endif	
+}
+
+/***********************************************************************************************
+* FUNCTION
+*     custom_cphs_query_cfu_status_always()
+* DESCRIPTION
+*     In CPHS spec , it define a file to record if Call Forwarding Uncoditional (CFU) is active.
+*     If CFU is active , ME show indicate user with CFU icon in MMI.
+*     However, not all the SIM card havs this CFU flag file. 
+*     So one SIM card might be with CFU activaed in ME A,but fail to display CFU icon when it is inserted in the ME B.
+*
+*     To dispaly CFU icon correctly,MTK solution might try to query CFU status right after first camping on to NW always.
+*     However, this might cause user MO SS operation fail due to the collision of ss operation
+*     Available when custom_disable_query_cfu_status is KAL_FALSE.
+*
+* PARAMETERS
+*     none
+* RETURNS
+*     KAL_FALSE (default) is to query CFU status when camping on to NW at the first time
+*     KAL_TRUE is to query CFU status when camping on to NW
+*************************************************************************************************/
+kal_uint8 custom_cphs_query_cfu_status_always(void)
+{
+#if defined(__SS_CPHS_QUERY_CFU_ALWAYS__)
+    return KAL_TRUE;  
+#else	
+    return KAL_FALSE;  
+#endif	
+}
+
+/***********************************************************************************************
+* FUNCTION
+*     custom_cfu_store_ftn_in_efcfis()
+* DESCRIPTION
+*     Store CFU Forwarded-To-Number(FTN) to SIM EFcfis
+*     It may cause CFU machine test failure because of redundant saving FTN transaction
+* PARAMETERS
+*     none
+* RETURNS
+*     KAL_FALSE (default) do not store CFU FTN in SIM
+*     KAL_TRUE            do     store CFU FTN in SIM
+*************************************************************************************************/
+kal_uint8 custom_cfu_store_ftn_in_efcfis(void)
+{
+#ifdef __CFU_FTN_IN_EFCFIS__
+    return KAL_TRUE;  
+#else
+    return KAL_FALSE;  
+#endif
+}
+
+/***********************************************************************************************
+* FUNCTION
+*     custom_allow_at_write_imei()
+* DESCRIPTION
+*     To en/dis-able IMEI writing via AT command AT+EGMR with <op>=1 and <type>=7 or 10
+*
+* PARAMETERS
+*     none
+* RETURNS
+*     KAL_FALSE is to prevent AT+EGMR to write IMEI
+*     KAL_TRUE (default) is to allow the functionality 
+*************************************************************************************************/
+kal_uint8 custom_allow_at_write_imei(void)
+{
+#ifdef __NVRAM_CRITICAL_DATA_SIGN_SUPPORT__
+    return KAL_FALSE;
+#else
+#ifdef __MTK_INTERNAL_ENG_USER__
+    return KAL_TRUE;
+#else
+    return KAL_FALSE;
+#endif
+#endif
+}
+
+/***********************************************************************************************
+* FUNCTION
+*     custom_sms_fdn_check_da_only()
+* DESCRIPTION
+*     According to spec 22.101 A.25 , 
+*     For SMS,both SCA(Service Center address) and DA(Destination Address) shall be checked when FDN is enabled
+*     There might be special requirement for sms fdn check to check DA only.
+*
+* PARAMETERS
+*     none
+* RETURNS
+*     KAL_TRUE is to ignore fdn check for sca, only check for da
+*     KAL_FALSE (default) is to obey the spec. Do fdn check for both sca and da
+************************************************************************************************/
+kal_uint8 custom_sms_fdn_check_da_only(void)
+{
+#ifdef __SMS_FDN_CHECK_DA_ONLY__
+    return KAL_TRUE;
+#else
+    return KAL_FALSE;
+#endif
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_ath_for_dialup_timer()
+* DESCRIPTION
+*   	This function is used to define time duration of handling ath for dialup
+*	The unit is 0.1 sec , Current default value is 40 sec  (i.e. 400 x 0.1 sec)
+* PARAMETERS
+*	none
+* RETURNS
+*	time duration of handling ath for dialup
+*****************************************************************************/
+kal_uint16 custom_ath_for_dialup_timer(void)
+{
+    return 0;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   l4_custom_battery_cind_value()
+*
+* DESCRIPTION
+*   This function is used to convert battery_voltage(battery_level_enum)
+*   to cind value 0~5 (battery cind range 0~5 is defined in HFP and 27.007 spec)
+*   battery cind_value is the response of AT+CIND or +CIEV:<battery_ind>,<cind_value> 
+*
+* PARAMETERS
+*	battery_voltage      IN
+*
+* RETURNS
+*	cind value (according to HFP and 27.007 spec, battery cind value is 0~5)
+*****************************************************************************/
+kal_uint8 l4_custom_battery_cind_value(kal_uint8 battery_voltage)
+{
+    kal_uint8 cind_value;
+
+    /* convert battery_voltage(battery_level_enum) to spec defined cind value (0~5) */
+    if (battery_voltage > 5)
+    {
+        cind_value = 5;
+    }
+    else if (battery_voltage > 0)
+    {
+        cind_value = battery_voltage - 1;
+    }
+    else
+    {
+        cind_value = 0;
+    }
+
+    return cind_value;	
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  l4_custom_is_phb_valid_char
+ * DESCRIPTION
+ *  This function is to check if the chars of the input str are valid or not
+ * PARAMETERS
+ *  number		[IN]	string being checked     
+ * RETURNS
+ *  KAL_TRUE or KAL_FALSE
+ *****************************************************************************/
+kal_bool l4_custom_is_phb_valid_char(kal_uint8 ch)
+{
+    if ( !((ch >= '0' && ch <= '9') || ch == 'p' || 
+        ch == custom_wild_char() || ch == custom_auto_dtmf_modifier() ||
+        ch == '+' || ch == '*' || ch == '#') )
+    {
+            return KAL_FALSE;    
+    }
+
+    return KAL_TRUE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_disable_modem_auto_startup()
+* DESCRIPTION
+*
+* PARAMETERS
+*	none
+* RETURNS
+*   TRUE:  disable modem auto boot up. need AP side trigger
+*   FALSE: modem auto boot up/attach network
+*       cfun_state=1:  auto boot up in normal mode
+*       cfun_state=4:  auto boot up in flight mode
+*****************************************************************************/
+kal_bool custom_disable_modem_auto_startup(kal_uint8 *cfun_state)
+{
+    *cfun_state = 1;
+
+    #if defined(__MODEM_CARD__) && defined(IC_MODULE_TEST)
+        return KAL_FALSE;
+    #endif
+
+    if ((query_ps_conf_test_mode()==PS_CONF_TEST_FACTORY) && (query_ps_conf_test_profile_setting() & FACTORY_MODEM_AUTO_BOOT_AND_AUTO_ANSWER_BIT_FOR_L4C))
+    {
+        return KAL_FALSE;
+    }
+
+    #if defined(__MODEM_AUTO_STARTUP_TO_FLIGHT_MODE__)
+        *cfun_state = 4;
+        return KAL_FALSE;
+    #endif
+
+    #if defined(__DISABLE_MODEM_AUTO_STARTUP__) || defined(__SMART_PHONE_MODEM__)
+        return KAL_TRUE;
+    #endif
+
+    return KAL_FALSE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   l4_custom_get_cscs_support_string()
+*
+* DESCRIPTION
+*   This function is used to get the supportted list of the AT+CSCS
+*
+* PARAMETERS
+*	none
+*
+* RETURNS
+*	supported list string of AT+CSCS
+*****************************************************************************/
+kal_char* l4_custom_get_cscs_support_string(void)
+{
+    return "+CSCS: (\"IRA\", \"GSM\", \"HEX\", \"PCCP437\", \"8859-1\", \"UCS2\", \"UCS2_0X81\")";
+}
+
+/*****************************************************************************
+* FUNCTION
+*   l4_custom_is_supportted_cscs()
+*
+* DESCRIPTION
+*   This function is used to check if the input name of cscs is support or not
+*   which let customer decide what cscs should be supportted
+*
+* PARAMETERS
+*	none
+*
+* RETURNS
+*	supported list string of AT+CSCS
+*****************************************************************************/
+kal_bool l4_custom_is_supportted_cscs(kal_char* string)
+{
+    return KAL_TRUE;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   custom_disallow_gprs_dialup_when_ms_busy()
+*
+* DESCRIPTION
+*   This function is to configure "if we allow gprs dialup when MS is busy(in call)"
+*   in Bluetooth SPP port
+*   If return KAL_TRUE, we will response 'BUSY' for ATD*99# when MS busy (in call) 
+*   If return KAL_FALSE, we allow ATD*99# to be processed when MS is in call
+*
+*   For BQB DUN testcase APS/BV/02.
+*   It request MS to response 'BUSY' for GPRS dialup(ATD*99#) when MS is in call. 
+*
+* PARAMETERS
+*	none
+*
+* RETURNS
+*	KAL_TRUE or KAL_FASLE
+*****************************************************************************/
+kal_bool custom_disallow_gprs_dialup_when_ms_busy(void)
+{
+    return KAL_TRUE;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+ *  custom_check_keypad_code
+ * DESCRIPTION
+ *  This function is used to convert the input of AT command (ex. AT+CKPD) 
+ *  to the Device Key
+ *  Customer can use this function to override the meaning of a key from AT command
+ *  If customer didn't handle the key, we will check our default key mapping
+ *  
+ * PARAMETERS
+ *  key         [IN]        input keys from command
+ *  keycode   [OUT]     a output device key which is converted from key
+ * RETURNS
+ *  A pointer to the "key" which is unhandled
+ *****************************************************************************/
+kal_uint8* custom_check_keypad_code(kal_uint8 *key, kal_uint8 *keycode)
+{
+    /* EXAMPLE
+    if (*key == 'y' || *key=='Y')
+    {
+        *keycode = 57; // DEVICE_KEY_Y defined in the kbd_table.h
+        key++;
+    }
+    else if(*key == ':')
+    {
+        if(*(key+1) == 'j' || *(key+1) == 'J' )
+        {
+            *keycode = 42; // DEVICE_KEY_J defined in the kbd_table.h
+            key += 2;
+        }
+    }
+    */
+
+    return key;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   custom_remove_cgsms_constraint()
+*
+* DESCRIPTION
+*   Regarding to AT+CGSMS = <service> to set service parameter to send SMS.
+*   We don't allow to set <service> = 0 (PS only).
+*   This is to prevent MO SMS fail due to no GPRS service available
+*   We only allow to set <service> if TEST SIM is inserted (for FTA test)
+*
+*   If you want to remove such constraint, please modifty the function to return TRUE
+* PARAMETERS
+*	none
+*
+* RETURNS
+*	KAL_TRUE or KAL_FASLE
+*****************************************************************************/
+kal_bool custom_remove_cgsms_constraint(void)
+{
+#if 0
+#if defined(__CGSMS_FULL_SUPPORT__)
+/* under construction !*/
+#else
+/* under construction !*/
+#endif
+#else
+        return KAL_TRUE;
+#endif
+}
+
+/*****************************************************************************
+* FUNCTION
+*   custom_get_supported_bands()
+*
+* DESCRIPTION
+*   get the supported bands of the protocol
+*
+* PARAMETERS
+*   gsm_bands   returned gsm bands 
+*   umts_bands  returned umts bands 
+*
+* RETURNS
+*   none
+*****************************************************************************/
+void custom_get_supported_bands(kal_uint32 *gsm_bands, kal_uint32 *umts_bands, kal_uint32 *lte_band, kal_uint32 *nr_band, kal_uint32 *nsa_band)
+{
+    *gsm_bands = 0
+        #if defined(__EGSM900__) 
+            | 0x02  //BAND_900  
+        #endif
+        #if defined(__DCS1800__)  
+            | 0x08  //BAND_1800 
+        #endif                       
+        #if defined(__GSM850__)   
+            | 0x80  //BAND_850   
+        #endif 
+        #if defined(__PCS1900__)  
+            | 0x10  //BAND_1900  
+        #endif 
+        ;
+
+#if defined(__MTK_TARGET__)
+#if !defined (L1_NOT_PRESENT)
+    kal_char band_dbg_custom_str[100];		
+   // *gsm_bands = L1D_GetBandSupport_PCore();
+    *gsm_bands = L1D_UeBandCapability();
+    kal_sprintf(band_dbg_custom_str, "custom_get_supported_bands(), L1D_GetBandSupport_PCore(): 0x%x\n\r", *gsm_bands);
+    tst_sys_trace(band_dbg_custom_str);
+#endif
+#endif
+
+    if(KAL_TRUE == gmss_is_tdscdma_mode_activated(l4c_current_mod_id - MOD_L4C))
+    {
+        *umts_bands = 0 
+            #if defined(__UMTS_TDD128_BAND_A__)
+                | 0x00000001    
+            #endif  
+            #if defined(__UMTS_TDD128_BAND_F__)
+                | 0x00000020    
+            #endif  
+            ;
+
+    }
+    else
+    {
+#if defined (__MTK_UL1_FDD__)
+#if !defined (UL1_NOT_PRESENT)
+#if defined(__MTK_TARGET__)
+        {
+		    CA_RF_BAND_CAPABILITY_T ue_cap;
+
+		    UL1D_UeCaBandCapability(&ue_cap, 1);
+		    *umts_bands = ue_cap.single_band_ca_list;
+        }
+#endif
+#endif
+#endif
+    }
+#ifdef __MTK_TARGET__
+#ifdef __LTE_RAT__
+#ifndef __EL1D_COSIM__
+	{
+        mrs_eas_max_band_cap_for_user_extended((mrs_lte_band_list_struct*)lte_band);
+	}
+#endif
+#endif
+#endif
+
+    //5G
+#ifdef __MTK_TARGET__
+#ifdef __NR_RAT__
+  
+    if (nsa_band != NULL && nr_band != NULL) // for +EPBSEH cmd
+    {
+		//<nr_band> = rf nr band, <nsa_band> = rf endc band
+		mrs_nras_nr_band_rf_cap_for_user((mrs_nr_band_list_struct*)nr_band, (mrs_nr_band_list_struct*)nsa_band);
+    }
+	else if (nr_band != NULL) // for existing cmds other than +EPBSEH
+	{
+		// 	<nr_band> = (rf nr band | rf endc band)
+		mrs_nras_max_band_cap_for_user((mrs_nr_band_list_struct*)nr_band); 
+	}
+#endif
+#endif
+
+}
+
+#ifdef __UMTS_RAT__
+/*  Gordon 20090604 :For signal strength modification */
+/*  when RSCP < -72 and original signal strength > 9, new formula defines three RSCP thresholds for re-calculating a new signal strength */
+#define CUSTOM_3G_SIGNAL_LEVEL_MINUS_1_THRESHOLD (-72)
+#define CUSTOM_3G_SIGNAL_LEVEL_MINUS_2_THRESHOLD  (-88)
+#define CUSTOM_3G_SIGNAL_LEVEL_MINUS_3_THRESHOLD  (-104)
+/*  when RSCP < -72 and original signal strength > 9, signal strength values (8,11,14) are mapped to signal level (1,2,3) */
+#define CUSTOM_3G_SIGNAL_LEVEL_1_MAX_STRENGTH (8)
+#define CUSTOM_3G_SIGNAL_LEVEL_2_MAX_STRENGTH (11)
+#define CUSTOM_3G_SIGNAL_LEVEL_3_MAX_STRENGTH (14)
+
+/*  20101028: Adjust TDD RSCP to CSQ mapping */ 
+#ifdef __UMTS_TDD128_MODE__
+#define CUSTOM_3G_TDD_RSCP_THRESHOLD_1 (-51)
+#define CUSTOM_3G_TDD_RSCP_THRESHOLD_2 (-75)
+#define CUSTOM_3G_TDD_RSCP_THRESHOLD_3 (-85)
+#define CUSTOM_3G_TDD_RSCP_THRESHOLD_4 (-95)
+#define CUSTOM_3G_TDD_RSCP_THRESHOLD_5 (-108)
+
+#define CUSTOM_3G_TDD_CSQ_LEVEL_1 (31)
+#define CUSTOM_3G_TDD_CSQ_LEVEL_2 (15)
+#define CUSTOM_3G_TDD_CSQ_LEVEL_3 (7)
+#define CUSTOM_3G_TDD_CSQ_LEVEL_4 (3)
+#define CUSTOM_3G_TDD_CSQ_LEVEL_5 (0)
+#endif /* __UMTS_TDD128_MODE__ */
+#endif /* __UMTS_RAT__ */
+
+/*****************************************************************************
+* FUNCTION
+*   custom_signal_strength_in_ts27007()
+*
+* DESCRIPTION
+*   convert a dbm value to level value defined in 27.007 +CSQ
+*
+* PARAMETERS
+*    kal_int32 strength_in_dbm, any strength value in dbm (Ex. RSCP, RSSI, EcN0...)
+*
+* RETURNS
+*	level value: ranged from 0 to 31, 99 means invalid/un-available
+*****************************************************************************/
+kal_uint8 custom_signal_strength_in_ts27007(kal_int32 strength_in_dbm)
+{
+    kal_uint8 level = 99;
+	if (strength_in_dbm <= -113)
+	{
+	    level = 0;
+	}
+	else if (strength_in_dbm >= -51)
+	{
+	    level = 31;
+	}
+	else
+	{						
+    	level = (strength_in_dbm + 113) / 2; 
+	}	
+	return level;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   custom_signal_strength_cesq_level_to_raw()
+*
+* DESCRIPTION
+*   This function is used to convert signal level to raw qdBm according to 3GPP 27.007 +CESQ definnition
+*   
+* PARAMETERS
+*	none
+*
+* RETURNS
+*   
+*****************************************************************************/
+kal_int32 custom_signal_strength_cesq_level_to_raw(l4_cesq_param_enum type, kal_uint8 signal_level)
+{
+    kal_int32 raw_in_qdbm=1;
+
+    if (type == L4_GERAN_RXLEVEL)
+    {
+        if (signal_level >= 0 && signal_level <= 63)
+        {
+            raw_in_qdbm = (signal_level << 2) - 444;
+        }
+    }
+    else if (type == L4_GERAN_BER)
+    {
+        // N/A
+    }
+    else if (type == L4_UTRA_RSCP)
+    {
+        if (signal_level >= 0 && signal_level <= 96)
+        {
+            raw_in_qdbm = (signal_level << 2) - 484;
+        }
+    }
+    else if (type == L4_UTRA_ECNO)
+    {
+        if (signal_level >= 0 && signal_level <= 49)
+        {
+            raw_in_qdbm = (signal_level - 49) << 1;
+        }
+    }
+    else if (type == L4_EUTRA_RSRQ)
+    {
+        if (signal_level >= 0 && signal_level <= 34)
+        {
+            raw_in_qdbm = (signal_level - 40) << 1;
+        }
+    }
+    else if (type == L4_EUTRA_RSRP)
+    {
+        if (signal_level >= 0 && signal_level <= 97)
+        {
+            raw_in_qdbm = (signal_level << 2) - 564;
+        }
+    }
+    else if (type == L4_NR_SS_RSRQ)
+    {
+        if (signal_level >= 0 && signal_level <= 126)
+        {
+            raw_in_qdbm = (signal_level << 1) - 174;
+        }
+    }
+    else if (type == L4_NR_SS_RSRP)
+    {
+        if (signal_level >= 0 && signal_level <= 126)
+        {
+            raw_in_qdbm = (signal_level << 2) - 628;
+        }
+    }
+    else if (type == L4_NR_SS_SINR)
+    {
+        if (signal_level >= 0 && signal_level <= 127)
+        {
+            raw_in_qdbm = (signal_level << 1) - 94;
+        }
+    }
+
+    return raw_in_qdbm;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   custom_signal_strength_raw_to_cesq_level()
+*
+* DESCRIPTION
+*   This function is used to convert qdBm to signal level according to 3GPP 27.007 +CESQ definnition
+*   
+* PARAMETERS
+*	none
+*
+* RETURNS
+*   
+*****************************************************************************/
+kal_uint8 custom_signal_strength_raw_to_cesq_level(l4_cesq_param_enum type, kal_int32 raw_in_qdbm)
+{
+    kal_uint8 signal_level = 0;
+    //kal_int32 raw_in_dbm = (raw_in_qdbm / 4);
+
+    if (type == L4_GERAN_RXLEVEL)
+    {
+        if (raw_in_qdbm == 1)
+        {
+            signal_level = 99;
+        }
+        else if (raw_in_qdbm < -440)
+        {
+            signal_level = 0;
+        }
+        else if (raw_in_qdbm >= -192)
+        {
+            signal_level = 63;
+        }
+        else
+        {
+            signal_level = (raw_in_qdbm + 444) >> 2;
+        }
+    }
+    else if (type == L4_GERAN_BER)
+    {
+        if (raw_in_qdbm >= 0 && raw_in_qdbm <= 7)
+        {
+            signal_level = raw_in_qdbm;
+        }
+        else
+        {
+            signal_level = 99;
+        }
+    }
+    else if (type == L4_UTRA_RSCP)
+    {
+        if (raw_in_qdbm == 1)
+        {
+            signal_level = 255;
+        }
+        else if (raw_in_qdbm < -480)
+        {
+            signal_level = 0;
+        }
+        else if (raw_in_qdbm >= -100)
+        {
+            signal_level = 96;
+        }
+        else
+        {
+            signal_level = (raw_in_qdbm + 484) >> 2;
+        }
+    }
+    else if (type == L4_UTRA_ECNO)
+    {
+        if (raw_in_qdbm == 1)
+        {
+            signal_level = 255;
+        }
+        else if (raw_in_qdbm < -96)
+        {
+            signal_level = 0;
+        }
+        else if (raw_in_qdbm >= 0)
+        {
+            signal_level = 49;
+        }
+        else
+        {
+            signal_level = (raw_in_qdbm >> 1) + 49;
+        }
+    }
+    else if (type == L4_EUTRA_RSRQ)
+    {
+        if (raw_in_qdbm == 1)
+        {
+            signal_level = 255;
+        }
+        else if (raw_in_qdbm < -78)
+        {
+            signal_level = 0;
+        }
+        else if (raw_in_qdbm >= -12)
+        {
+            signal_level = 34;
+        }
+        else
+        {
+            signal_level = (raw_in_qdbm >> 1) + 40;
+        }
+    }
+    else if (type == L4_EUTRA_RSRP)
+    {
+        if (raw_in_qdbm == 1)
+        {
+            signal_level = 255;
+        }
+        else if (raw_in_qdbm < -560)
+        {
+            signal_level = 0;
+        }
+        else if (raw_in_qdbm >= -176)
+        {
+            signal_level = 97;
+        }
+        else
+        {
+            signal_level = (raw_in_qdbm + 564) >> 2;
+        }
+    }
+        else if (type == L4_NR_SS_RSRQ)
+    {
+        if (raw_in_qdbm >= 80)
+        {
+            signal_level = 255;
+        }
+        else if (raw_in_qdbm < -172)
+        {
+            signal_level = 0;
+        }
+        else
+        {
+            signal_level = (raw_in_qdbm + 174) >> 1;
+        }
+    }
+    else if (type == L4_NR_SS_RSRP)
+    {
+        if (raw_in_qdbm == 1)
+        {
+            signal_level = 255;
+        }
+        else if (raw_in_qdbm < -624)
+        {
+            signal_level = 0;
+        }
+        else if (raw_in_qdbm >= -124)
+        {
+            signal_level = 126;
+        }
+        else
+        {
+            signal_level = (raw_in_qdbm + 628) >> 2;
+        }
+    }
+    else if (type == L4_NR_SS_SINR)
+    {
+        if (raw_in_qdbm == 0x7FFF)
+        {
+            signal_level = 255;
+        }
+        else if (raw_in_qdbm < -92)//sinr < (-23 * 4) qdb
+        {
+            signal_level = 0;
+        }
+        else if (raw_in_qdbm >= 160)//sinr < (-40 * 4) qdb
+        {
+            signal_level = 127;
+        }
+        else
+        {
+            signal_level = (raw_in_qdbm + 94) >> 1;//a per signal level means that is a 0.5db or 2dqd
+        }
+    }
+
+
+    return signal_level;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   custom_signal_strength_raw_to_csq_level()
+*
+* DESCRIPTION
+*   convert 2G/3G signal strength raw data to level value defined in 27.007 +CSQ
+*
+* PARAMETERS
+*    kal_uint8 rat            radio access technology (2G/3G)
+*	 kal_int32 rssi_in_qdbm   2G/3G raw data   
+*    kal_int32 RSCP_in_qdbm   3G raw data
+*    kal_int32 EcN0_in_qdbm   3G raw data
+*    kal_uint8 ber            2G/3G raw data
+*	 kal_uint8 current_band   2G raw data
+*
+* RETURNS
+*	level value: ranged from 0 to 31, 99 means invalid/un-available
+*****************************************************************************/
+kal_uint8 custom_signal_strength_raw_to_csq_level(
+                kal_uint8 rat, 
+                kal_int32 rssi_in_qdbm, 
+                kal_int32 RSCP_in_qdbm,
+                kal_int32 EcN0_in_qdbm,
+                kal_uint8 ber,
+                kal_uint8 current_band,
+                kal_int32 RSRQ_in_qdbm,
+                kal_int32 RSRP_in_qdbm,
+                kal_int32 ss_RSRQ_in_qdb,
+                kal_int32 ss_RSRP_in_qdbm)
+{
+    kal_int32 level = 99;
+	if (rat == RAT_GSM)
+	{
+	    /* 2G conversion */
+		if (rssi_in_qdbm != 1)
+		{
+		    /* refer to 27.007 AT+CSQ */
+			level = custom_signal_strength_in_ts27007(rssi_in_qdbm / 4);
+		}
+	}
+#ifdef __UMTS_RAT__	
+    else if (rat == RAT_UMTS)
+    {
+    #ifdef __UMTS_TDD128_MODE__ /* 3G TDD conversion */	    
+		{
+		    kal_int32 RSCP = RSCP_in_qdbm / 4;
+
+			if (RSCP >= CUSTOM_3G_TDD_RSCP_THRESHOLD_1)
+			{
+			    level = 31;
+			}
+			else if (RSCP >= CUSTOM_3G_TDD_RSCP_THRESHOLD_2)
+			{
+			    level = (CUSTOM_3G_TDD_CSQ_LEVEL_2+1) + 
+					(CUSTOM_3G_TDD_CSQ_LEVEL_1-CUSTOM_3G_TDD_CSQ_LEVEL_2-1) * (RSCP-CUSTOM_3G_TDD_RSCP_THRESHOLD_2) / 
+                    (CUSTOM_3G_TDD_RSCP_THRESHOLD_1-CUSTOM_3G_TDD_RSCP_THRESHOLD_2);
+			}
+			else if (RSCP >= CUSTOM_3G_TDD_RSCP_THRESHOLD_3)
+			{
+			    level = (CUSTOM_3G_TDD_CSQ_LEVEL_3+1) + 
+					(CUSTOM_3G_TDD_CSQ_LEVEL_2-CUSTOM_3G_TDD_CSQ_LEVEL_3-1) * (RSCP-CUSTOM_3G_TDD_RSCP_THRESHOLD_3) / 
+                    (CUSTOM_3G_TDD_RSCP_THRESHOLD_2-CUSTOM_3G_TDD_RSCP_THRESHOLD_3-1);
+			}
+			else if (RSCP >= CUSTOM_3G_TDD_RSCP_THRESHOLD_4)
+			{
+			    level = (CUSTOM_3G_TDD_CSQ_LEVEL_4+1) + 
+					(CUSTOM_3G_TDD_CSQ_LEVEL_3-CUSTOM_3G_TDD_CSQ_LEVEL_4-1) * (RSCP-CUSTOM_3G_TDD_RSCP_THRESHOLD_4) / 
+                    (CUSTOM_3G_TDD_RSCP_THRESHOLD_3-CUSTOM_3G_TDD_RSCP_THRESHOLD_4-1);
+			}
+			else if (RSCP >= CUSTOM_3G_TDD_RSCP_THRESHOLD_5)
+			{
+			    level = (CUSTOM_3G_TDD_CSQ_LEVEL_5+1) + 
+					(CUSTOM_3G_TDD_CSQ_LEVEL_4-CUSTOM_3G_TDD_CSQ_LEVEL_5-1) * (RSCP-CUSTOM_3G_TDD_RSCP_THRESHOLD_5) / 
+                    (CUSTOM_3G_TDD_RSCP_THRESHOLD_4-CUSTOM_3G_TDD_RSCP_THRESHOLD_5-1);
+			}
+			else
+			{
+			    level = 0;
+			}			
+		}
+
+    #else /* 3G FDD conversion */
+
+		/* Alva 20081210: signal strength = (Ec/N0 + 25) + (RSCP + 120) / 8, range: 0 ~ 31 */
+		level =
+		    ((EcN0_in_qdbm / 4) + 25) + 
+		    (((RSCP_in_qdbm / 4) + 120) / 8);
+
+		if (level > 31)
+		{
+		    level = 31;
+		}
+
+		/* Gordon 20090604: To reflect the real network environment more accurately, 
+		 *  based on the experiment results, we modify the calculated signal level for MMI display 
+		 *  When RSCP < -72 and the original signal strength > 9, 
+		 *  a new formula is defined to modify the original signal strength.
+		 *  More detailed information are shown in the excel file for the new formula */
+
+		if (level >= (CUSTOM_3G_SIGNAL_LEVEL_1_MAX_STRENGTH+1))
+		{
+			kal_int32 RSCP_in_dbm = RSCP_in_qdbm / 4;
+			if (RSCP_in_dbm < CUSTOM_3G_SIGNAL_LEVEL_MINUS_3_THRESHOLD) 
+			{
+				level = CUSTOM_3G_SIGNAL_LEVEL_1_MAX_STRENGTH;
+			}
+			else if (RSCP_in_dbm < CUSTOM_3G_SIGNAL_LEVEL_MINUS_2_THRESHOLD) 
+			{
+				if ((CUSTOM_3G_SIGNAL_LEVEL_3_MAX_STRENGTH) >= level)
+				{
+					level=CUSTOM_3G_SIGNAL_LEVEL_1_MAX_STRENGTH;
+				}
+				else
+				{
+					level=CUSTOM_3G_SIGNAL_LEVEL_2_MAX_STRENGTH; 
+				}
+			}
+			else if (RSCP_in_dbm < CUSTOM_3G_SIGNAL_LEVEL_MINUS_1_THRESHOLD) 
+			{
+				if (CUSTOM_3G_SIGNAL_LEVEL_2_MAX_STRENGTH >= level)
+				{
+					level=CUSTOM_3G_SIGNAL_LEVEL_1_MAX_STRENGTH;
+				}
+				else if (CUSTOM_3G_SIGNAL_LEVEL_3_MAX_STRENGTH >= level)
+				{
+					level=CUSTOM_3G_SIGNAL_LEVEL_2_MAX_STRENGTH;
+				}
+				else
+				{
+					level=CUSTOM_3G_SIGNAL_LEVEL_3_MAX_STRENGTH;   
+				}
+			}
+		}
+    #endif /* __UMTS_TDD128_MODE__ */
+    }
+#endif /* __UMTS_RAT__ */
+#ifdef __LTE_RAT__
+    else if (rat == RAT_LTE)
+    {
+        if (RSRP_in_qdbm != 1)
+        {
+            level = custom_signal_strength_raw_to_cesq_level(L4_EUTRA_RSRP, RSRP_in_qdbm) >> 2;
+        }
+    }
+#endif
+
+	return (kal_uint8) level;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   custom_signal_strength_raw_to_ciev_signal_level()
+*
+* DESCRIPTION
+*   convert signal strength raw data to level <val> in +CIEV:<signal>,<val>
+*
+* PARAMETERS
+*    kal_uint8 rat            radio access technology (2G/3G)
+*	 kal_int32 rssi_in_qdbm   RSSI raw data
+*    kal_int32 RSCP_in_qdbm   3G raw data
+*    kal_int32 EcN0_in_qdbm   3G raw data
+*    kal_uint8 ber            2G/3G raw data
+*	 kal_uint8 current_band   2G raw data
+*
+* RETURNS
+*	level value: ranges from 0 to 5
+*****************************************************************************/
+kal_uint8 custom_signal_strength_raw_to_ciev_signal_level(
+            kal_uint8 rat, 
+            kal_int32 rssi_in_qdbm, 
+            kal_int32 RSCP_in_qdbm,
+            kal_int32 EcN0_in_qdbm,
+            kal_uint8 ber,
+            kal_uint8 current_band,
+            kal_int32 RSRQ_in_qdbm,
+            kal_int32 RSRP_in_qdbm,
+            kal_int32 ss_RSRQ_in_qdb,
+            kal_int32 ss_RSRP_in_qdbm)
+{
+    kal_uint8 rx_level = 0;
+    kal_uint8 signal_ind;
+
+    rx_level = custom_signal_strength_raw_to_csq_level(rat, rssi_in_qdbm, RSCP_in_qdbm, EcN0_in_qdbm, ber, current_band,
+                                                       RSRQ_in_qdbm, RSRP_in_qdbm, ss_RSRQ_in_qdb, ss_RSRP_in_qdbm);
+
+    if (rx_level == 0 || rx_level == 99)
+    {
+        signal_ind = 0;
+    }
+    else if (rx_level < 6)
+    {
+        signal_ind = 1;
+    }
+    else if ((rx_level >= 6) && (rx_level < 12))
+    {
+        signal_ind = 2;
+    }
+    else if ((rx_level >= 12) && (rx_level < 18))
+    {
+        signal_ind = 3;
+    }
+    else if ((rx_level >= 18) && (rx_level < 24))
+    {
+        signal_ind = 4;
+    }
+    else if (rx_level >= 24)
+    {
+        signal_ind = 5;
+    }
+    else
+    {
+        signal_ind = 0;
+    }
+
+    return signal_ind;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   custom_ciev_signal_variance()
+*
+* DESCRIPTION
+*   This function is used to set the ignorable difference between two consequent
+*   +CIEV Signal Strength URC for Bluetoth Hands-Free.
+*
+* PARAMETERS
+*	none
+*
+* RETURNS
+*   A kal_uint8 value 0 ~ 5 indicating the ignorable difference bwtween two <val>
+*   in +CIEV:<signal>,<val>. If the return is larger than 0, the <val> different 
+*   to the last reported +CIEV Signal Strength <val> which is smaller then the 
+*   return would be ignored.
+*   If the return value is 0, the +CIEV Signal Strength URC is reported as usual
+*****************************************************************************/
+kal_uint8 custom_ciev_signal_variance(void)
+{
+    /* The default return value is 0 which means no filter.
+       If return value is 5, the +CIEV:<signal>,<val> is turn off
+    */
+    return 0;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   custom_disable_gprs_csd_dialup()
+*
+* DESCRIPTION
+*   This function is used to disable GPRS and CSD dial up functionality
+*
+* PARAMETERS
+*	none
+*
+* RETURNS
+*   KAL_TRUE is to disable gprs and csd dialup
+*   KAL_FALSE has no effect on these functionality (default)
+*****************************************************************************/
+kal_bool custom_disable_gprs_csd_dialup(void) //MAUI_02600165
+{
+    return KAL_FALSE;
+}
+
+#if defined(__ATCMD_ONOFF_CHECK__)
+/*****************************************************************************
+* FUNCTION
+*   custom_check_is_atcmd_allowed()
+*
+* DESCRIPTION
+*   check if the command is allowed by custom or not
+*
+* PARAMETERS
+*   cmd_id   [IN]   AT command enum defined in the ps\l4\atci\include\at_cmd.def
+*
+* RETURNS
+*   KAL_TRUE: could be executed, 
+*   KAL_FLASE: could not be executed
+*****************************************************************************/
+kal_bool custom_check_is_atcmd_allowed(rmmi_cmd_id_enum cmd_id)
+{    
+    /* the following example disallowed executing 
+    * the command AT+EADP
+    */
+    /*if (cmd_id == RMMI_CMD_ATEADP) 
+    {
+        return KAL_FALSE;
+    }*/
+    return KAL_TRUE;
+}
+#endif
+
+#ifdef __MOD_TCM__
+/*****************************************************************************
+* FUNCTION
+*   custom_l4c_gprs_when_needed_timer()
+*
+* DESCRIPTION
+*   This function is used to define GPRS when needed timer value
+*   The unit is 100ms. Ex. 20 => 20 * 100ms => 2 seconds
+*   Default value = 20 (2 seconds)
+*   Maximum value = 255 (Due to kal_uint8 limit, the max is about 25.5 sec)
+* PARAMETERS
+*	none
+*****************************************************************************/
+kal_uint8 custom_l4c_gprs_when_needed_timer(void) 
+{
+    const kal_uint8 GPRS_DETACH_TIMER = 20;
+    return GPRS_DETACH_TIMER;
+} // MAUI_02598495, custom gprs detach timer
+
+/*****************************************************************************
+* FUNCTION
+*   custom_l4c_ndis_fdn_enable()
+*
+* DESCRIPTION
+*   This function is used to enable/disable FDN check before NDIS setup
+*   0. the FDN check number is "*99#"
+*   1. if it returns KAL_TRUE, then L4C checks PHB approve result to decide doing PDP activation or not,
+*       - if PHB approve fails, then it does NOT send out PDP activation request
+*       - if PHB approve succeeds, then it sends out PDP activation request
+*
+*   2. if it returns KAL_FALSE, the L4C always SKIPS PHB approve result and always send out PDP activation request
+* PARAMETERS
+*	none
+*****************************************************************************/
+kal_bool custom_l4c_ndis_fdn_enable(void)
+{
+#if 1
+    return KAL_TRUE; //check FDN
+#else
+/* under construction !*/
+#endif
+}
+
+/*****************************************************************************
+* FUNCTION
+*   custom_l4c_psbearer_indicate()
+*
+* DESCRIPTION
+*   This function is used to enable/disable +PSBEARER: <x>, <y> indication
+*   KAL_TRUE: Yes
+*   KAL_FALSE: No
+*
+* PARAMETERS
+*	none
+*****************************************************************************/
+kal_uint8 custom_l4c_psbearer_indicate(void)
+{
+    return KAL_FALSE;
+}
+
+kal_uint8 custom_tcm_operator_specfic_qci_mapping(tcm_eps_qos_struct *eps_qos)
+{
+    kal_uint8 mapping_qci;
+
+#define MTK_OPERATOR_SPECIFIC_QCI_MAP_TO_GBR_QCI 4    
+#define MTK_OPERATOR_SPECIFIC_QCI_MAP_TO_NON_GBR_QCI 9
+
+
+    // GBR 
+    if ( eps_qos->max_bitrate_up_lnk != 0
+         || eps_qos->max_bitrate_down_lnk != 0
+         || eps_qos->guarntd_bit_rate_up_lnk != 0
+         || eps_qos->guarntd_bit_rate_down_lnk != 0
+         || eps_qos->ext_max_bitrate_up_lnk != 0
+         || eps_qos->ext_max_bitrate_down_lnk != 0
+         || eps_qos->ext_guarntd_bit_rate_up_lnk != 0
+         || eps_qos->ext_guarntd_bit_rate_down_lnk != 0
+         || eps_qos->ext2_max_bitrate_up_lnk != 0
+         || eps_qos->ext2_max_bitrate_down_lnk != 0
+         || eps_qos->ext2_guarntd_bit_rate_up_lnk != 0
+         || eps_qos->ext2_guarntd_bit_rate_down_lnk != 0
+    ) {
+        mapping_qci = MTK_OPERATOR_SPECIFIC_QCI_MAP_TO_GBR_QCI;
+    } 
+    // non-GBR
+    else {
+        mapping_qci = MTK_OPERATOR_SPECIFIC_QCI_MAP_TO_NON_GBR_QCI;
+    }
+
+    return mapping_qci;
+}
+
+#endif /* __MOD_TCM__ */
+
+/*****************************************************************************
+* FUNCTION
+*   custom_l4c_max_poweroff_retry()
+*
+* DESCRIPTION
+*   This function is used to define maximal waitting time for SIM power off while MS is going to shutdown
+*   The unit is second. Ex. 2 => 2 seconds
+*   Default value = 8 (seconds)
+*   Maximum value = 255 (Due to kal_uint8 limit, the max is about 255 sec)
+* PARAMETERS
+*	none
+*****************************************************************************/
+kal_uint8 custom_l4c_max_poweroff_retry(void)
+{
+    return 8;
+}
+
+
+#ifdef __SAT__
+/*****************************************************************************
+* FUNCTION
+*   custom_l4c_sat_ton_npi_transform()
+*
+* DESCRIPTION
+*   This function is used to transform the TON/NPI of SAT send SS/CALL from SIM
+*   
+* PARAMETERS
+*	raw_data    [IN] raw data from SIM
+*
+* RETURNS
+*   the new data transformed from raw_data
+*****************************************************************************/
+kal_uint8 custom_l4c_sat_ton_npi_transform(kal_uint8 raw_data)
+{
+    kal_uint8 ret_val = 0x81;
+
+    /* MAUI_02660770: return 0x91 if raw_data is between 0x90 to 0x9f;
+     * Otherwise return 0x81
+     */
+    if ((raw_data >= 0x90) && (raw_data <= 0x9f))
+    {
+        ret_val = 0x91;
+    }
+
+    return ret_val;
+}
+#endif /* __SAT__ */
+
+#ifdef __AMR_WB_WHITE_LIST__
+/*****************************************************************************
+* FUNCTION
+*  custom_check_white_list
+* DESCRIPTION
+*  This function is for customize PLMN in the wihte list, on which CC support AMR_WB
+*
+* PARAMETERS
+*
+* RETURNS
+*
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+void custom_check_white_list(kal_bool * is_gsm_white_list,kal_bool * is_umts_white_list,kal_uint32 plmn_id, protocol_id_enum ps_index)
+{
+	kal_uint8 out_buff[100];
+
+#ifdef __AMR_WB_FOR_T_MOBILE__   
+    /* *is_gsm_white_list =KAL_TRUE; means that MS support AMR_WB in 2G rat of the selected PLMN*/
+    /*check 2G white_list plmn [byte2:mcc1,mcc2; byte1:mcc3,mnc1; byte0:mnc2,mnc3]*/
+    switch(plmn_id)
+    {
+    /*Please add white plmn list as specified below:
+        case 0x0046000f:
+        case 0x0046002f:
+            *is_gsm_white_list =KAL_TRUE;
+            break;
+    */            
+        default:
+   	      *is_gsm_white_list =KAL_FALSE;
+            break;
+    }  	
+#else
+#ifdef __AMR_GSM_IOT_SUPPORT__
+    switch(plmn_id)
+	{
+		/*Please add white plmn list as specified below:
+		case 0x0046000f:
+		case 0x0046002f:
+			*is_gsm_white_list =KAL_TRUE;
+			break;
+		*/      
+		default:
+			*is_gsm_white_list = KAL_TRUE;
+			break;
+	}
+#else
+    switch(plmn_id)
+ 	{
+		/*Please add white plmn list as specified below: 
+		case 0x0022201f:
+		case 0x0022210f:
+		case 0x0022288f:
+		case 0x0022299f:
+			*is_gsm_white_list =KAL_TRUE;
+			break;
+		*/
+		
+		default:
+			*is_gsm_white_list =KAL_FALSE;
+			break;
+ 	}
+#endif 
+#endif    
+#ifdef __OP11__
+    /* *is_umts_white_list =KAL_TRUE; means that MS support AMR_WB in 3G rat of the selected PLMN*/   	
+    /*check UMTS white_list plmn [byte2:mcc1,mcc2; byte1:mcc3,mnc1; byte0:mnc2,mnc3]*/
+    switch(plmn_id)	
+    {
+    /*Please add white plmn list as specified below:       
+        case 0x0046000f:
+        case 0x0046002f:
+            *is_umts_white_list =KAL_TRUE;
+            break;
+    */            
+        default:
+   	      *is_umts_white_list =KAL_FALSE;
+   	      break;
+    }
+#else
+    *is_umts_white_list =sbp_query_md_feature_by_ps(SBP_AMR_WB_UMTS, ps_index);    
+#endif    
+
+    kal_sprintf((kal_char*)out_buff, " GSM white list = %d, UMTS white list  = %d, PLMN = %x", *is_gsm_white_list, *is_umts_white_list,plmn_id);
+    tst_sys_trace((kal_char*)out_buff);
+
+    return ;
+}
+#endif
+
+/*****************************************************************************
+* FUNCTION
+*  cm_p_w_switch
+* DESCRIPTION
+*   This function is used to define if "P"(pause) and "W"(wait for user command)
+*   of DTMF separator is switched or not
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_bool cm_dtmf_p_w_switch (void)
+{
+   return (CM_DTMF_P_W_SWITCH_FLAG);
+}
+
+#ifdef __FWP_NC_LAI_INFO__
+/*****************************************************************************
+* FUNCTION
+*  cm_get_cell_lock_string
+* DESCRIPTION
+*   This function is used to let customer configure cell lock prefix and also
+*   change prefix length, CELL_LOCK_PREFIX_LEN
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 cm_get_cell_lock_string (kal_uint8** prefix)
+{
+	/*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+	*prefix = &CELL_LOCK_PREFIX[0];
+	return CELL_LOCK_PREFIX_LEN;
+}
+#endif /*__FWP_NC_LAI_INFO__*/
+
+/*****************************************************************************
+* FUNCTION
+*  customer_define_codec_priority
+* DESCRIPTION
+*   This function is used to define the priority customer prefered
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+const kal_uint8 customer_define_codec_priority[SUPPORTED_2G_CODEC_NUM]=
+{
+#ifdef __CUSTOM_CODEC_PRIORITY__
+    CSMCC_FR_AMRWB_V5,CSMCC_FR_V3,CSMCC_HR_V3,CSMCC_FR_V2,CSMCC_FR_V1,CSMCC_HR_V1
+#else
+    CSMCC_FR_AMRWB_V5,CSMCC_FR_V3,CSMCC_FR_V2,CSMCC_FR_V1,CSMCC_HR_V3,CSMCC_HR_V1
+#endif
+};
+
+/*****************************************************************************
+* FUNCTION
+*  cc_get_SUPPORTED_2G_CODEC_NUM
+* DESCRIPTION
+*   This function is used to get the MAX Codec size customer defined 
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 cc_get_SUPPORTED_2G_CODEC_NUM(void)
+{
+    return(SUPPORTED_2G_CODEC_NUM);
+}
+
+
+#ifdef __CUSTOM_CONFIG_ACM_BOUND__
+/*****************************************************************************
+* FUNCTION
+*  custom_is_acm_exceed_boundary
+* DESCRIPTION
+*   This function is used to check if acm exceed the boundary.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_bool custom_is_acm_exceed_boundary (kal_uint32 acm_value)
+{
+       return ((kal_bool)(acm_value > CUSTOM_ACM_BOUND));
+}
+#endif /*__CUSTOM_CONFIG_ACM_BOUND__*/
+
+/* MAUI_01637672 support CCWE */
+/*****************************************************************************
+* FUNCTION
+*  custom_cc_get_acm_bound
+* DESCRIPTION
+*   This function is used to get the acm custom bound.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint32
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint32 custom_cc_get_acm_bound()
+{
+   return ((kal_uint32)CUSTOM_ACM_BOUND);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_cc_get_acm_ccwe_time
+* DESCRIPTION
+*   This function is used to get the acm ccwe time.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint32
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint32 custom_cc_get_acm_ccwe_time()
+{
+   return ((kal_uint32)CUSTOM_ACM_CALL_METER_WARNING_EVENT_SECONDS);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_config_rlc_timer
+* DESCRIPTION
+*   This function is used to get customer config rlc timer in seconds.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint32
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint32 custom_config_rlc_timer()
+{
+       return CSM_RLC_TIMER_CONFIG;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_config_cc_disc_error_cause
+* DESCRIPTION
+*   This function is used to get customer config CC_DISCONNCT error cause.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint16
+* 
+*****************************************************************************/
+kal_uint16 custom_config_cc_disc_error_cause(kal_uint16 **cc_disc_error_cause)
+{
+    kal_uint8 disc_error_cause_len;
+    *cc_disc_error_cause = &CUSTOM_DISC_ERROR_CAUSE[0];
+	disc_error_cause_len = sizeof(CUSTOM_DISC_ERROR_CAUSE)/sizeof(CUSTOM_DISC_ERROR_CAUSE[0]);
+    return disc_error_cause_len;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_get_at_audio_download_folder
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *
+ *****************************************************************************/
+kal_wchar *custom_get_at_audio_download_folder()
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    return CUSTOM_AT_AUDIO_DOWNLOAD_FOLDER_NAME;
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_get_at_image_download_folder
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *
+ *****************************************************************************/
+kal_wchar *custom_get_at_image_download_folder()
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    return CUSTOM_AT_IMAGE_DOWNLOAD_FOLDER_NAME;
+}
+
+
+#if defined(__NO_PSDATA_SEND_SCRI__) || defined(__FAST_DORMANCY__)
+/* the maximum supported number of timer used in Fast Dormancy , 1 ~ 255 */
+#define MAX_SUPPORTED_FD_TIMER_ID 4
+#define FD_TIMER_DURATION_INVALID 0xffff
+
+/* the time slot of each tick to monitor PS data. uint is 0.1 sec */
+#define FD_MONITOR_SLOT 10
+
+/* the inactivity timer table. unit is 0.1 sec */
+kal_uint16 fd_timer[MAX_SIM_NUM][MAX_SUPPORTED_FD_TIMER_ID] = 
+{
+	{
+	/* timer id(b8~b1) meaning
+	   b1: screen on/off
+	   b2: NW R8 FD supported
+	   b3: cpc supported
+	*/
+	   FD_TIMER_DURATION_INVALID,   //t0: screen off, NW R8 FD off
+	   FD_TIMER_DURATION_INVALID,   //t1: screen on, NW R8 FD off
+	   FD_TIMER_DURATION_INVALID,   //t2: screen off, NW R8 FD on
+	   FD_TIMER_DURATION_INVALID    //t3: screen on, NW R8 FD on
+	}
+#ifdef __GEMINI__
+	,
+    {
+	   FD_TIMER_DURATION_INVALID,   //t0: screen off, NW R8 FD off
+	   FD_TIMER_DURATION_INVALID,   //t1: screen on, NW R8 FD off
+	   FD_TIMER_DURATION_INVALID,   //t2: screen off, NW R8 FD on
+	   FD_TIMER_DURATION_INVALID    //t3: screen on, NW R8 FD on
+	}
+#if (GEMINI_PLUS >= 3)
+	,
+    {
+	   FD_TIMER_DURATION_INVALID,   //t0: screen off, NW R8 FD off
+	   FD_TIMER_DURATION_INVALID,   //t1: screen on, NW R8 FD off
+	   FD_TIMER_DURATION_INVALID,   //t2: screen off, NW R8 FD on
+	   FD_TIMER_DURATION_INVALID    //t3: screen on, NW R8 FD on
+	}
+#if (GEMINI_PLUS >= 4)
+	,
+    {
+	   FD_TIMER_DURATION_INVALID,   //t0: screen off, NW R8 FD off
+	   FD_TIMER_DURATION_INVALID,   //t1: screen on, NW R8 FD off
+	   FD_TIMER_DURATION_INVALID,   //t2: screen off, NW R8 FD on
+	   FD_TIMER_DURATION_INVALID    //t3: screen on, NW R8 FD on
+	}
+#endif /* GEMINI_PLUS >= 4 */
+#endif /* GEMINI_PLUS >= 3 */
+#endif /* __GEMINI__ */
+};
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_get_fd_monitor_slot()
+* DESCRIPTION
+* 
+* PARAMETERS
+*	none
+* RETURNS
+*	kal_uint8
+*****************************************************************************/
+kal_uint8 custom_get_fd_monitor_slot(void)
+{
+   return FD_MONITOR_SLOT;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_get_fd_timer_id()
+* DESCRIPTION
+*   	This function is used to return the timer ID according to input 
+*   parameters
+* PARAMETERS
+*	conditions
+* RETURNS
+*	Timer ID
+*****************************************************************************/
+kal_uint8 custom_get_fd_timer_id(kal_bool is_screen_on, kal_bool is_r8_fd_support, kal_bool is_cpc_suppot)
+{
+    kal_uint8 timer_id;
+
+    timer_id = (is_r8_fd_support == KAL_TRUE)? 1 : 0;
+    timer_id <<= 1;
+    timer_id |= (is_screen_on == KAL_TRUE)? 1 : 0;
+
+    return timer_id;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_set_fd_timer()
+* DESCRIPTION
+*   	This function is used to define time duration of Fast Dormancy to monitor
+*   PS data transfer. The unit is 0.1 sec. 
+*   Current default value is 40 sec (i.e. 400 x 0.1 sec)
+* PARAMETERS
+*	none
+* RETURNS
+*	time duration of handling ath for dialup
+*****************************************************************************/
+kal_bool custom_set_fd_timer(kal_uint8 timer_id, kal_uint16 timer_value, kal_uint8 ps_id)
+{
+    if ((ps_id < MAX_SIM_NUM) &&
+	    (timer_id < MAX_SUPPORTED_FD_TIMER_ID))
+    {
+        fd_timer[ps_id][timer_id] = timer_value;
+        return KAL_TRUE;
+    }
+    else
+    {
+        return KAL_FALSE;
+    }
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_get_fd_timer()
+* DESCRIPTION
+*   	This function is used to return the time duration of Fast Dormancy to monitor
+*   PS data transfer. The unit is 0.1 sec.
+* PARAMETERS
+*	none
+* RETURNS
+*	time duration of fast dormancy
+*****************************************************************************/
+kal_uint16 custom_get_fd_timer(kal_uint8 timer_id, kal_uint8 ps_id)
+{
+    /* ALPS05508066 customer require priority AT+EFD > SBP data setting > default */
+    if ((ps_id < MAX_SIM_NUM) &&
+	    (timer_id < MAX_SUPPORTED_FD_TIMER_ID))
+    {
+		if (fd_timer[ps_id][timer_id] != FD_TIMER_DURATION_INVALID)
+		{
+            return fd_timer[ps_id][timer_id];
+		}
+		else
+		{
+			switch (timer_id)
+			{
+				case 0:
+				    return (kal_uint16) sbp_query_md_feature_data_by_ps(SBP_LEGACY_FD_TIMER_SCRN_OFF, ps_id);
+				case 1:
+				    return (kal_uint16) sbp_query_md_feature_data_by_ps(SBP_LEGACY_FD_TIMER_SCRN_ON, ps_id);
+				case 2:
+				    return (kal_uint16) sbp_query_md_feature_data_by_ps(SBP_R8_FD_TIMER_SCRN_OFF, ps_id);
+				case 3:
+				    return (kal_uint16) sbp_query_md_feature_data_by_ps(SBP_R8_FD_TIMER_SCRN_ON, ps_id);
+				default:
+				    return FD_TIMER_DURATION_INVALID;
+			}
+		}
+    }
+    else
+    {
+		return FD_TIMER_DURATION_INVALID;
+    }
+}
+#endif /* defined(__NO_PSDATA_SEND_SCRI__) || defined(__FAST_DORMANCY__) */
+
+/*
+ *  Table reconfig_mod_info_tbl is used to define the attribute of each module.
+ *  It can define the module which want to regist the dynamic reconfigure procedure in 1st column.
+ *  It can define the SAP which is used for ILM sending. (In 2nd column)
+ *  It can define the refingure mode that the module is interested. (In 3rd column) 
+ *     Note it's defined as bit-MAP such that it can define multiple modes.
+ *  It can define the gemini module type which will automatically send to MOD_XXX_n, n= 1, 2, 3...
+ */
+reconfigure_module_info_struct reconfig_mod_info_tbl[] = 
+                    {
+                        {MOD_TCM,    L4C_ME_SAP,     RECONFIG_SIM_SWITCH,  CFG_GEMINI_MOD, NULL},
+                        {MOD_MM,     L4C_ME_SAP,     RECONFIG_SIM_SWITCH,  CFG_GEMINI_MOD, NULL},
+                        {MOD_NWSEL,  L4C_ME_SAP,     RECONFIG_SIM_SWITCH,  CFG_GEMINI_MOD, NULL},
+                        {MOD_SIM,    L4C_ME_SAP,     RECONFIG_SIM_SWITCH,  CFG_GEMINI_MOD, NULL},
+                        {MOD_D2PM,   L4C_ME_SAP,     RECONFIG_SIM_SWITCH,  CFG_GEMINI_MOD, NULL},
+                        {MOD_PHB,   L4C_ME_SAP,     RECONFIG_SIM_SWITCH,  CFG_GEMINI_MOD, NULL},
+                        {MOD_RAC,    RAC_L4C_SAP,    RECONFIG_SIM_SWITCH,  CFG_GEMINI_MOD, NULL},
+                        {MOD_SMSAL,  SMSAL_L4C_SAP,  RECONFIG_SIM_SWITCH,  CFG_GEMINI_MOD, NULL},	
+#ifdef __IMS_SUPPORT__
+#ifdef __MULTIPLE_IMS_SUPPORT__                        
+                        {MOD_IMC,    L4C_ME_SAP,     RECONFIG_SIM_SWITCH,  CFG_GEMINI_MOD, NULL},
+#endif /* __MULTIPLE_IMS_SUPPORT__ */
+#endif
+                        {MOD_MBMSAL, L4C_ME_SAP,     RECONFIG_SIM_SWITCH,  CFG_GEMINI_LTE_MOD, NULL},
+                        {MOD_EVAL,   L4C_ME_SAP,     RECONFIG_SIM_SWITCH,  CFG_GEMINI_LTE_MOD, NULL},
+                        {MOD_L4BSAT, L4C_ME_SAP,     RECONFIG_SIM_SWITCH,  CFG_GEMINI_MOD, NULL},
+                        {MOD_CSM,    L4C_ME_SAP,    RECONFIG_SIM_SWITCH,  CFG_GEMINI_MOD, NULL},
+
+                        // put L4C in the last one
+                        {MOD_L4C,    L4C_ME_SAP,    RECONFIG_SIM_SWITCH,  CFG_GEMINI_MOD, NULL},
+                    };
+
+
+reconfigure_module_info_struct *custom_get_reconfig_mod()
+{
+    return reconfig_mod_info_tbl;
+}
+
+kal_uint8 custom_get_num_of_reconfig_mod()
+{
+    return sizeof(reconfig_mod_info_tbl)/sizeof(reconfig_mod_info_tbl[0]);
+}
+
+// The module(s) in L4 task which need to be notified by L4BPWR of the AP core status
+static const l4bpwr_module_info_struct l4bpwr_ap_core_status_notification_module_tbl[] =
+{
+    {MOD_L4BNW, MAX_SIM_NUM},
+};
+
+const l4bpwr_module_info_struct *l4bpwr_get_ap_core_status_notification_mod_table()
+{
+    return l4bpwr_ap_core_status_notification_module_tbl;
+}
+
+kal_uint8 l4bpwr_ap_core_status_notification_mod_table_size()
+{
+    return sizeof(l4bpwr_ap_core_status_notification_module_tbl)/sizeof(l4bpwr_module_info_struct);
+}
+
+#if defined(__GEMINI__)&& defined(__SIM_ME_LOCK__)
+void custom_update_invalid_sim_ability_by_rule(sim_interface_enum target_sim_protocol)
+{
+    sml_lock_sub_rule_enum sub_rule = sml_query_linksml_invalid_sim_rule();
+
+    if (sub_rule == SML_LOCK_SUB_RULE_LS_FULL_SERVICE)
+    {
+        sml_update_legal_service(SML_RULE_FULL_SERVICE, SML_STATUS_SIM_INVALID, target_sim_protocol);
+    }
+    else if (sub_rule == SML_LOCK_SUB_RULE_LS_CS_ONLY_SERVICE)
+    {
+        sml_update_legal_service(SML_RULE_CS_ONLY_SERVICE, SML_STATUS_SIM_INVALID, target_sim_protocol);
+    }
+    else if (sub_rule == SML_LOCK_SUB_RULE_LS_VOICE_ONLY_SERVICE)
+    {
+        sml_update_legal_service(SML_RULE_VOICE_ONLY_SERVICE, SML_STATUS_SIM_INVALID, target_sim_protocol);
+    }
+
+    sml_lock_rule_and_status_update_ind(target_sim_protocol);
+}
+
+link_sml_check_enum custom_ckeck_is_valid_sim_exist_by_rule(kal_uint8 updated_sim_slot)
+{
+    kal_uint8 i;
+    kal_uint8 target_sim_protocol;
+    sml_lock_rule_enum lock_rule = sml_query_sml_lock_rule();
+    link_sml_check_enum checking_rule = LINK_SML_CHECK_NO_VALID_SIM_EXIST;
+
+    if ((lock_rule == SML_LOCK_RULE_LINK_LOCK_BY_ALL_SIM_SLOT) || 
+        (lock_rule == SML_LOCK_RULE_LINK_LOCK_BY_ALL_SIM_SLOT_SRVLCK) ||
+        (lock_rule == SML_LOCK_RULE_LINK_LOCK_RJIO_LOCK))
+    {
+        /* check all slot to find any valid SIM */
+        for (i = 0; i < MAX_SIM_NUM; i++)
+        {
+            if (i != updated_sim_slot)
+            {
+                target_sim_protocol = l4c_gemini_get_switched_sim_id(i);
+                
+                if (l4c_check_protocol_supported(target_sim_protocol) == KAL_FALSE)
+                { 
+                    kal_prompt_trace(kal_get_active_module_id(),
+                         "[LINK_SML] PS_%d is Not Supported", 
+                         target_sim_protocol);
+                         
+                    continue;
+                }
+
+                if (sml_query_legal_service(target_sim_protocol) == SML_RULE_FULL_SERVICE)
+                {
+                    /* Valid SIM detected, return and update current card to valid SIM */
+                    checking_rule = LINK_SML_CHECK_VALID_SIM_EXIST;
+                    break;
+                }
+                else if (sml_query_legal_service(target_sim_protocol) == SML_RULE_UNKNOWN)
+                {
+                    /* this slot is still waiting verification result,
+                       return and update current card to BUSY */
+                    checking_rule = LINK_SML_CHECK_WAITING;
+                    break;
+                }
+                else if (sml_query_legal_service(target_sim_protocol) == SML_RULE_ECC_ONLY_SERVICE)
+                {
+                    checking_rule = LINK_SML_CHECK_ALL_SIM_LOCKED;
+                    break;
+                }
+            }
+        }
+    }
+    else if (lock_rule == SML_LOCK_RULE_LINK_LOCK_BY_SIM1_SLOT)
+    {
+        target_sim_protocol = l4c_gemini_get_switched_sim_id(SIM1);
+
+        if (SIM1 == updated_sim_slot)
+        {
+            /* SIM1 slot take control but Invalid SIM inserted,
+               change all SIM slot to Invalid SIM */
+            checking_rule = LINK_SML_CHECK_ALL_SIM_LOCKED;
+        }
+        /* current SIM is not in SIM1 slot */
+        else if (l4c_check_protocol_supported(target_sim_protocol) == KAL_FALSE)
+        { 
+            kal_prompt_trace(kal_get_active_module_id(),
+                         "[LINK_SML] PS_%d is Not Supported", 
+                         target_sim_protocol);
+                         
+            checking_rule = LINK_SML_CHECK_NO_VALID_SIM_EXIST;
+        }
+        else if (sml_query_legal_service(target_sim_protocol) == SML_RULE_FULL_SERVICE)
+        {
+            /* SIM1 slot inserted valid SIM, return and update current card to valid SIM */
+            checking_rule = LINK_SML_CHECK_VALID_SIM_EXIST;
+        }
+        else if (sml_query_legal_service(target_sim_protocol) == SML_RULE_UNKNOWN)
+        {
+            /* SIM1 slot is still waiting verification result,
+               return and update current card to BUSY */
+            checking_rule = LINK_SML_CHECK_WAITING;
+        }
+    }
+    else if (lock_rule == SML_LOCK_RULE_LINK_LOCK_BY_SIM2_SLOT)
+    {
+        target_sim_protocol = l4c_gemini_get_switched_sim_id(SIM2);
+
+        if (SIM2 == updated_sim_slot)
+        {
+            /* SIM2 slot take control but Invalid SIM inserted,
+               change all SIM slot to Invalid SIM */
+            checking_rule = LINK_SML_CHECK_ALL_SIM_LOCKED;
+        }
+        /* current SIM is not in SIM2 slot */
+        else if (l4c_check_protocol_supported(target_sim_protocol) == KAL_FALSE)
+        { 
+            kal_prompt_trace(kal_get_active_module_id(),
+                         "[LINK_SML] PS_%d is Not Supported", 
+                         target_sim_protocol);
+                         
+            checking_rule = LINK_SML_CHECK_NO_VALID_SIM_EXIST;
+        }
+        else if (sml_query_legal_service(target_sim_protocol) == SML_RULE_FULL_SERVICE)
+        {
+            /* SIM2 slot inserted valid SIM, return and update current card to valid SIM */
+            checking_rule = LINK_SML_CHECK_VALID_SIM_EXIST;
+        }
+        else if (sml_query_legal_service(target_sim_protocol) == SML_RULE_UNKNOWN)
+        {
+            /* SIM2 slot is still waiting verification result,
+               return and update current card to BUSY */
+            checking_rule = LINK_SML_CHECK_WAITING;
+        }
+    }
+    else if (lock_rule == SML_LOCK_RULE_LINK_LOCK_BY_ALL_SIM_SLOT_REVERSE)
+    {
+        /* check all slot to find any valid SIM */
+        for (i = 0; i < MAX_SIM_NUM; i++)
+        {
+            if (i != updated_sim_slot)
+            {
+                target_sim_protocol = l4c_gemini_get_switched_sim_id(i);
+                
+                if (l4c_check_protocol_supported(target_sim_protocol) == KAL_FALSE)
+                { 
+                    kal_prompt_trace(kal_get_active_module_id(),
+                         "[LINK_SML] PS_%d is Not Supported", 
+                         target_sim_protocol);
+                         
+                    continue;
+                }
+
+                if (sml_query_legal_service(target_sim_protocol) == SML_RULE_FULL_SERVICE)
+                {
+                    /* Valid SIM detected, return and update current card to valid SIM */
+                    kal_prompt_trace(kal_get_active_module_id(),
+                                     "[LINK_SML] SIM%d(Slot%d) is Valid SIM", 
+                                     target_sim_protocol, 
+                                     i);
+
+                    return LINK_SML_CHECK_ALL_SIM_LOCKED;
+                }
+                else if (sml_query_legal_service(target_sim_protocol) == SML_RULE_UNKNOWN)
+                {
+                    /* this slot is still waiting verification result,
+                       return and update current card to BUSY */
+                    kal_prompt_trace(kal_get_active_module_id(),
+                                     "[LINK_SML] SIM%d(Slot%d) is still BUSY", 
+                                     target_sim_protocol, 
+                                     i);
+                    return LINK_SML_CHECK_NO_VALID_SIM_EXIST;
+                }
+            }
+        }
+    }
+
+    /* Print current SIM lock info */
+    if (LINK_SML_CHECK_ALL_SIM_LOCKED == checking_rule)
+    {
+        kal_prompt_trace(kal_get_active_module_id(),
+                         "[LINK_SML] All locked, control-SIM at PS_%d(Slot%d) is Invalid SIM", 
+                         target_sim_protocol,
+                         l4c_gemini_get_actual_sim_id(target_sim_protocol));        
+    }
+    else if (LINK_SML_CHECK_WAITING == checking_rule)
+    {
+        kal_prompt_trace(kal_get_active_module_id(),
+                         "[LINK_SML] Waiting, control-SIM at PS_%d(Slot%d) is still BUSY", 
+                         target_sim_protocol,
+                         l4c_gemini_get_actual_sim_id(target_sim_protocol));
+    }
+    else if (LINK_SML_CHECK_VALID_SIM_EXIST == checking_rule)
+    {
+        kal_prompt_trace(kal_get_active_module_id(),
+                         "[LINK_SML] Unlocked, control-SIM at PS_%d(Slot%d) is Valid SIM", 
+                         target_sim_protocol, 
+                         l4c_gemini_get_actual_sim_id(target_sim_protocol));        
+    }
+    else // LINK_SML_CHECK_NO_VALID_SIM_EXIST
+    {
+        kal_prompt_trace(kal_get_active_module_id(),
+                         "[LINK_SML] No Valid SIM detected!!");
+    }
+
+    return checking_rule;
+}
+
+kal_bool custom_check_link_sml_legal_sim_rule(kal_uint8 updated_sim_slot)
+{  
+    sml_lock_rule_enum lock_rule = sml_query_sml_lock_rule();
+
+    if ((lock_rule == SML_LOCK_RULE_LINK_LOCK_BY_ALL_SIM_SLOT) ||
+        (lock_rule == SML_LOCK_RULE_LINK_LOCK_BY_ALL_SIM_SLOT_REVERSE) ||
+        (lock_rule == SML_LOCK_RULE_LINK_LOCK_BY_ALL_SIM_SLOT_SRVLCK))
+    {
+        return KAL_TRUE;
+    }
+    else if (lock_rule == SML_LOCK_RULE_LINK_LOCK_BY_SIM1_SLOT)
+    {
+        if (updated_sim_slot == SIM1)
+        {
+            return KAL_TRUE;
+        }
+    }
+    else if (lock_rule == SML_LOCK_RULE_LINK_LOCK_BY_SIM2_SLOT)
+    {
+        if (updated_sim_slot == SIM2)
+        {
+            return KAL_TRUE;
+        }
+    }
+    else if (lock_rule == SML_LOCK_RULE_LINK_LOCK_RJIO_LOCK)
+    {
+        if (l4c_check_cur_protocol_cap_with_gmss_mode(L4C_CAP_LTE) == KAL_TRUE)
+        {
+            return KAL_TRUE;
+        }
+    }
+
+    return KAL_FALSE;
+}
+
+kal_bool custom_check_link_sml_not_legal_sim_rule(kal_uint8 updated_sim_slot)
+{
+    kal_bool ret_val = KAL_FALSE;
+    sml_lock_rule_enum lock_rule = sml_query_sml_lock_rule();
+
+    switch (lock_rule)
+    {
+        case SML_LOCK_RULE_LINK_LOCK_BY_SIM1_SLOT:
+        {
+            if (updated_sim_slot == SIM2)
+            {
+                ret_val = KAL_TRUE;
+            }
+            break;
+        }
+        case SML_LOCK_RULE_LINK_LOCK_BY_SIM2_SLOT:
+        {
+            if (updated_sim_slot == SIM1)
+            {
+                ret_val = KAL_TRUE;
+            }
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return ret_val;
+}
+
+kal_bool custom_check_link_sml_control_slot_sml_sim_status(sml_state_is_valid_sim_enum *control_slot_sml_sim_status)
+{
+    kal_bool ret_val = KAL_FALSE;
+    kal_uint8 simInterface;
+    sml_lock_rule_enum lock_rule = sml_query_sml_lock_rule();
+
+    switch (lock_rule)
+    {
+        case SML_LOCK_RULE_LINK_LOCK_BY_SIM1_SLOT:
+        {
+            simInterface = l4c_gemini_get_switched_sim_id(SIM1);
+            *control_slot_sml_sim_status = sml_query_sml_sim_state(simInterface);
+            ret_val = KAL_TRUE;
+            break;
+        }
+        case SML_LOCK_RULE_LINK_LOCK_BY_SIM2_SLOT:
+        {
+            simInterface = l4c_gemini_get_switched_sim_id(SIM2);
+            *control_slot_sml_sim_status = sml_query_sml_sim_state(simInterface);
+            ret_val = KAL_TRUE;
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return ret_val;
+}
+
+kal_bool custom_link_sml_with_rule(kal_uint8 updated_sim_slot,
+                                   smu_pending_password_id_enum updated_type,
+                                   smu_pending_password_id_enum *pending_password_tbl,
+                                   link_sml_valid_sim_enum *real_sim_verify_state_tbl,
+                                   kal_uint8 *need_unlock_table)
+{
+    kal_bool need_unlock = KAL_FALSE;
+    kal_uint8 updated_sim_protocol = l4c_gemini_get_switched_sim_id(updated_sim_slot);
+    kal_uint8 target_sim_protocol = 0;
+    kal_uint8 sml_lock_rule = sml_query_sml_lock_rule();
+
+    switch (updated_type)
+    {
+        case ID_READY:
+        {
+            if (KAL_TRUE == custom_check_link_sml_legal_sim_rule(updated_sim_slot))
+            {
+                kal_uint8 i;
+
+                /* unlock all SIM if Current SIM is valid */
+                for (i = 0; i < MAX_SIM_NUM; i++)
+                {
+                    if ((pending_password_tbl[i] == ID_PH_FSIM_PIN) || 
+                        (pending_password_tbl[i] == ID_PH_NET_PIN) ||
+                        (pending_password_tbl[i] == ID_PH_NETSUB_PIN) ||
+                        (pending_password_tbl[i] == ID_PH_SP_PIN) ||
+                        (pending_password_tbl[i] == ID_PH_CORP_PIN) ||
+                        (pending_password_tbl[i] == ID_PH_LINK_NS_SP_PIN) ||
+                        (pending_password_tbl[i] == ID_PH_LINK_SIM_C_PIN) ||
+                        (pending_password_tbl[i] == ID_SIM_BUSY))
+                    {
+                        if (i != updated_sim_slot)
+                        {
+                            if ((sml_query_sml_lock_rule() == SML_LOCK_RULE_LINK_LOCK_BY_ALL_SIM_SLOT_REVERSE) &&
+                                (pending_password_tbl[i] != ID_SIM_BUSY))
+                            {
+                                // Invalid SIM detected, transfer valid SIM to invalid SIM
+                                // Note: SIM_BUSY means card is un-verified, doesn't mean invalid, so exclude it
+                                kal_prompt_trace(kal_get_active_module_id(),
+                                         "[LINK_SML] pending_password_tbl[%d] = %d", i, pending_password_tbl[i]);
+                                sml_update_legal_service(SML_RULE_ECC_ONLY_SERVICE, SML_STATUS_SIM_VALID, updated_sim_protocol);
+                                sml_lock_rule_and_status_update_ind(updated_sim_protocol);
+                                pending_password_tbl[updated_sim_slot] = ID_PH_NET_PIN;  // for Req8, always report ID_PH_NET_PIN if valid SIM locked
+                                real_sim_verify_state_tbl[updated_sim_slot] = LINK_SML_VALID_TO_INVLAID_SIM;
+
+                                need_unlock_table[updated_sim_slot] = 2;
+                                need_unlock = KAL_TRUE;
+
+                                return need_unlock;
+                            }
+                            else if ((KAL_TRUE == custom_sml_is_nonctrlslot_allow_sml_check()) &&
+                                     (KAL_TRUE == custom_check_link_sml_not_legal_sim_rule(i)) &&
+                                     (real_sim_verify_state_tbl[i] == LINK_SML_VALID_TO_INVLAID_SIM))
+                            {
+                                target_sim_protocol = l4c_gemini_get_switched_sim_id(i);
+                                sml_update_legal_service(SML_RULE_FULL_SERVICE, SML_STATUS_SIM_VALID, target_sim_protocol);
+                                sml_lock_rule_and_status_update_ind(target_sim_protocol);
+                                pending_password_tbl[i] = ID_READY;
+                                need_unlock_table[i] = 1;
+                                need_unlock = KAL_TRUE;
+                            }
+                            else
+                            {
+                                target_sim_protocol = l4c_gemini_get_switched_sim_id(i);
+                                custom_update_invalid_sim_ability_by_rule(target_sim_protocol);
+                                real_sim_verify_state_tbl[i] = LINK_SML_INVALID_TO_VALID_SIM;
+                                pending_password_tbl[i] = ID_READY;
+                                need_unlock_table[i] = 1;
+                                need_unlock = KAL_TRUE;
+                            }
+                        }
+                    }
+                }
+            }
+            else if ((KAL_FALSE == custom_sml_is_nonctrlslot_always_lock_check()) &&
+                     (KAL_TRUE == sml_check_ctrlslot_if_all_cat_unlock_state(sml_lock_rule)))
+            {
+                /* Allow non control SIM to verify to VALID SIM if no lock present in
+                   Control SIM
+                */
+            }
+            else if ((KAL_TRUE == custom_sml_is_nonctrlslot_allow_sml_check()) &&
+                     (KAL_TRUE == custom_check_link_sml_not_legal_sim_rule(updated_sim_slot)))
+            {
+                sml_state_is_valid_sim_enum control_slot_sml_sim_status;
+
+                if (KAL_TRUE == l4c_check_is_sml_verify_action(updated_sim_protocol))
+                {
+                    real_sim_verify_state_tbl[updated_sim_slot] = LINK_SML_VALID_SIM;
+                    sml_update_legal_service(SML_RULE_FULL_SERVICE, SML_STATUS_SIM_VALID, updated_sim_protocol);
+                    sml_lock_rule_and_status_update_ind(updated_sim_protocol);
+                    pending_password_tbl[updated_sim_slot] = ID_READY;
+                    break;
+                }
+
+                if (KAL_FALSE == custom_check_link_sml_control_slot_sml_sim_status(&control_slot_sml_sim_status))
+                {
+                    break;
+                }
+
+                switch (control_slot_sml_sim_status)
+                {
+                    case SML_STATUS_SIM_UNKNOWN:
+                    case SML_STATUS_SIM_ABSENT:
+                    case SML_STATUS_SIM_INVALID:
+                    {
+                        real_sim_verify_state_tbl[updated_sim_slot] = LINK_SML_VALID_TO_INVLAID_SIM;
+                        sml_update_legal_service(SML_RULE_ECC_ONLY_SERVICE, SML_STATUS_SIM_VALID, updated_sim_protocol);
+                        sml_lock_rule_and_status_update_ind(updated_sim_protocol);
+                        pending_password_tbl[updated_sim_slot] = ID_SIM_BUSY;
+                        need_unlock_table[updated_sim_slot] = 2;
+                        need_unlock = KAL_TRUE;
+                        break;
+                    }
+                    case SML_STATUS_SIM_VALID:
+                    {
+                        real_sim_verify_state_tbl[updated_sim_slot] = LINK_SML_VALID_TO_INVLAID_SIM;
+                        sml_update_legal_service(SML_RULE_FULL_SERVICE, SML_STATUS_SIM_VALID, updated_sim_protocol);
+                        sml_lock_rule_and_status_update_ind(updated_sim_protocol);
+                        pending_password_tbl[updated_sim_slot] = ID_READY;
+                        break;
+                    }
+                    default:
+                    {
+                        break;
+                    }
+                }
+
+                break;
+            }
+
+            sml_update_legal_service(SML_RULE_FULL_SERVICE, SML_STATUS_SIM_VALID, updated_sim_protocol);
+            sml_lock_rule_and_status_update_ind(updated_sim_protocol);
+            pending_password_tbl[updated_sim_slot] = ID_READY;
+            real_sim_verify_state_tbl[updated_sim_slot] = LINK_SML_VALID_SIM;
+
+            break;
+        }
+
+        case ID_PH_FSIM_PIN:
+        case ID_PH_NET_PIN:
+        case ID_PH_NETSUB_PIN:
+        case ID_PH_SP_PIN:
+        case ID_PH_CORP_PIN:
+        case ID_PH_LINK_NS_SP_PIN:
+        case ID_PH_LINK_SIM_C_PIN:
+
+        case ID_SIM_BLOCKED:
+        {
+            kal_uint8 i;
+            link_sml_check_enum linklock_state;
+
+            // Check for blocked cases : SIM not inserted / SIM start error / SIM blocked
+            if (updated_type == ID_SIM_BLOCKED)
+            {
+                pending_password_tbl[updated_sim_slot] = updated_type;
+
+            #ifdef __GEMINI__
+                if (is_sim_inserted(updated_sim_protocol) == SMU_SIM_INSERTED)
+            #else
+                if (is_sim_inserted() == SMU_SIM_INSERTED)
+            #endif
+                {
+                    // SIM presents, but blocked => seen as invalid SIM
+                }
+                else
+                {
+                    // SIM doesn't present / startup error => seen as no SIM
+                    // But need to update other SIM's status if all of them have been ready
+
+                    for (i = 0; i < MAX_SIM_NUM; i++)
+                    {
+                        if ((i != updated_sim_slot) && (pending_password_tbl[i] == ID_UNKNOWN))
+                        {
+                            // Unknown SIM presents, don't need to update SIM's status
+                            break;
+                        }
+                    }
+
+                    // Check if all SIM updated
+                    // If yes, update SIM service status for other protocols
+                    if (i == MAX_SIM_NUM)
+                    {
+                        kal_prompt_trace(kal_get_active_module_id(),
+                                         "[LINK_SML] All SIM checked but no Valid SIM detected!! Update all invalid slot to ECC Only policy");
+
+                        for (i = 0; i < MAX_SIM_NUM; i++)
+                        {
+                            target_sim_protocol = l4c_gemini_get_switched_sim_id(i);
+
+                            if (i == updated_sim_slot)  // Skip myself, update later
+                                continue;
+
+                            if (pending_password_tbl[i] == ID_SIM_BUSY)
+                            {
+                                pending_password_tbl[i] = l4csmu_get_pending_password_id_ext(target_sim_protocol);
+
+                                sml_update_legal_service(SML_RULE_ECC_ONLY_SERVICE, SML_STATUS_SIM_INVALID, target_sim_protocol);
+                                sml_lock_rule_and_status_update_ind(target_sim_protocol);
+                            }
+                        }
+                    }
+
+                    // Update service status for current protocol (updated_sim_protocol)
+                    sml_update_legal_service(SML_RULE_NO_SERVICE, SML_STATUS_SIM_ABSENT, updated_sim_protocol);
+                    sml_lock_rule_and_status_update_ind(updated_sim_protocol);
+
+                    return KAL_FALSE;
+                }
+            }
+
+
+            if (!((KAL_TRUE == custom_sml_is_nonctrlslot_allow_sml_check()) &&
+                  (KAL_TRUE == custom_check_link_sml_not_legal_sim_rule(updated_sim_slot)) &&
+                  (real_sim_verify_state_tbl[updated_sim_slot] == LINK_SML_VALID_TO_INVLAID_SIM)))
+            {
+                real_sim_verify_state_tbl[updated_sim_slot] = LINK_SML_INVALID_SIM;
+            }
+
+            linklock_state = custom_ckeck_is_valid_sim_exist_by_rule(updated_sim_slot);
+
+            if (linklock_state == LINK_SML_CHECK_VALID_SIM_EXIST)
+            {
+                custom_update_invalid_sim_ability_by_rule(updated_sim_protocol);
+                sml_lock_rule_and_status_update_ind(updated_sim_protocol);
+
+                real_sim_verify_state_tbl[updated_sim_slot] = LINK_SML_INVALID_TO_VALID_SIM;
+
+                need_unlock = KAL_TRUE;
+                need_unlock_table[updated_sim_slot] = 1;
+                pending_password_tbl[updated_sim_slot] = ID_READY;
+            }
+            else if (linklock_state == LINK_SML_CHECK_WAITING)
+            {
+                kal_bool is_all_sim_busy = KAL_TRUE;
+
+                pending_password_tbl[updated_sim_slot] = ID_SIM_BUSY;
+
+                for (i = 0; i < MAX_SIM_NUM; i++)
+                {
+                    if (pending_password_tbl[i] != ID_SIM_BUSY)
+                    {
+                        is_all_sim_busy = KAL_FALSE;
+                    }
+                }
+
+                if (is_all_sim_busy == KAL_TRUE)
+                {
+                    kal_prompt_trace(kal_get_active_module_id(),
+                                     "[LINK_SML] All SIM checked bu no Valid SIM detected!! Update all slot to ECC Only policy");
+
+                    for (i = 0; i < MAX_SIM_NUM; i++)
+                    {
+                        pending_password_tbl[i] = l4csmu_get_pending_password_id_ext(l4c_gemini_get_switched_sim_id(i));
+
+                        sml_update_legal_service(SML_RULE_ECC_ONLY_SERVICE, SML_STATUS_SIM_INVALID, l4c_gemini_get_switched_sim_id(i));
+                        sml_lock_rule_and_status_update_ind(l4c_gemini_get_switched_sim_id(i));
+                    }
+                }
+                else
+                {
+                    kal_prompt_trace(kal_get_active_module_id(),
+                                     "[LINK_SML] Still need to waiting other slot's result");
+                }
+            }
+            else if (linklock_state == LINK_SML_CHECK_ALL_SIM_LOCKED)
+            {
+                /* Update the same Lock status for all SIM slot */
+                kal_prompt_trace(kal_get_active_module_id(),
+                                 "[LINK_SML] Control slot inserted Invalid SIM!! Update all slot to ECC Only policy");
+
+                for (i = 0; i < MAX_SIM_NUM; i++)
+                {
+                    if ((pending_password_tbl[i] == ID_UNKNOWN) && (i != updated_sim_slot))
+                        continue;   //Let Unkonwn card update by itself while it becomes "known" card
+
+                    pending_password_tbl[i] = updated_type;
+
+                    if (real_sim_verify_state_tbl[i] == LINK_SML_VALID_SIM)
+                    {
+                        if ((KAL_TRUE == custom_sml_is_nonctrlslot_allow_sml_check()) &&
+                            (KAL_TRUE == custom_check_link_sml_not_legal_sim_rule(i)))
+                        {
+                             continue;
+                        }
+                        // downgrade valid SIM to SUPER LOCKED state
+                        real_sim_verify_state_tbl[i] = LINK_SML_VALID_TO_INVLAID_SIM;
+                        need_unlock_table[i] = 2;
+                        need_unlock = KAL_TRUE;
+                    }
+
+                    sml_update_legal_service(SML_RULE_ECC_ONLY_SERVICE, SML_STATUS_SIM_INVALID, l4c_gemini_get_switched_sim_id(i));
+                    sml_lock_rule_and_status_update_ind(l4c_gemini_get_switched_sim_id(i));
+                }
+            }
+            else if (linklock_state == LINK_SML_CHECK_NO_VALID_SIM_EXIST)
+            {
+                sml_update_legal_service(SML_RULE_ECC_ONLY_SERVICE, SML_STATUS_SIM_INVALID, updated_sim_protocol);
+                sml_lock_rule_and_status_update_ind(updated_sim_protocol);
+
+                pending_password_tbl[updated_sim_slot] = updated_type;
+            }
+            else
+            {
+                // Warning
+            }
+            break;
+        }
+        default:
+            /* not change */
+            pending_password_tbl[updated_sim_slot] = updated_type;
+            break;
+    }
+
+    return need_unlock;
+}
+/*****************************************************************************
+* FUNCTION
+*   custom_l4c_root_lock_verify()
+*
+* DESCRIPTION
+*   This function is used to customiz link_SML. Each SIM ME Lock can depend
+*   on the status of other SIM. Please modify pending_password_tbl and 
+*   need_unlock_table according to the updated_sim and updated_type.
+*
+* PARAMETERS
+*   updated_sim_slot        [IN]        the updated SIM slot
+*   updated_type            [IN]        the pending password of the updated SIM
+*   pending_password_tbl    [IN/OUT]    the fake pending password table
+*   need_unlock_table       [OUT]       the flag of each modified SIM
+*
+* RETURNS
+*   whether the pending password of any SIM is change
+*****************************************************************************/
+kal_bool custom_l4c_root_lock_verify(kal_uint8 updated_sim_slot, 
+                                     smu_pending_password_id_enum updated_type, 
+                                     smu_pending_password_id_enum *pending_password_tbl,
+                                     link_sml_valid_sim_enum *real_sim_verify_state_tbl,
+                                     kal_uint8 *need_unlock_table)
+{
+    kal_bool need_unlock = KAL_FALSE;
+
+    if (sml_is_linksml_enabled() == KAL_TRUE)
+    {
+        kal_prompt_trace(kal_get_active_module_id(), "[LINK_SML] LINK SML Mode enabled");
+
+        /* LINK SML Rule */
+        need_unlock = custom_link_sml_with_rule(updated_sim_slot,
+                                                updated_type,
+                                                pending_password_tbl,
+                                                real_sim_verify_state_tbl,
+                                                need_unlock_table);
+    }
+    else
+    {
+#if defined(__TC01__) || defined(__LINK_SML__)
+        switch (updated_type)
+        {
+            case ID_READY:
+            {
+                if (updated_sim_slot == SIM1)
+                {
+                    kal_uint8 i;
+                    
+                    /* unlock all SIM if SIM1 is valid */
+                    for (i=1; i<MAX_SIM_NUM; i++)
+                    {
+                        if ((pending_password_tbl[i] == ID_PH_FSIM_PIN) || 
+                            (pending_password_tbl[i] == ID_PH_NET_PIN) ||
+                            (pending_password_tbl[i] == ID_PH_NETSUB_PIN) ||
+                            (pending_password_tbl[i] == ID_PH_SP_PIN) ||
+                            (pending_password_tbl[i] == ID_PH_CORP_PIN) ||
+                            (pending_password_tbl[i] == ID_PH_LINK_NS_SP_PIN) ||
+                            (pending_password_tbl[i] == ID_PH_LINK_SIM_C_PIN))
+                        {
+                            pending_password_tbl[i] = ID_READY;
+                            need_unlock_table[i] = 1;
+                            need_unlock = KAL_TRUE;
+                        }
+                    }
+                }
+                pending_password_tbl[updated_sim_slot] = updated_type;
+                break;
+            }
+            case ID_PH_FSIM_PIN:
+            case ID_PH_NET_PIN:
+            case ID_PH_NETSUB_PIN:
+            case ID_PH_SP_PIN:
+            case ID_PH_CORP_PIN:
+            case ID_PH_LINK_NS_SP_PIN:
+            case ID_PH_LINK_SIM_C_PIN:
+            {
+                /* SIM2~SIM3 SML locked but SIM1 is valid */
+                if (updated_sim_slot != SIM1)
+                {
+                    if (pending_password_tbl[SIM1] == ID_READY)
+                    {
+                        pending_password_tbl[updated_sim_slot] = ID_READY;
+                        need_unlock = KAL_TRUE;
+                        need_unlock_table[updated_sim_slot] = 1;
+                    }
+                    else if (pending_password_tbl[SIM1] == ID_SIM_BUSY)
+                    {
+                        //don't lock first, wait for sim1 result
+                        pending_password_tbl[updated_sim_slot] = ID_SIM_BUSY;
+                    }
+                    else
+                    {
+                        pending_password_tbl[updated_sim_slot] = updated_type;
+                    }
+                }
+                else //SIM1 locked
+                {
+                    pending_password_tbl[updated_sim_slot] = updated_type;
+                }
+                break;
+            }
+            default:
+                /* not change */
+                pending_password_tbl[updated_sim_slot] = updated_type;
+                break;
+        }
+    #else  /* __TC01__ || __LINK_SML__ */
+        /* default each SML is independent */
+        pending_password_tbl[updated_sim_slot] = updated_type;
+    #endif  /* __TC01__ || __LINK_SML__ */
+    }
+
+    return need_unlock;
+}
+#endif /* defined(__GEMINI__) && defined(__SIM_ME_LOCK__) */
+
+/*****************************************************************************
+* FUNCTION
+*   custom_l4c_fill_ecc_category()
+*
+* DESCRIPTION
+*   This function is used to turn on/off the ecc service category support
+*
+* PARAMETERS
+*   none
+*
+* RETURNS
+*   TRUE    : L4C will let MOD_PHB to approve the number and fill in the ecc category for ATDE
+*   FALSE   : L4C will not let MOD_PHB to approve the number and fill in the ecc category for ATDE
+*****************************************************************************/
+kal_bool custom_fill_ecc_category(void)
+{
+    /*default value : KAL_FALSE.
+    *   KAL_TRUE    : L4C will let MOD_PHB to approve the number and fill in the ecc category for ATDE
+    *   KAL_FALSE   : L4C will not let MOD_PHB to approve the number and fill in the ecc category for ATDE
+    */
+
+    return KAL_FALSE;
+
+}
+
+/*****************************************************************************************
+* FUNCTION
+*   custom_cm_ctrl_by_sim()
+*
+* DESCRIPTION
+*   this function is used to switch on/off call/sms/ss control by sim
+*
+* PARAMETERS
+*   module [IN] could be CC, SS or SMS
+* RETURNS
+*   KAL_TRUE : support conrtorl by SIM
+*   KAL_FALSE: not support control by SIM
+******************************************************************************************/
+kal_bool custom_cm_ctrl_by_sim(cm_ctrl_by_sim_enum module)
+{
+    switch (module)
+    {
+        case SMS_CTRL_BY_SIM:
+            return KAL_TRUE;
+
+        case CC_CTRL_BY_SIM:
+            return KAL_TRUE;
+
+        case SS_CTRL_BY_SIM:
+            return KAL_TRUE;
+
+        default:
+            return KAL_FALSE;
+    }
+}
+
+/*MAX num of SIM/PS supported is 4. So array[4] for guard timer*/
+kal_uint16 ims_guard_timer_period[] = {64,64,64,64};
+kal_uint16 ims_guard_timer_period_when_nr[] = {64,64,64,64};
+/*****************************************************************************
+* FUNCTION
+* custom_get_ims_reg_timeout_timer()
+* DESCRIPTION
+*
+* PARAMETERS
+*	ps_id
+* RETURNS
+*	kal_uint8
+*****************************************************************************/
+kal_uint16 custom_get_ims_reg_timeout_timer(kal_uint8 ps_id)
+{
+    //length in Seconds
+    return ims_guard_timer_period[ps_id];
+}
+
+/*****************************************************************************
+* FUNCTION
+* custom_get_ims_reg_timeout_timer_when_nr()
+* DESCRIPTION
+*
+* PARAMETERS
+*	ps_id
+* RETURNS
+*	kal_uint8
+*****************************************************************************/
+kal_uint16 custom_get_ims_reg_timeout_timer_when_nr(kal_uint8 ps_id)
+{
+    //length in Seconds
+    return ims_guard_timer_period_when_nr[ps_id];
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_set_ims_reg_timeout_timer()
+* DESCRIPTION
+*
+* PARAMETERS
+*	none
+* RETURNS
+*	kal_uint8
+*****************************************************************************/
+void custom_set_ims_reg_timeout_timer(kal_uint16 timeout_period, kal_uint8 ps_id)
+{
+    //length in Seconds
+    ims_guard_timer_period[ps_id] = timeout_period;
+}
+
+/*****************************************************************************
+* FUNCTION
+*    custom_config_ss_asn_1()
+* DESCRIPTION
+*     to configure the SS Facility Component ASN.1
+* PARAMETERS
+*    none
+* RETURNS
+*    0: 24.080(refer to Q.773)
+*    1: 34.123-3 annex.H
+*****************************************************************************/
+kal_uint8 custom_config_ss_asn_1(void)
+{
+    //0: 24.080(refer to Q.773)
+    //1: 34.123-3 annex.H
+    return 0;
+}
+
+//refer to the usage of AT+EREGCHK, default value is 0
+kal_uint8 eregchk_cs = 0;
+kal_uint8 eregchk_ps = 0;
+/*****************************************************************************
+* FUNCTION
+*     custom_set_eregchk_method()
+* DESCRIPTION
+*     for AT+EREGCHK to set the method
+* PARAMETERS
+*     
+* RETURNS
+*   
+*****************************************************************************/
+void custom_set_eregchk_method(kal_uint8 cs_method, kal_uint8 ps_method)
+{
+    eregchk_cs = cs_method;
+    eregchk_ps = ps_method;
+    return;
+}
+
+/*****************************************************************************
+* FUNCTION
+*     custom_get_eregchk_method()
+* DESCRIPTION
+*     get the setting of AT+EREGCHK
+* PARAMETERS
+*     
+* RETURNS
+*   
+*****************************************************************************/
+void custom_get_eregchk_method(kal_uint8 *cs_method, kal_uint8 *ps_method)
+{
+    *cs_method = eregchk_cs;
+    *ps_method = eregchk_ps;
+    return;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_cs_reg_state_change_check()
+* DESCRIPTION
+*     used for +CREG URC report,
+*     to check if the CREG state is changed or not according to AT+EREGCHK setting
+*
+* CREG state refer to 3GPP TS27.007:
+* <stat>: integer type; circuit mode registration status
+* 0 not registered, MT is not currently searching a new operator to register to
+* 1 registered, home network
+* 2 not registered, but MT is currently searching a new operator to register to
+* 3 registration denied
+* 4 unknown (e.g. out of GERAN/UTRAN/E-UTRAN coverage)
+* 5 registered, roaming
+* 6 registered for "SMS only", home network (applicable only when <AcT> indicates E-UTRAN)
+* 7 registered for "SMS only", roaming (applicable only when <AcT> indicates E-UTRAN)
+* 8 attached for emergency bearer services only (see NOTE 2) (not applicable)
+* 9 registered for "CSFB not preferred", home network (applicable only when <AcT> indicates E-UTRAN)
+* 10 registered for "CSFB not preferred", roaming (applicable only when <AcT> indicates E-UTRAN)
+*
+* PARAMETERS
+*     none
+* RETURNS
+*     KAL_TRUE : CREG state is treated as changed
+*     KAL_FALSE : CREG state is treated as not change
+*****************************************************************************/
+kal_bool custom_cs_reg_state_change_check(kal_uint8 state1, kal_uint8 state2)
+{
+    kal_bool ret_val;
+
+    if (state1 != state2)
+    {
+        ret_val = KAL_TRUE;//default setting
+
+        switch (eregchk_cs)
+        {
+        //customize the checking rule here
+            case 1: /*treat state 0 and 2 as the same,
+                                   *i.e. not to report +CREG URC while the CREG state is changing between 0 and 2*/
+            {
+                if ((state1 == 0 || state1 == 2)&&
+                    (state2 == 0 || state2 == 2))
+                {
+                    ret_val = KAL_FALSE;
+                }
+                break;
+            }
+            case 2: //only report URC if state changes between different groups: {0|2|3|4} {5|7|10} {1|6|8|9}
+            {
+                if ((state1 == 0 || state1 == 2 || state1 == 3 || state1 == 4)&&
+                    (state2 == 0 || state2 == 2 || state2 == 3 || state2 == 4))
+                {
+                    ret_val = KAL_FALSE;
+                }
+                else if ((state1 == 1 || state1 == 6 || state1 == 8 || state1 == 9)&&
+                         (state2 == 1 || state2 == 6 || state2 == 8 || state2 == 9))
+                {
+                    ret_val = KAL_FALSE;
+                }
+                else if ((state1 == 5 || state1 == 7 || state1 == 10)&&
+                         (state2 == 5 || state2 == 7 || state2 == 10))
+                {
+                    ret_val = KAL_FALSE;
+                }
+                break;
+            }
+            case 0:
+            default:
+                break;
+        }
+    }
+    else
+    {
+        ret_val = KAL_FALSE;
+    }
+
+    return ret_val;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_ps_reg_state_change_check()
+* DESCRIPTION
+*     used for +CGREG/+CEREG URC report,
+*     to check if the CGREG/CEREG state is changed or not according to AT+EREGCHK setting
+*
+* CGREG/CEREG state refer to 3GPP TS27.007:
+* <stat>: integer type; circuit mode registration status
+* 0 not registered, MT is not currently searching a new operator to register to
+* 1 registered, home network
+* 2 not registered, but MT is currently searching a new operator to register to
+* 3 registration denied
+* 4 unknown (e.g. out of GERAN/UTRAN/E-UTRAN coverage)
+* 5 registered, roaming
+* 6 registered for "SMS only", home network (not applicable)
+* 7 registered for "SMS only", roaming (not applicable)
+* 8 attached for emergency bearer services only (see NOTE 2) (applicable only when <AcT> indicates 2,4,5,6)
+* 9 registered for "CSFB not preferred", home network (not applicable)
+* 10 registered for "CSFB not preferred", roaming (not applicable)
+*
+* PARAMETERS
+*     none
+* RETURNS
+*     KAL_TRUE : CGREG/CEREG state is treated as changed
+*     KAL_FALSE : CGREG/CEREG state is treated as not change
+*****************************************************************************/
+kal_bool custom_ps_reg_state_change_check(kal_uint8 state1, kal_uint8 state2)
+{
+    kal_bool ret_val;
+
+    if (state1 != state2)
+    {
+        ret_val = KAL_TRUE;//default setting
+
+        switch (eregchk_ps)
+        {
+        //customize the checking rule here
+            case 1: /*treat state 0 and 2 as the same,
+                                   *i.e. not to report +CGREG URC while the CGREG state is changing between 0 and 2*/
+            {
+                if ((state1 == 0 || state1 == 2)&&
+                    (state2 == 0 || state2 == 2))
+                {
+                    ret_val = KAL_FALSE;
+                }
+                break;
+            }
+            case 2: //only report URC if state changes between different groups: {0|2|3|4} {5|7|10} {1|6|8|9}
+            {
+                if ((state1 == 0 || state1 == 2 || state1 == 3 || state1 == 4)&&
+                    (state2 == 0 || state2 == 2 || state2 == 3 || state2 == 4))
+                {
+                    ret_val = KAL_FALSE;
+                }
+                else if ((state1 == 1 || state1 == 6 || state1 == 8 || state1 == 9)&&
+                         (state2 == 1 || state2 == 6 || state2 == 8 || state2 == 9))
+                {
+                    ret_val = KAL_FALSE;
+                }
+                else if ((state1 == 5 || state1 == 7 || state1 == 10)&&
+                         (state2 == 5 || state2 == 7 || state2 == 10))
+                {
+                    ret_val = KAL_FALSE;
+                }
+                break;
+            }
+            case 0:
+            default:
+                break;
+        }
+    }
+    else
+    {
+        ret_val = KAL_FALSE;
+    }
+
+    return ret_val;
+}
+
+/*****************************************************************************
+* FUNCTION
+*     custom_query_feature_is_supported()
+* DESCRIPTION
+*     
+* PARAMETERS
+*     
+* RETURNS
+*   
+*****************************************************************************/
+l4c_feature_support_enum custom_query_feature_is_supported(kal_uint8 feature_id)
+{
+    switch (feature_id)
+    {
+        case 0: // L4C CME Error Cade (27.007 ch9)
+            return L4C_FEATURE_SUPPORT_LR11;            
+        case 1: // L4C ipv4v6 cause2 report supported: +CGEV: ME PDN ACT <cid>, <reason> (27.009 ch9)
+            return L4C_FEATURE_SUPPORT_LR11;
+
+        case 2:
+        default:
+            return L4C_FEATURE_NOT_SUPPORT;
+            break;
+    }
+
+    return L4C_FEATURE_NOT_SUPPORT;
+}
+
+/* record the SBP ID from SIM card*/
+static kal_uint16 sim_sbp_id[MAX_SIM_NUM]={0};
+
+/*****************************************************************************
+* FUNCTION
+*     custom_set_imsi_mapping_to_sbp_id()
+* DESCRIPTION
+*     This function is used to compute the SBP ID according to IMSI
+* PARAMETERS
+*    imsi    [IN]
+*    mnc_length_from_sim    [IN]
+* RETURNS
+*   void
+*****************************************************************************/
+void custom_set_imsi_mapping_to_sbp_id(kal_uint8 *imsi, kal_uint8 mnc_length_from_sim, kal_uint8 sim_id)
+{
+    kal_uint8 out_buff[40];
+    kal_uint16 mcc=0, mnc=0;
+
+    if (sim_id >=MAX_SIM_NUM)
+    {
+        kal_sprintf((kal_char*)out_buff, "SIM_SBP_ID(IMSI): invalid sim_id: %d", sim_id);
+        tst_sys_trace((kal_char*)out_buff);
+        return;
+    }
+
+    mcc = (imsi[0]>>4)*100 + (imsi[1]&0x0f)*10 + (imsi[1]>>4);
+    mnc = (imsi[2]&0x0f)*10 + (imsi[2]>>4);
+
+    if (mnc_length_from_sim== 3)
+    {
+        mnc = mnc*10 + (imsi[3]&0x0f);
+    }
+    else
+    {
+        // treat the length of mnc is 2 because some SIM card don't have MNC length value in the EF_AD.
+    }
+
+    sim_sbp_id[sim_id] = custom_judge_sbp_id_use_mcc_mnc(mcc, mnc);
+
+    kal_sprintf((kal_char*)out_buff, "SIM_SBP_ID(IMSI)(%d): %d", sim_id, sim_sbp_id[sim_id]);
+    tst_sys_trace((kal_char*)out_buff);
+
+}
+
+/*****************************************************************************
+* FUNCTION
+*     custom_get_sim_sbp_id()
+* DESCRIPTION
+*     This function is used to get the SBP ID according to the IMSI (SIM1)
+*     Important notice:
+*       - We have open market project with sbp_id set to 0 (default)
+*          But, we still need to enable some operator specific feature according to the inserted SIM card.
+*          So we provide this function for this kind of project.
+*       - Please use this function only when it is needed to enable your operator 
+*          specific SBP feature according to the IMSI under open market project (sbp_id = 0)
+*       - The returned value is meaningful only when SIM task could get IMSI from the SIM card.
+*          If your feature need to be enabled before SIM_READY_IND, please don't use this function.
+*       - The returned value will be updated when SIM task get new IMSI
+*          ex. SIM A inserted(SBP ID=A)-->SIM Error, ex. plug-out (SBP_ID=A), SIM B inserted (SBP ID=B)
+*          If you have concern about race condition, please avoid using this function.
+* PARAMETERS
+*    imsi    [IN]
+* RETURNS
+*   0: unknown/default
+*   others: SBP ID (ex. 17: DOCOMO)
+*****************************************************************************/
+kal_uint16 custom_get_sim_sbp_id(void)
+{
+ return sim_sbp_id[0];
+}
+
+/*****************************************************************************
+* FUNCTION
+*     custom_get_sim_sbp_id_by_ps()
+* DESCRIPTION
+*     This function is used to get the SBP ID according to the IMSI in ps_id
+* PARAMETERS
+*    ps_id    [IN]
+* RETURNS
+*   0: unknown/default
+*   others: SBP ID (ex. 17: DOCOMO)
+*****************************************************************************/
+kal_uint16 custom_get_sim_sbp_id_by_ps(protocol_id_enum ps_id)
+{
+ return sim_sbp_id[ps_id];
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*     custom_cc_tty_support_amr_wb()
+* DESCRIPTION
+*     TTY call support AMRWB or not
+* PARAMETERS
+*     
+* RETURNS
+*     KAL_TRUE : TTY supprot AMRWB
+*     KAL_FALSE : TTY doesn't supprot AMRWB
+*****************************************************************************/
+kal_bool custom_cc_tty_support_amr_wb()
+{
+    return KAL_TRUE;
+}
+
+#if defined(__CC_CUSTOMIZED_TIMER__)
+/*****************************************************************************
+* FUNCTION
+*     custom_cc_timer()
+* DESCRIPTION
+* 
+* PARAMETERS
+*     
+* RETURNS
+*     ret_timer timer value
+*****************************************************************************/
+kal_uint32 custom_cc_timer(custom_cc_timer_enum t)
+{
+    kal_uint32 ret_timer = 30 * KAL_TICKS_1_SEC;
+
+    switch (t)
+    {
+        case CUSTOM_CC_T303:
+        case CUSTOM_CC_T305:
+        case CUSTOM_CC_T308:
+        case CUSTOM_CC_T310:
+            ret_timer = 30 * KAL_TICKS_1_SEC;
+            break;
+		case CUSTOM_CC_T313:
+            ret_timer = 30 * KAL_TICKS_1_SEC;
+            break;
+        default:
+            ret_timer = 30 * KAL_TICKS_1_SEC;
+            break;
+    }
+
+    return ret_timer;
+}
+#endif
+
+/*****************************************************************************
+* FUNCTION
+*     custom_get_ca_display_mode()
+* DESCRIPTION
+*     Show 4G+ when Scell is configured or activated
+* PARAMETERS
+*     
+* RETURNS
+*     CA_ICON_BY_CONFIG
+*     CA_ICON_BY_ACTIVATION
+*****************************************************************************/
+ca_icon_display_mode_enum custom_get_ca_display_mode(void)
+{
+    //CA_ICON_BY_CONFIG
+    //CA_ICON_BY_ACTIVATION
+    return CA_ICON_BY_CONFIG;
+}
+
+#ifdef __TC10__
+void custom_sap_ivec_get(kal_uint8 *out_ivec)
+{
+    kal_uint8 iv[16] = {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+                        0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA};
+
+    kal_mem_cpy(out_ivec, iv, sizeof(iv));      // ivec must be 16 bytes.
+}
+#endif
+
+typedef struct {    
+    kal_uint32 mccMnc_range_start;
+    kal_uint32 mccMnc_range_end;
+} rac_plmn_table;
+
+/*
+  * provide a table to no change UE_MODE when enter cause18 plmn
+  *
+  * LTE NAS NOTE 1: The UE may transit from CS/PS mode 1 to PS mode 1 or from CS/PS mode 2 to PS mode 2 if "CS domain not available" is received. 
+  * After the transition to PS mode 1 or PS mode 2 due to "CS domain not available", the UE can transit back to CS/PS mode 1 or CS/PS mode 2, 
+  * e.g. due to change of PLMN which is not in the list of the equivalent PLMNs.
+  */
+const static rac_plmn_table s_custom_cause18_table[] = 
+{
+    {0, 0}, // default never match    
+    //{46000, 46000}, // China Mobile
+};
+
+kal_bool custom_cause18_not_change_uemode_by_plmn(kal_uint32 u32_plmn_id)
+{
+    kal_uint32 i;    
+    kal_uint32 table_size = sizeof(s_custom_cause18_table) / sizeof(s_custom_cause18_table[0]);
+
+    /* Scan the s_custom_roaming_vdp_table table*/
+    for(i = 0; i < table_size; i++)
+    {        
+        if ((s_custom_cause18_table[i].mccMnc_range_start <= u32_plmn_id) && 
+            (s_custom_cause18_table[i].mccMnc_range_end >= u32_plmn_id))
+        {
+            // Found in the table
+            return KAL_TRUE;
+        }
+    }
+
+    return KAL_FALSE;
+}
+
+
+#if defined(__RAC_CHANGE_VDP_BY_ROAMING__)
+typedef struct {    
+    rac_plmn_table imsi;
+    kal_uint8  custom_vdp_setting;  // L4_CS_VOICE_ONLY, (CS_only:1 CS_prefer:2 PS_prefer:3 PS_only:4)
+} roam_vdp_imsi_table;
+
+const static roam_vdp_imsi_table s_custom_roaming_vdp_table[] = 
+{
+    {{0, 0}, 1},  // default never match  
+    //{{26202, 26202}, 1},    // Germany
+};
+
+void custom_config_roaming_vdp_by_sim(kal_uint8* imsi, kal_uint8 mnc_length, kal_uint8 *custom_vdp_setting, kal_uint8 nvram_vdp)
+{
+    kal_uint32 mccmnc;
+    kal_uint32 i;
+    kal_uint32 table_size = sizeof(s_custom_roaming_vdp_table) / sizeof(s_custom_roaming_vdp_table[0]);
+
+    /* Get mccmnc */
+    mccmnc = (imsi[0] >> 4);                        // mcc1
+    mccmnc = (mccmnc * 10) + (imsi[1] & 0x0F);      // mcc2
+    mccmnc = (mccmnc * 10) + (imsi[1] >> 4);        // mcc3
+    mccmnc = (mccmnc * 10) + (imsi[2] & 0x0F);      // mnc1
+    mccmnc = (mccmnc * 10) + (imsi[2] >> 4);        // mnc2
+    if (mnc_length == 3)
+    {
+        mccmnc = (mccmnc * 10) + (imsi[3] & 0x0F);  // mnc3
+    }
+
+
+    /* Scan the s_custom_roaming_vdp_table table*/
+    for(i = 0; i < table_size; i++)
+    {        
+        if ((s_custom_roaming_vdp_table[i].imsi.mccMnc_range_start <= mccmnc) && 
+            (s_custom_roaming_vdp_table[i].imsi.mccMnc_range_end >= mccmnc))
+        {
+            // Found in the table
+
+            *custom_vdp_setting = s_custom_roaming_vdp_table[i].custom_vdp_setting;
+
+            return;
+        }
+    }
+
+    /* NOT Found in the table, default vdp by SIM */
+    *custom_vdp_setting = nvram_vdp;                // L4_IMS_PS_VOICE_PREFERRED_CS_VOICE_AS_SECONDARY (CS_only:1 CS_prefer:2 PS_prefer:3 PS_only:4)
+}
+#endif  // __RAC_CHANGE_VDP_BY_ROAMING__
+
+#if defined(__RAC_CHANGE_VDP_SRVCC_BY_SIM__)
+typedef struct {    
+    rac_plmn_table imsi;
+    kal_uint8  custom_vdp_setting;  // L4_CS_VOICE_ONLY, (CS_only:1 CS_prefer:2 PS_prefer:3 PS_only:4)
+    kal_bool   custom_srvcc;        // Disable:KAL_FALSE(0),, Enable:KAL_TRUE(1)
+} vdp_imsi_table;
+
+const static vdp_imsi_table s_custom_vdp_table[] = 
+{
+    {{0xFEFEFEFE, 0xFEFEFEFE}, 1, KAL_FALSE}, // default never match  
+    /* ALPS04991665: Titan controls VDP settings for USCC, so we may not need these entries in TC10 */
+#ifndef __TC10__
+    {{311580, 311589}, 1, KAL_TRUE},          // USCC
+    {{311220, 311229}, 1, KAL_TRUE},          // USCC
+#endif
+    //{{23502, 23502}, 1, KAL_FALSE},         // United Kingdom (EE)  
+    //{{23430, 23434}, 1, KAL_FALSE},         // United Kingdom (EE)
+};
+/*****************************************************************************
+* FUNCTION
+*  	custom_config_vdp_srvcc_by_sim()
+* DESCRIPTION
+*   check the custom vdp table by imsi.
+*
+*   if hit, update custom vdp and srvcc
+*   if not-hit, update custom vdp only  
+*  
+* PARAMETERS
+*	none
+* RETURNS
+*	void
+*****************************************************************************/
+void custom_config_vdp_srvcc_by_sim(kal_uint8* imsi, kal_uint8 mnc_length, kal_uint8 *custom_vdp_setting, kal_bool *custom_srvcc, kal_uint8 nvram_vdp)
+{
+    kal_uint32 mccmnc;
+    kal_uint32 i;
+    kal_uint32 table_size = sizeof(s_custom_vdp_table) / sizeof(s_custom_vdp_table[0]);
+
+    /* Get mccmnc */
+    mccmnc = (imsi[0] >> 4);                        // mcc1
+    mccmnc = (mccmnc * 10) + (imsi[1] & 0x0F);      // mcc2
+    mccmnc = (mccmnc * 10) + (imsi[1] >> 4);        // mcc3
+    mccmnc = (mccmnc * 10) + (imsi[2] & 0x0F);      // mnc1
+    mccmnc = (mccmnc * 10) + (imsi[2] >> 4);        // mnc2
+    if (mnc_length == 3)
+    {
+        mccmnc = (mccmnc * 10) + (imsi[3] & 0x0F);  // mnc3
+    }
+
+
+    /* Scan the s_vdp_imsi_table table*/
+    for(i = 0; i < table_size; i++)
+    {        
+        if ((s_custom_vdp_table[i].imsi.mccMnc_range_start <= mccmnc) && 
+            (s_custom_vdp_table[i].imsi.mccMnc_range_end >= mccmnc))
+        {
+            // Found in the table
+
+            *custom_vdp_setting = s_custom_vdp_table[i].custom_vdp_setting;
+            *custom_srvcc = s_custom_vdp_table[i].custom_srvcc;
+
+            return;
+        }
+    }
+
+    /* NOT Found in the table, default vdp by SIM */
+    *custom_vdp_setting = nvram_vdp;                // L4_IMS_PS_VOICE_PREFERRED_CS_VOICE_AS_SECONDARY (CS_only:1 CS_prefer:2 PS_prefer:3 PS_only:4)
+    *custom_srvcc = KAL_TRUE;
+}
+#endif
+
+/*****************************************************************************
+* FUNCTION
+*     custom_check_ecc_change_rat_retry_allowed_for_plmn()
+* DESCRIPTION
+*     Check if the change RAT retry for ECC reject is not allowed for the particular PLMN
+* PARAMETERS
+*     
+* RETURNS
+*     KAL_TRUE - Allow change RAT retry
+*     KAL_FALSE - Do not allow change RAT retry
+*****************************************************************************/
+kal_bool custom_check_ecc_change_rat_retry_allowed_for_plmn(void)
+{
+#if (!defined(__FLAVOR_BASIC__)) && (!defined(__FLAVOR_BASIC_TL1D__))
+	plmn_id_rat_struct plmn_id_ptr;
+
+	l4crac_get_current_plmn(&plmn_id_ptr);
+
+    /* 704.01 is the MCC.MNC for Guatemala*/
+	if((plmn_id_ptr.plmn_id.mcc1 == 7) && (plmn_id_ptr.plmn_id.mcc2 == 0) && (plmn_id_ptr.plmn_id.mcc3 == 4) && (plmn_id_ptr.plmn_id.mnc1 == 0) && (plmn_id_ptr.plmn_id.mnc2 == 1))
+    {
+        return KAL_FALSE;
+	}
+	else
+	{
+        return KAL_TRUE;
+	}
+#else
+    return KAL_FALSE;
+#endif
+}
+
+/*****************************************************************************
+* FUNCTION
+*     custom_judge_sbp_id_use_mcc_mnc()
+* DESCRIPTION
+*     This function is used to judge what operator does the input MCC/MNC belong to
+* PARAMETERS
+*    mcc    [IN]
+*    mnc    [IN]
+* RETURNS
+*   0: unknown/default
+*   others: SBP ID (ex. 17: DOCOMO)
+*****************************************************************************/
+kal_uint16 custom_judge_sbp_id_use_mcc_mnc(kal_uint16 mcc, kal_uint16 mnc)
+{    
+
+    if ( ((mcc == 440) && (mnc == 10)) ||
+         ((mcc == 310) && (mnc == 370)) ||
+         ((mcc == 310) && (mnc == 470)) )
+    {
+        return 17;  // DOCOMO
+    }
+    else if ( ((mcc == 440) && (mnc >= 7 && mnc <= 8)) ||
+            ((mcc == 440) && (mnc >= 50 && mnc <= 56)) ||
+            ((mcc == 440) && (mnc >= 70 && mnc <= 79)) || 
+            ((mcc == 440) && (mnc >= 88 && mnc <= 89)) || 
+            ((mcc == 441) && (mnc == 70)) )
+    {
+        return 129;   // KDDI
+    }
+    else if(((mcc == 405) && ( mnc >= 51 && mnc <= 56 ) ) ||
+		     ((mcc == 404) && ( mnc == 2 || mnc == 3 || mnc == 10 || mnc == 16 || mnc == 31 || mnc == 40 || 
+		     					mnc == 45 || mnc == 49 ||mnc == 70 || mnc == 90 || (mnc >= 92 && mnc<=98))))
+    {
+        return 147; // Airtel
+    }
+    else if( ((mcc == 310) && ((mnc == 30)||(mnc == 70)||(mnc == 90)||(mnc == 150)||(mnc == 170)|| 
+                                (mnc == 280)||(mnc == 380)||(mnc == 410)||(mnc == 560)||(mnc == 680)||(mnc == 950)))||
+              ((mcc == 311) && (mnc == 180))||     
+              ((mcc == 312) && (mnc == 670))||
+              ((mcc == 313) && (mnc == 100))||
+              ((mcc == 334) && ((mnc == 50)|| (mnc == 90))))
+    {
+        return 7; //AT&T
+    }
+    else if ((mcc == 310) && ((mnc == 160)||(mnc == 200)||(mnc == 210)||(mnc == 220)||(mnc == 230)||
+                               (mnc == 240)||(mnc == 250)||(mnc == 260)||(mnc == 270)||(mnc == 300) ||(mnc == 310)||
+                               (mnc == 330)||(mnc == 490)||(mnc == 580)||(mnc == 660)||(mnc == 800)))
+
+    {
+        return 8;   // TMO-US
+    }
+    else if ( (mcc == 460) && (mnc == 01)) 
+    {
+        return 2;  // CU 
+    }
+    else if ( (mcc == 460) && (mnc == 00)) 
+    {
+        return 1;  // CMCC
+    }
+	else if ((mcc == 405) && ((mnc == 840) || (mnc >= 854 && mnc <= 874)))
+	{
+	    return 18; // RJIO
+	}
+	else if ((mcc == 460) && ((mnc == 03) || (mnc == 05) || (mnc == 11)))
+	{
+	    return 9; //China Telecom
+	}
+	else if (((mcc == 234) && ((mnc == 15) || (mnc == 27) || (mnc == 91))) ||
+              ((mcc == 222) && ((mnc == 06) || (mnc == 10))) ||
+              ((mcc == 262) && ((mnc == 02) || (mnc == 04) || (mnc == 9))) ||
+              ((mcc == 268) && (mnc == 01)) ||
+              ((mcc == 214) && ((mnc == 01) || (mnc == 06))) ||	
+              ((mcc == 286) && (mnc == 02)) ||
+              ((mcc == 204) && (mnc == 04)) ||
+              ((mcc == 230) && (mnc == 03)) ||
+              ((mcc == 655) && (mnc == 01)) ||
+              ((mcc == 602) && (mnc == 02)) ||
+              ((mcc == 202) && (mnc == 05)) ||
+              ((mcc == 645) && (mnc == 05)) ||
+              ((mcc == 272) && (mnc == 01)) ||
+              ((mcc == 216) && (mnc == 70)))
+    {
+        return 6; // Vodafone
+    }
+	else if ( ((mcc == 310) && (mnc == 120)) ||
+		      ((mcc == 311) && (mnc == 490)) ||
+		      ((mcc == 312) && (mnc == 530)) )
+	{
+        return 20; // Sprint
+	}
+	else if((mcc == 450) && ((mnc == 2) || (mnc == 4) || (mnc == 7) || (mnc == 8)))
+    {
+        return 114; // 114(KT)
+    }
+    else if((mcc == 450) && ((mnc == 5) || (mnc == 12)))
+    {
+        return 115; // 115(SKT)
+    }
+    else if((mcc == 450) && (mnc == 6))
+    {
+        return 116; // 116(Uplus)
+    }
+	else if ((mcc == 208) && (mnc == 20 || mnc == 21 || mnc == 88)) 
+	{
+		return 139; // Bouygues
+	}
+	else if((mcc == 505) && ((mnc == 01) || (mnc== 11) || (mnc == 39) || (mnc == 71) || (mnc == 72)))
+    {
+        return 19; // 19(Telstra)
+    }
+	else
+    {
+        return 0;
+    }
+}
+/*****************************************************************************
+* FUNCTION
+*  	custom_check_country_specific_mcc()
+* DESCRIPTION
+*   	This function is used to if the MCC is specific to India
+* PARAMETERS
+*	none
+* RETURNS
+*	time duration
+*****************************************************************************/
+kal_bool custom_check_india_specific_mcc(kal_uint8 *mcc)
+{
+    if ((strncmp((char*)mcc, "404", 3) == 0) || (strncmp((char*)mcc, "405", 3) == 0))
+    {
+        return KAL_TRUE;
+    }
+
+	return KAL_FALSE;
+}
+/*****************************************************************************
+* FUNCTION
+*  	custom_check_china_specific_mcc()
+* DESCRIPTION
+*   	This function is used to if the MCC is specific to China
+* PARAMETERS
+*	none
+* RETURNS
+*	time duration
+*****************************************************************************/
+kal_bool custom_check_china_specific_mcc(kal_uint16 mcc)
+{
+    if (mcc == 460)
+    {
+        return KAL_TRUE;
+    }
+
+	return KAL_FALSE;
+}
+
+#ifdef __CHR_AB_INFO__
+/*****************************************************************************
+* FUNCTION
+*  	custom_get_epsnlte_urc_ind_timer()
+* DESCRIPTION
+*   	This function is used to return the time duration for EPSNLTE URC indication
+* PARAMETERS
+*	none
+* RETURNS
+*	time duration
+*****************************************************************************/
+kal_uint8 custom_get_epsnlte_urc_ind_timer(void)
+{
+    return (kal_uint8)CUSTOM_EPSNLTE_URC_IND_TIMER;
+}
+#endif /* __CHR_AB_INFO__ */
+
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_enable_multiple_verify_of_sim_pin_allow()
+* DESCRIPTION
+*   	This function is used to enable/disable multiple verify allow of SIM PIN operations when the first
+*     attempt fails because of SIM unexpected error
+* PARAMETERS
+*	none
+* RETURNS
+*	TRUE to enable
+*   FALSE to disable
+*****************************************************************************/
+kal_bool custom_enable_multiple_verify_of_sim_pin_allow(void)
+{
+#if (defined (__TC01__) || defined (__TC10__))
+    return KAL_TRUE;
+#else
+    return KAL_FALSE;
+#endif
+}
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_enable_sml_cat_choice
+* DESCRIPTION
+*   	This function enables SML check feature, in which if one personalization category passes then
+*     whole personalization check is considered as DONE.
+* PARAMETERS
+*	none
+* RETURNS
+*    TRUE to enable
+*    FALSE to disable
+*****************************************************************************/
+kal_bool custom_enable_sml_cat_choice(void)
+{
+#ifdef __CUSTOM_CAT_CHOICE__
+    return KAL_TRUE;
+#else
+    return KAL_FALSE;
+#endif /* __CUSTOM_CAT_CHOICE__ */
+}
+
+#ifdef __CARRIER_RESTRICTION__
+/*****************************************************************************
+* FUNCTION
+*     custom_get_crrst_sml_wild_char
+* DESCRIPTION
+*    Obtain the wild character to be used in SML lock code for Carrier Restriction feature
+*
+* PARAMETERS
+*    none
+* RETURNS
+*    wild character to be used for SML lock code
+* 
+*****************************************************************************/
+kal_uint8 custom_get_crrst_sml_wild_char(void)
+{
+    return '?';
+}
+#endif /* __CARRIER_RESTRICTION__ */
+
+/*****************************************************************************
+* FUNCTION
+*     custom_check_if_iccid_at_early_boot_required()
+* DESCRIPTION
+*     Check if 9th digit of ICCID has to be passed through CCMSG_ID_SYSMSGSVC_L4_SIM_INFO
+* PARAMETERS
+*     
+* RETURNS
+*     KAL_TRUE - If 9th digit of ICCID required
+*     KAL_FALSE -If 9th digit of ICCID is not required 
+*****************************************************************************/
+kal_bool custom_check_if_iccid_at_early_boot_required(void)
+{
+    return KAL_FALSE;
+}
+
+#ifdef __ARFCN_TO_CAMERA_SUPPORT__
+/*****************************************************************************
+* FUNCTION
+*     custom_l4_camera_hopping_notify_callback
+* DESCRIPTION
+*    function callback for enabling & disabling ARFCN reporting to camera
+*
+* PARAMETERS
+*    none
+* RETURNS
+*    wild character to be used for SML lock code
+* 
+*****************************************************************************/
+void custom_l4_camera_hopping_notify_callback(kal_uint32 value)
+{
+    l4c_nw_set_camera_hopping_req(value);
+}
+#endif
+
+/******************************************************************/
+
+/*
+typedef enum
+{
+    GSM_RSSI = 0,
+    UTRAN_RSCP,
+    UTRAN_ECNO,
+    LTE_RSRP,
+    LTE_RSRQ,
+    LTE_RSSNR,
+    1X_RSSI   = 6,
+    1X_ECIO,
+    EVDO_RSSI,
+    IWLAN_L4C_EVDO_ECIO = 9,
+    MAX_SIG_TYPE,
+}sig_type_enum;*/
+    
+
+custom_cell_power_level_threshold custom_cell_power_level_threshold_table[] = 
+{
+    {GSM_RSSI,     5, {-452, -428, -404, -380, -356,0,0,0,0,0,0,0,0,0,0,0}},
+    {UTRAN_RSCP,   5, {-452, -428, -404, -380, -356,0,0,0,0,0,0,0,0,0,0,0}},
+    {LTE_RSRP,     6, {-560, -500, -460, -440, -408, -176,0,0,0,0,0,0,0,0,0,0}},
+    {C2K_1X_RSSI,  5, {-436 , -404, -388, -372, -360,0,0,0,0,0,0,0,0,0,0,0}},
+    {C2K_EVDO_RSSI,5, {-436 , -404, -388, -372, -360,0,0,0,0,0,0,0,0,0,0,0}},
+    {MAX_SIG_TYPE, 0, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}
+};
+
+#define CUSTOM_CELL_POWER_LEVEL_THRESHOLD_TABLE_SIZE sizeof(custom_cell_power_level_threshold_table)/sizeof(custom_cell_power_level_threshold)
+
+kal_bool custom_get_threshold_cell_power_by_sig_type(sig_type_enum sig_type, kal_uint8 *threshold_setting)
+{
+    kal_uint8 i = 0;
+
+    for(i=0; i<CUSTOM_CELL_POWER_LEVEL_THRESHOLD_TABLE_SIZE; i++)
+    {
+        if(custom_cell_power_level_threshold_table[i].sig_type == sig_type)
+        {
+            kal_mem_cpy(threshold_setting, &(custom_cell_power_level_threshold_table[i]), sizeof(custom_cell_power_level_threshold));
+            return KAL_TRUE;
+        }
+    }
+    
+    return KAL_FALSE;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*     custom_get_sml_wild_char
+* DESCRIPTION
+*    Obtain the wild character to be used in SML lock code 
+*
+* PARAMETERS
+*    none
+* RETURNS
+*    wild character to be used for SML lock code
+* 
+*****************************************************************************/
+kal_uint8 custom_get_sml_wild_char(void)
+{
+    return '*';
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   custom_sml_cat_verify_pass_permanent_unlock
+* DESCRIPTION
+*       This function is used to check whether a category should be unlocked permanently if sml_Verify passes .
+* PARAMETERS
+*   none
+* RETURNS
+*    TRUE - Unlock permanently. Lock state will be updated in NVRAM.
+*    FALSE - State value will not be stored in NVRAM.
+*****************************************************************************/
+kal_bool custom_sml_cat_verify_pass_permanent_unlock(void)
+{
+#ifdef __CUSTOM_CAT_VERIFY_PASS_PERMANENT_UNLOCK__
+    return KAL_TRUE;
+#else
+    return KAL_FALSE;
+#endif /* __CUSTOM_CAT_VERIFY_PASS_PERMANENT_UNLOCK__ */
+}
+
+#ifdef __DSBP_NETWORK_LOSS_SUSPEND__
+/*****************************************************************************
+* FUNCTION
+*   custom_l4_get_dsbp_guard_timer()
+* DESCRIPTION
+*   this function is used configure the DSBP display loss optimization guard timer duration
+* PARAMETERS
+*   none
+* RETURNS
+*   Integer - Guard timer duration
+*****************************************************************************/
+kal_uint8 custom_l4_get_dsbp_guard_timer()
+{
+    return CUSTOM_DSBP_GUARD_TIMER;
+}
+#endif
+
+
+kal_uint8 *custom_get_cb_info(kal_uint8 mode,kal_uint16 *cb_data_len,kal_uint16 *msg_id,kal_uint16 *serial_no)
+{
+    switch (mode)
+    {
+        case 1:
+			{
+				*cb_data_len = sizeof(custom_cb_message1)/sizeof(custom_cb_message1[0]);
+				*msg_id = 0x1118;
+				*serial_no = 0x4011;
+				return ((kal_uint8*)custom_cb_message1);
+			}
+		break;
+
+		case 2: 
+			{
+				*cb_data_len = sizeof(custom_cb_message2)/sizeof(custom_cb_message2[0]);
+				*msg_id = 0x1120;
+				*serial_no = 0x4012;
+				return ((kal_uint8*)custom_cb_message2);
+			}
+		break;
+
+		case 255:
+			{
+				*cb_data_len = sizeof(custom_test_wham_message)/sizeof(custom_test_wham_message[0]);
+				*msg_id = 0x1130;
+				*serial_no = 0x030B;
+				return ((kal_uint8*)custom_test_wham_message);
+			}
+        break;
+
+		default:
+			{
+              *cb_data_len = 0;
+               return NULL;
+			}
+			break;
+    }
+	
+}
+
+kal_uint8 *custom_get_wea_test_data(kal_uint8 mode,kal_uint16 *wea_test_data_len)
+{
+    switch (mode)
+    {
+    	case 1:
+			{
+            	*wea_test_data_len = sizeof(custom_smsal_wea_test_data1)/sizeof(custom_smsal_wea_test_data1[0]);
+        		return 	((kal_uint8*)custom_smsal_wea_test_data1);
+    		}
+		break;
+
+		case 2:
+			{
+				*wea_test_data_len = sizeof(custom_smsal_wea_test_data2)/sizeof(custom_smsal_wea_test_data2[0]);
+				return	((kal_uint8*)custom_smsal_wea_test_data2);
+			}
+		break;
+
+		case 255:
+		default:
+			{
+				 *wea_test_data_len = 0;
+				 return NULL;
+			}
+		break;
+		
+    }
+	
+}
+
+#ifdef __FEATURE_SAMSUNG_RF_SAR_EUR_CHK__
+/*****************************************************************************
+ * FUNCTION
+ *  custom_check_if_EU_US_network
+ * DESCRIPTION
+ *  This function checks if the mcc belongs to Europe or USA
+ * PARAMETERS
+ *  mcc                   [IN]        mobile country code 
+ * RETURNS
+ *  kal_bool      result
+ *****************************************************************************/
+kal_bool custom_check_if_EU_US_network(const kal_char *nw_mcc)
+{
+    const kal_char *EU_US_MCC_List[] = {
+        "202", /*Greece*/
+        "204", /*Netherlands*/
+        "206", /*Belgium*/
+        "208", /*France*/
+        "212", /*Monaco*/
+        "213", /*Andora*/
+        "214", /*Spain*/
+        "216", /*Hungary*/
+        "218", /*Bosnia*/
+        "219", /*Croatia*/
+        "220", /*Serbia*/
+        "222", /*Italy*/
+        "225", /*Vatican*/
+        "226", /*Romania*/
+        "228", /*Switzerland*/
+        "230", /*Czech*/
+        "231", /*Slovakia*/
+        "232", /*Austria*/
+        "234", /*England*/
+        "235", /*United Kingdom*/
+        "238", /*Denmark*/
+        "240", /*Sweden*/
+        "242", /*Norway*/
+        "244", /*Finland*/
+        "246", /*Lithuaina*/
+        "247", /*Latvia*/
+        "248", /*Estonia*/
+        "250", /*Russia*/
+        "255", /*Ukraine*/
+        "257", /*Belarus*/
+        "259", /*Moldova*/
+        "260", /*Poland*/
+        "262", /*Germany*/
+        "268", /*Portugal*/
+        "270", /*Luxembourg*/
+        "272", /*Ireland*/
+        "274", /*Iceland*/
+        "276", /*Albania*/
+        "278", /*Malta*/
+        "284", /*Bulgaria*/
+        "286", /*Turkey*/
+        "292", /*San Marino*/
+        "293", /*Slovenia*/
+        "294", /*Macedonia*/
+        "295" /*Liechtenstein*/};
+    kal_uint8 EU_US_MCC_list_count = sizeof(EU_US_MCC_List)/sizeof(EU_US_MCC_List[0]);
+    kal_uint8 index = 0;
+
+    for (index = 0; index < EU_US_MCC_list_count; index++)
+    {
+        if (0 == (strncmp(EU_US_MCC_List[index], nw_mcc, 3)))
+        {
+            return KAL_TRUE;
+        }
+    }
+
+    return KAL_FALSE;
+
+}
+#endif
+
+
+/*****************************************************************************
+* FUNCTION
+*  	
+* DESCRIPTION
+* 
+* 
+*
+* PARAMETERS
+*	
+* RETURNS
+*	
+*   
+*****************************************************************************/
+kal_char *custom_op129_skip_signature_verify_pattern(void)
+{
+#ifdef MTK_RSA_ESCAPE_SIGNATURE_OEM
+    return MTK_RSA_ESCAPE_SIGNATURE_OEM;
+#else
+    return NULL;
+#endif
+}
+
+/*****************************************************************************
+* FUNCTION
+*   custom_l4c_check_lte_only_camped_network
+* DESCRIPTION
+*   For these camped PLMNs the change RAT to LTE only needs to be done.
+*
+* PARAMETERS
+*   kal_uint8* plmn
+* RETURNS
+*   KAL_TRUE or KAL_FALSE
+* KAL_TRUE is to treat for this plmn, change RAT retry needs to be done
+*****************************************************************************/
+kal_bool custom_l4c_check_lte_only_camped_network(kal_uint8 *plmn)
+{
+    if ((strncmp((char*)plmn, "44050", 5) == 0) || (strncmp((char*)plmn, "44051", 5) == 0) ||
+        (strncmp((char*)plmn, "44052", 5) == 0) || (strncmp((char*)plmn, "44053", 5) == 0) ||
+        (strncmp((char*)plmn, "44054", 5) == 0) || (strncmp((char*)plmn, "44070", 5) == 0) ||
+        (strncmp((char*)plmn, "44071", 5) == 0) || (strncmp((char*)plmn, "44072", 5) == 0) ||
+        (strncmp((char*)plmn, "44073", 5) == 0) || (strncmp((char*)plmn, "44074", 5) == 0) ||
+        (strncmp((char*)plmn, "44075", 5) == 0) || (strncmp((char*)plmn, "44076", 5) == 0) ||
+        (strncmp((char*)plmn, "44011", 5) == 0))
+    {
+        return KAL_TRUE;
+    }
+    else
+    {
+        return KAL_FALSE;
+    }
+}
+
+/*****************************************************************************
+* FUNCTION
+*   custom_l4c_check_country_specific_mcc
+* DESCRIPTION
+*   check if PLMN belongs to a specific country
+*
+* PARAMETERS
+*   kal_uint8* plmn, kal_uint8 *mcc
+* RETURNS
+*   KAL_TRUE or KAL_FALSE
+*****************************************************************************/
+kal_bool custom_l4c_check_country_specific_mcc(kal_uint8 *plmn, kal_uint8 country_code)
+{
+    if (country_code == 0)
+    {
+        if ((strncmp((char*)plmn, "440", 3) == 0) || (strncmp((char*)plmn, "441", 3) == 0))
+    {
+        return KAL_TRUE;
+    }
+    }
+    
+    return KAL_FALSE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_get_l4c_lte_only_timeout
+* DESCRIPTION
+*   This function is used to get the L4C_TIMER_ID_OP129_LTE_ONLY_TIMER time.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint32
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint32 custom_get_l4c_lte_only_timeout()
+{
+   return ((kal_uint32)CUSTOM_L4C_LTE_ONLY_LTE_NW_TIMER);
+}
+
+l4c_sim_oper_enum custom_check_imsi_to_set_rat(kal_uint8* imsi)
+{   
+    if (strncmp((char*)(imsi+1), "45006", 5) == 0)
+    {
+        return L4C_SIM_LGU;
+    }
+    else if((strncmp((char*)(imsi+1), "45001", 5) == 0) ||
+            (strncmp((char*)(imsi+1), "45002", 5) == 0) ||
+            (strncmp((char*)(imsi+1), "45003", 5) == 0) ||
+            (strncmp((char*)(imsi+1), "45004", 5) == 0) ||
+            (strncmp((char*)(imsi+1), "45005", 5) == 0) ||
+            (strncmp((char*)(imsi+1), "45007", 5) == 0) ||
+            (strncmp((char*)(imsi+1), "45008", 5) == 0) ||
+            (strncmp((char*)(imsi+1), "45011", 5) == 0) ||
+            (strncmp((char*)(imsi+1), "45012", 5) == 0))
+    {
+        return L4C_SIM_KT_SKT;
+    }
+    else if (strncmp((char*)(imsi+1), "313390", 6) == 0)
+    {       
+        return L4C_SIM_AUSA_H;
+    }
+    else if((strncmp((char*)(imsi+1), "20809005", 8) == 0) || (strncmp((char*)(imsi+1), "20809006", 8) == 0))
+    {
+        return L4C_SIM_AUSA_R;
+    }    
+    else
+    {
+        return L4C_SIM_OTHER;
+    }
+}
+
+/*****************************************************************************
+* FUNCTION
+*   custom_check_cnap_allowed_for_plmn
+* DESCRIPTION
+* Custom function to check whether cnap
+* feature to enable/disable based on PLMN
+* PARAMETERS
+*   camped_plmn
+* RETURNS
+*    TRUE to enable
+*    FALSE to disable
+*****************************************************************************/
+kal_bool custom_check_cnap_allowed_for_plmn(kal_uint8* camped_plmn)
+{
+#if 0  /*Please add cnap_allowed_plmn list as specified below: */
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif 
+
+    return KAL_FALSE;
+
+}
+
+kal_bool custom_check_increment_inv_id_count(kal_uint32 plmn_id)
+{
+    kal_bool ret_val = KAL_TRUE;
+
+    switch(plmn_id)
+    {
+    /*Please add white plmn list as specified below:
+        case 0x0046000f:
+        case 0x0046002f:
+            ret_val = KAL_FALSE;
+            break;
+    */            
+        default:
+            break;
+    }  	
+    return ret_val;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_config_wait_on_lte_paging_timer
+* DESCRIPTION
+*   This function is used to get wait for MT paging in LTE RAT timer 
+*   value in seconds.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint32
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint32 custom_config_wait_on_lte_paging_timer()
+{
+	return CSM_WAIT_ON_LTE_PAGING_TIMER_CONFIG;
+}
+
+typedef struct
+{
+    kal_char plmn_id[7];
+}custom_disable_fd_plmn;
+
+/*This is the table which needs to be updated to disable legacy FD based on 
+the PLMN ID. 
+    For the PLMN ID for which the Legacy FD needs to be disabled should be 
+entered in this table.
+    Format:-
+    --> PLMN ID is accpeted in the string format. 
+    --> Each PLMN ID can have at max 6 characters. Last byte is reserved for 
+'\0'
+    --> Please make sure to enclose each entry by paranthesis '{'  '}'
+    --> You can follow the commented example
+*/
+custom_disable_fd_plmn custom_disable_fd_plmn_table[] = {
+  /*Example*/
+  /*
+	 {"330110"},
+        {"33011"},
+        {"334020"},
+        {"334050"},
+        {"334090"},*/
+     {"FFFFFF"}
+
+};
+
+/*This is the table which needs to be updated to disable full R8 FD based on the PLMN ID. 
+    For the PLMN ID for which the R8 FD needs to be disabled should be entered in this table.
+    Format:-
+    --> PLMN ID is accpeted in the string format. 
+    --> Each PLMN ID can have at max 6 characters. Last byte is reserved for '\0'
+    --> Please make sure to enclose each entry by paranthesis '{'  '}'
+    --> You can follow the commented example
+*/
+custom_disable_fd_plmn custom_disable_full_fd_plmn_table[] = {
+  /*Example*/
+  /*
+	 {"330110"},
+        {"33011"},
+        {"334020"},
+        {"334050"},
+        {"334090"},*/
+     {"FFFFFF"}
+
+};
+
+#define CUSTOM_DISABLE_FD_PLMN_TABLE_SIZE   (sizeof(custom_disable_fd_plmn_table)/sizeof(custom_disable_fd_plmn))
+#define CUSTOM_DISABLE_FULL_FD_PLMN_TABLE_SIZE   (sizeof(custom_disable_full_fd_plmn_table)/sizeof(custom_disable_fd_plmn))
+
+typedef struct
+{
+    kal_char mcc[4];
+}custom_disable_fd_mcc;
+
+/*This is the table which needs to be updated to disable legacy FD based on 
+the MCC. 
+    For the MCC for which the Legacy FD needs to be disabled should be 
+entered in this table.
+    Format:-
+    --> MCC is accpeted in the string format. 
+    --> Each MCC can have at max 3 characters. Last byte is reserved for '\0'
+    --> Please make sure to enclose each entry by paranthesis '{'  '}'
+    --> You can follow the commented example
+*/
+custom_disable_fd_mcc custom_disable_fd_mcc_table[] = {
+/*Example MCC*/
+    {"FFF"}
+};
+
+/*This is the table which needs to be updated to disable legacy FD based on the MCC. 
+    For the MCC for which the Legacy FD needs to be disabled should be entered in this table.
+    Format:-
+    --> MCC is accpeted in the string format. 
+    --> Each MCC can have at max 3 characters. Last byte is reserved for '\0'
+    --> Please make sure to enclose each entry by paranthesis '{'  '}'
+    --> You can follow the commented example
+*/
+custom_disable_fd_mcc custom_disable_full_fd_mcc_table[] = {
+/*Example MCC*/
+    {"FFF"}
+};
+
+#define CUSTOM_DISABLE_FD_MCC_TABLE_SIZE   (sizeof(custom_disable_fd_mcc_table)/sizeof(custom_disable_fd_mcc))
+#define CUSTOM_DISABLE_FULL_FD_MCC_TABLE_SIZE   (sizeof(custom_disable_full_fd_mcc_table)/sizeof(custom_disable_fd_mcc))
+
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_match_plmn_id_to_disable_pre_r8_FD()
+* DESCRIPTION
+* Below function will match the PLMN ID & MCC from the SIM card with the 
+custom table 
+* to check if the legacy FD needs to be disabled.
+*
+* PARAMETERS
+*	none
+* RETURNS
+*	TRUE: enable filter
+*   FALSE: disable filter
+*****************************************************************************/
+kal_bool custom_match_plmn_id_to_disable_pre_r8_FD(kal_char *plmnid , 
+kal_char *mcc)
+{
+    kal_uint8 i = 0;
+
+    for(i = 0; i<CUSTOM_DISABLE_FD_MCC_TABLE_SIZE; i++)
+    {
+        if (strcmp(mcc, (kal_char*)custom_disable_fd_mcc_table[i].mcc) == 0)
+        {
+            return KAL_TRUE;
+        }            
+    }
+    
+    for(i = 0; i<CUSTOM_DISABLE_FD_PLMN_TABLE_SIZE; i++)
+    {
+        if (strcmp(plmnid, (kal_char*)custom_disable_fd_plmn_table[i].plmn_id) == 0)
+        {
+            return KAL_TRUE;
+        }            
+    }
+
+    return KAL_FALSE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_match_plmn_id_to_disable_both_FD()
+* DESCRIPTION
+* Below function will match the PLMN ID & MCC from the SIM card with the custom table 
+* to check if the full R8 FD needs to be disabled.
+*
+* PARAMETERS
+*	none
+* RETURNS
+*	TRUE: enable filter
+*   FALSE: disable filter
+*****************************************************************************/
+kal_bool custom_match_plmn_id_to_disable_both_FD(kal_char *plmnid , kal_char *mcc)
+{
+    kal_uint8 i = 0;
+
+	for(i = 0; i<CUSTOM_DISABLE_FULL_FD_MCC_TABLE_SIZE; i++)
+	{
+		if (strcmp(mcc, (kal_char*)custom_disable_full_fd_mcc_table[i].mcc) == 0)
+		{
+			return KAL_TRUE;
+		}			 
+	}
+	
+    for(i = 0; i<CUSTOM_DISABLE_FULL_FD_PLMN_TABLE_SIZE; i++)
+    {
+        if (strcmp(plmnid, (kal_char*)custom_disable_full_fd_plmn_table[i].plmn_id) == 0)
+        {
+            return KAL_TRUE;
+        }            
+    }
+
+    return KAL_FALSE;
+}
+#endif /*  !defined(L4_NOT_PRESENT) */
diff --git a/mcu/custom/protocol/common/ps/custom_l4_utility.h b/mcu/custom/protocol/common/ps/custom_l4_utility.h
new file mode 100644
index 0000000..d6c8d49
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_l4_utility.h
@@ -0,0 +1,255 @@
+/*****************************************************************************
+*  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) 2010
+*
+*  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:
+ * ---------
+ *   custom_l4_utility.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This file provides the custom engineer mode declarations
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ ****************************************************************************/
+#if !defined(L4_NOT_PRESENT)
+ 
+#ifndef CUSTOM_L4_UTILITY_H
+#define CUSTOM_L4_UTILITY_H
+
+#include "ps_public_enum.h"
+
+#if defined(__GEMINI__) && defined(__SIM_ME_LOCK__)
+#include "smu_common_enums.h"
+#endif
+#include "l4c_as_inter_core_struct.h"
+#include "l4c_common_enum.h"
+
+
+
+typedef enum
+{
+    SMS_CTRL_BY_SIM,
+    CC_CTRL_BY_SIM,
+    SS_CTRL_BY_SIM
+}cm_ctrl_by_sim_enum;
+
+typedef enum
+{
+    L4C_FEATURE_NOT_SUPPORT = 0,
+    L4C_FEATURE_SUPPORT_WR8,
+    L4C_FEATURE_SUPPORT_LR9,
+    L4C_FEATURE_SUPPORT_LR11
+}l4c_feature_support_enum;
+
+typedef enum
+{
+    L4C_PS_MD_VERSION_WR8 = 1,
+    L4C_PS_MD_VERSION_LR9 = 2,
+    L4C_PS_MD_VERSION_LR11 = 3,
+    L4C_PS_MD_VERSION_LR12 = 4,
+    L4C_PS_MD_VERSION_LR13 = 5,
+}l4c_ps_md_version_enum;
+
+
+typedef enum
+{
+    CUSTOM_CC_T303 = 0,
+    CUSTOM_CC_T305,
+    CUSTOM_CC_T308,
+    CUSTOM_CC_T310,
+    CUSTOM_CC_T313
+}custom_cc_timer_enum;
+
+typedef struct
+{    
+    sig_type_enum sig_type;
+    kal_uint8 num_thresholds;     // the number of thresholds
+    kal_int32 array_threshold[L4C_POWER_THRESHOLD_NUM];
+}custom_cell_power_level_threshold;
+
+
+extern kal_wchar *custom_get_at_audio_download_folder();
+extern kal_wchar *custom_get_at_image_download_folder();
+
+#if defined(__NO_PSDATA_SEND_SCRI__) || defined(__FAST_DORMANCY__)
+extern kal_uint8 custom_get_fd_monitor_slot(void);
+extern kal_uint8 custom_get_fd_timer_id(kal_bool is_screen_on, kal_bool is_r8_fd_support, kal_bool is_cpc_suppot);
+extern kal_bool custom_set_fd_timer(kal_uint8 timer_id, kal_uint16 timer_value, kal_uint8 ps_id);
+extern kal_uint16 custom_get_fd_timer(kal_uint8 timer_id, kal_uint8 ps_id);
+#endif
+
+extern kal_int32 custom_signal_strength_cesq_level_to_raw(l4_cesq_param_enum type, kal_uint8 signal_level);
+
+extern kal_uint8 custom_signal_strength_raw_to_cesq_level(l4_cesq_param_enum type, kal_int32 raw_in_qdbm);
+
+extern kal_uint8 custom_signal_strength_raw_to_csq_level(
+                kal_uint8 rat, 
+                kal_int32 rssi_in_qdbm, 
+                kal_int32 RSCP_in_qdbm,
+                kal_int32 EcN0_in_qdbm,
+                kal_uint8 ber,
+                kal_uint8 current_band,
+                kal_int32 RSRQ_in_qdbm,
+                kal_int32 RSRP_in_qdbm,
+                kal_int32 ss_RSRQ_in_qdb,
+                kal_int32 ss_RSRP_in_qdbm);
+
+extern kal_uint8 custom_signal_strength_raw_to_ciev_signal_level(
+                kal_uint8 rat, 
+                kal_int32 rssi_in_qdbm, 
+                kal_int32 RSCP_in_qdbm,
+                kal_int32 EcN0_in_qdbm,
+                kal_uint8 ber,
+                kal_uint8 current_band,
+                kal_int32 RSRQ_in_qdbm,
+                kal_int32 RSRP_in_qdbm,
+                kal_int32 ss_RSRQ_in_qdb,
+                kal_int32 ss_RSRP_in_qdbm);
+
+extern kal_uint8 custom_signal_strength_in_ts27007(kal_int32 strength_in_dbm);
+
+#if defined(__GEMINI__) && defined(__SIM_ME_LOCK__)
+extern kal_bool custom_l4c_root_lock_verify(kal_uint8 updated_sim_slot, 
+                                            smu_pending_password_id_enum updated_type, 
+                                            smu_pending_password_id_enum *pending_password_tbl,
+                                            link_sml_valid_sim_enum *real_sim_verify_state_tbl,
+                                            kal_uint8 *need_unlock_table);
+
+extern kal_bool custom_check_link_sml_not_legal_sim_rule(kal_uint8 updated_sim_slot);
+extern kal_bool custom_check_link_sml_control_slot_sml_sim_status(sml_state_is_valid_sim_enum *control_slot_sml_sim_status);
+#endif
+
+extern kal_bool custom_fill_ecc_category(void);
+extern kal_bool custom_cm_ctrl_by_sim(cm_ctrl_by_sim_enum module);
+extern kal_uint8 custom_config_ss_asn_1(void);
+extern void custom_set_eregchk_method(kal_uint8 cs_method, kal_uint8 ps_method);
+extern void custom_get_eregchk_method(kal_uint8 *cs_method, kal_uint8 *ps_method);
+extern kal_bool custom_cs_reg_state_change_check(kal_uint8 state1, kal_uint8 state2);
+extern kal_bool custom_ps_reg_state_change_check(kal_uint8 state1, kal_uint8 state2);
+extern l4c_feature_support_enum custom_query_feature_is_supported(kal_uint8 feature_id);
+
+extern kal_bool custom_cc_tty_support_amr_wb(void);
+
+extern const kal_uint8* custom_get_define_codec_priority(void);
+
+#if defined(__CC_CUSTOMIZED_TIMER__)
+extern kal_uint32 custom_cc_timer(custom_cc_timer_enum t);
+#endif
+
+extern ca_icon_display_mode_enum custom_get_ca_display_mode(void);
+
+extern kal_bool custom_check_ecc_change_rat_retry_allowed_for_plmn(void);
+
+extern void custom_set_imsi_mapping_to_sbp_id(kal_uint8 *imsi, kal_uint8 mnc_length_from_sim, kal_uint8 sim_id);
+extern kal_uint16 custom_get_sim_sbp_id(void);
+extern kal_uint16 custom_get_sim_sbp_id_by_ps(protocol_id_enum ps_id);
+extern kal_uint16 custom_judge_sbp_id_use_mcc_mnc(kal_uint16 mcc, kal_uint16 mnc);
+extern kal_bool custom_check_india_specific_mcc(kal_uint8 *mcc);
+
+#ifdef __CHR_AB_INFO__
+extern kal_uint8 custom_get_epsnlte_urc_ind_timer(void);
+#endif /* __CHR_AB_INFO__ */
+
+kal_bool custom_filter_secure_data(void);
+extern kal_bool custom_enable_sml_cat_choice(void);
+extern kal_bool custom_check_link_sml_legal_sim_rule(kal_uint8 updated_sim_slot);
+
+extern kal_bool custom_enable_multiple_verify_of_sim_pin_allow(void);
+extern kal_bool custom_enable_sml_cat_choice(void);
+
+extern kal_bool custom_check_if_iccid_at_early_boot_required(void);
+
+#ifdef __ARFCN_TO_CAMERA_SUPPORT__
+extern void custom_l4_camera_hopping_notify_callback(kal_uint32 value);
+#endif
+
+#ifdef __CARRIER_RESTRICTION__
+extern kal_uint8 custom_get_crrst_sml_wild_char(void);
+#endif /* __CARRIER_RESTRICTION__ */
+
+
+extern kal_bool custom_get_threshold_cell_power_by_sig_type(sig_type_enum sig_type, kal_uint8 *threshold_setting);
+
+
+
+extern kal_uint8 *custom_get_wea_test_data(kal_uint8 mode,kal_uint16 *wea_test_data_len);
+
+extern kal_uint8 *custom_get_cb_info(kal_uint8 mode,kal_uint16 *cb_data_len,kal_uint16 *msg_id,kal_uint16 *serial_no);
+extern kal_bool custom_sml_cat_verify_pass_permanent_unlock(void);
+extern kal_uint8 custom_get_sml_wild_char(void);
+
+#ifdef __DSBP_NETWORK_LOSS_SUSPEND__
+extern kal_uint8 custom_l4_get_dsbp_guard_timer();
+#endif
+
+#ifdef __FEATURE_SAMSUNG_RF_SAR_EUR_CHK__
+extern kal_bool custom_check_if_EU_US_network(const kal_char *nw_mcc);
+#endif
+
+extern kal_char *custom_op129_skip_signature_verify_pattern(void);
+
+extern kal_bool custom_l4c_check_lte_only_camped_network(kal_uint8 *plmn);
+
+extern kal_bool custom_l4c_check_country_specific_mcc(kal_uint8 *plmn, kal_uint8 country_code);
+
+extern kal_uint32 custom_get_l4c_lte_only_timeout(void);
+
+extern l4c_sim_oper_enum custom_check_imsi_to_set_rat(kal_uint8 *imsi);
+
+#if defined (__TC10__)
+extern kal_uint32 sbp_query_id(void);
+#endif
+
+extern kal_bool custom_check_cnap_allowed_for_plmn(kal_uint8* camped_plmn);
+
+extern kal_bool custom_check_increment_inv_id_count(kal_uint32 plmn_id);
+
+extern kal_uint32 custom_config_wait_on_lte_paging_timer(void);
+
+extern kal_bool custom_match_plmn_id_to_disable_pre_r8_FD(kal_char *plmnid , kal_char *mcc);
+
+extern kal_bool custom_match_plmn_id_to_disable_both_FD(kal_char *plmnid , kal_char *mcc);
+#endif /* CUSTOM_L4_UTILITY_H */
+
+#endif /* !defined(L4_NOT_PRESENT) */
diff --git a/mcu/custom/protocol/common/ps/custom_l5.c b/mcu/custom/protocol/common/ps/custom_l5.c
new file mode 100644
index 0000000..265978a
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_l5.c
@@ -0,0 +1,428 @@
+#include "kal_public_api.h"
+#ifdef __GCC_COMPILER__
+#include <strings.h>
+#endif
+#include <string.h>
+#include "l5_common.h"
+#include "l5_msgid.h"
+#include "custom_l5.h"
+
+
+//type: string type terminated by '\0'
+//value: uint32
+kal_bool l5custom_is_ok_to_write_dipc_config(kal_uint8 *type)
+{
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+    return KAL_TRUE;
+}
+
+kal_bool l5custom_is_ok_to_write_nvram(kal_uint32 file_idx)
+{
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+    return KAL_FALSE;
+}
+
+typedef struct {
+    kal_char config_type_str[32];
+    kal_bool is_user_sensitive;
+    kal_uint8 valid_ps_id; //bitmap
+    module_type module_id;
+} l5_general_modem_config_struct;
+
+static l5_general_modem_config_struct gmc_table[] = {
+    {"sample", KAL_FALSE, 0xff, MOD_L5IO},
+	{"L5_TO_MMTST", KAL_FALSE, 0xff, MOD_MMRF_XL1TST},
+	{"L5_TO_NL1", KAL_FALSE, 0xff, MOD_NL1},
+};
+
+kal_bool l5_general_modem_configure_req_custom(kal_uint8 ps_id, kal_bool is_set, ilm_struct *ilm_ptr)
+{
+    l5_general_modem_configure_set_req_struct *set_req_ptr;
+    l5_general_modem_configure_get_req_struct *get_req_ptr;
+    //peer_buff_struct *peer_buff_ptr = ilm_ptr->peer_buff_ptr;
+
+    kal_uint32 i, max;
+    char name [32];
+    max = sizeof(gmc_table)/sizeof(l5_general_modem_config_struct);
+
+    if (is_set) { //set
+        set_req_ptr = (l5_general_modem_configure_set_req_struct *)ilm_ptr->local_para_ptr;
+        memcpy(name, (char *)set_req_ptr->config_type, sizeof(name));
+    } else { //query
+        get_req_ptr = (l5_general_modem_configure_get_req_struct *)ilm_ptr->local_para_ptr;
+        memcpy(name, (char *)get_req_ptr->config_type, sizeof(name));
+    }
+
+    for (i = 0; i < max; i++) {
+        if (strcasecmp((char *)gmc_table[i].config_type_str, name) == 0) {
+            if (gmc_table[i].valid_ps_id & (1 << ps_id)) {
+                //set destination module id
+                ilm_ptr->dest_mod_id = gmc_table[i].module_id + ps_id;
+
+                if (gmc_table[i].is_user_sensitive) {
+                    //ilm_ptr->sap_id =
+                }
+
+                //customization here if necessary
+                if (is_set) { //set operation
+
+                } else { //get operation
+
+                }
+
+                return KAL_TRUE;
+            } else {
+                return KAL_FALSE;
+            }
+        }
+
+    }
+
+    return KAL_FALSE;
+}
+
+//this is just for the init function in boot procedure. also can be cfg after boot up
+//this function only config for <new sms storage> and <read msg> and <write msg>. <new cell broadcast>&<new status report> only support save in HOST now
+//Even prefer not save in HOST, some special SMS would not save in DEVICE(and use MIPC_IND/CMD to indicate HOST), like supl msg, refer to custom_l5_sms_force_relay_to_HOST
+kal_uint8 custom_l5_sms_storage_select_init()
+{
+    return 0;      //SM: prefer only save in DEVICE_SIM, new sms would notify HOST(AP, USER) with MIPC_IND which contains memory index
+    // return 1;    //ME: prefer save in DEVICE_NVRAM
+    // return 2;    //TE: prefer save in HOST, new sms would notify HOST(AP,USER) by MIPC_IND or MIPC_CMD according to ack option
+    // return 4;    //MT: prefer save in DEVICE_SIM; if SIM_full or SIM_mem_invalid, then try save in DEVICE_NVRAM
+}
+
+//this is just for the init function in boot procedure. also can be cfg after boot up
+kal_bool custom_l5_sms_need_ack_init()
+{
+    //return KAL_TRUE;    //If the new SMS not save in DEVICE(DEVICE relay the raw data to HOST), this option would take effect. MIPC_CMD would be userd to notify HOST(AP,USER) for new SMS/DS
+    return KAL_FALSE;   //MIPC_IND would be used to notify HOST(AP, USER) for new SMS/DS
+}
+
+//you can decide what sms should relay to HOST use NEW_SMS_IND/CMD even if config save in DEVICE.
+//If this function return TRUE, SMS would not save in DEVICE and notify HOST using NEW_SMS_IND/CMD according to ack_prefer
+kal_bool custom_l5_sms_force_relay_to_HOST(const kal_uint8* sms_ptr)
+{
+    kal_uint8 idx = 0; //init point to sca_len
+    kal_uint8 first_octer = 0;
+    kal_bool tp_udhi = KAL_FALSE;
+    kal_uint8 oa_len = 0;
+    kal_uint8 udh_l = 0;
+    kal_uint8 udh_idx = 0;
+    kal_bool is_need_relay = KAL_FALSE;
+
+    if(NULL == sms_ptr) {
+    return KAL_FALSE;
+    }
+    idx++; //point to SCA start
+    idx+=sms_ptr[0]; //point to first_octer
+    first_octer = sms_ptr[idx++]; //point to OA_L
+    tp_udhi = 0==(first_octer&0x40) ? KAL_FALSE : KAL_TRUE;
+    oa_len = sms_ptr[idx];
+    idx+=(1 + 1 + (oa_len+1)/2); //point to PID
+    idx++; //point to DCS
+    //class0 need to relay, this is in MBIM spec
+    if(0x10 == (sms_ptr[idx] & 0x13)) return KAL_TRUE;
+    idx++; //point to SCTS
+    idx+=7; //point to UDL
+    if(KAL_TRUE == tp_udhi) {
+        idx++; //point to UDH_L
+        udh_l = sms_ptr[idx];
+        for (udh_idx = 1; udh_idx < udh_l; udh_idx++){
+            //16-bit application port
+            if(0x05 == sms_ptr[idx+udh_idx] && 4 == sms_ptr[idx+udh_idx+1]) {
+                // TODO: Discuss with SMS user to confirm jugde standard
+                kal_uint16 dest_port = (((kal_uint16)(sms_ptr[idx+udh_idx+2]))<<8) + sms_ptr[idx+udh_idx+3];
+                //using last valid port to judge
+                if(7275 == dest_port || 2948 == dest_port) is_need_relay = KAL_TRUE;
+                else is_need_relay = KAL_FALSE;
+            }
+            udh_idx+=(1+sms_ptr[idx+udh_idx+1]);
+        }
+    }
+    return is_need_relay;
+}
+
+// with MBIM project, we would transfer the 3gpp2_mt_sms -> 3gpp_mt_sms, then save the 3gpp_mt_sms in DEVICE
+// you can decide what sms should relay to HOST use NEW_SMS_IND even if config save in DEVICE.
+// currently the format follow CS.0015
+// though not support C2K, but datacard project could recv 3gpp2 format SMS using IMS. this api is for 3gpp2 format MT sms.
+kal_bool custom_l5_sms_force_relay_to_HOST_3gpp2(const kal_uint8* c2k_ptr, kal_uint8 pdu_len)
+{
+    kal_uint16 c2k_idx=1;
+
+    for(;c2k_idx<pdu_len;c2k_idx++){
+        // get Message Identifier tlv first
+        if(0x00 == c2k_ptr[c2k_idx]) {
+            // if PUSH msg, force relay
+            if(c2k_idx+3<pdu_len && 2 == c2k_ptr[c2k_idx+1] && 0x10 == c2k_ptr[c2k_idx+2] && 0x04 == c2k_ptr[c2k_idx+3]){
+                return KAL_TRUE;
+            } else {
+                return KAL_FALSE;
+            }
+        }
+        c2k_idx += (c2k_ptr[c2k_idx+1]+1);
+    }
+    return KAL_FALSE;
+}
+
+kal_bool custom_l5_custom_device_caps(l5_custom_device_cap_info_struct *device_caps)
+{
+    /*
+     * If any data of device_caps has been modified, return KAL_TRUE
+     * Example:
+     *  device_caps->device_type = 3;
+     *  return KAL_TRUE;
+     * If there is no any modification for data of device_cap, return KAL_FALSE
+     */
+    return KAL_FALSE;
+}
+
+kal_bool custom_l5_custom_provider_name(kal_uint8 *provider_name, kal_uint16 *len, kal_uint32 sbp_id)
+{
+    /*
+     * If provider_name have assigned value, return KAL_TRUE
+     * Example:
+     *  Please provide the buff data
+     *  MTK will not do any processing on buff data     
+     *  switch (sbp_id) {
+     *  	case 2:
+     *			kal_uint8 buff[] = {0x41, 0x00, 0x42, 0x00, 0x43, 0x00};
+     *  		memcpy(provider_name, buff, sizeof(buff)); 
+     *  		*len = sizeof(buff);
+     *		 	break;
+     *	 	case 3:
+     *		 	kal_uint8 buff[] = {0x2d, 0x4e, 0xfd, 0x56};
+     *		 	memcpy(provider_name, buff, sizeof(buff)); 
+     *		 	*len = sizeof(buff);			 
+     *		 	break;
+     *	 	default:
+     *		 	return KAL_FALSE;	 
+     * }
+     *   return KAL_TRUE;
+     *
+     * If there is no any assignment, return KAL_FALSE
+     */
+     
+ 	return KAL_FALSE;
+}    
+
+kal_bool custom_l5_signal_state_rsrp_threshold(uint32_t *rsrp_threshold)
+{
+    /*
+     * If rsrp_threshold have assigned value, return KAL_TRUE
+     * Example:
+     *  *rsrp_threshold = 5; (Value should not be less than 0)
+     *   return KAL_TRUE;
+     * If there is no any assignment, return KAL_FALSE
+     */
+    return KAL_FALSE;
+}
+
+kal_bool custom_l5_packet_service_speed(uint32_t data_class, kal_uint64 *uplink_speed_ptr, kal_uint64 *downlink_speed_ptr)
+{
+    /*
+     * If uplink_speed_ptr and downlink_speed_ptr have assigned values, return KAL_TRUE
+     * Example:
+     *  *uplink_speed_ptr = 250000000;
+     *  *downlink_speed_ptr = 500000000;
+     *  return KAL_TRUE;
+     * If there is no any assignment, return KAL_FALSE
+     */
+    return KAL_FALSE;
+}
+
+kal_bool custom_l5_nw_enable_EONS()
+{
+    /*
+     *If you want to enable EONS, return KAL_TRUE
+     *If there is no need to enable EONS, return KAL_FALSE
+     */
+     return KAL_FALSE;
+}
+
+/******************************************************************************
+**if you want to disable one or more rat, please modify this array
+**   0 means don't disable the rat
+**   1 means disable the rat
+*******************************************************************************/
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+kal_bool custom_l5_nw_enable_EDMFAPP_6_3()
+{
+    /*
+	If you want to enable EDMFAPP_6_3, return KAL_TRUE, else return KAL_FALSE
+     */
+    return KAL_FALSE;
+}
+
+kal_bool custom_l5_signal_check(l5_custom_signal_state *signal_state)
+{
+    if(signal_state->rsrp_snr_count != 0)
+    {
+        for(int i = 0; i < signal_state->rsrp_snr_count; i++)
+        {
+            if(signal_state->signal[i].rsrp_dbm >= -99)
+                signal_state->signal[i].rsrp = 5;
+            else if(signal_state->signal[i].rsrp_dbm >= -109 && -99 > signal_state->signal[i].rsrp_dbm)
+                signal_state->signal[i].rsrp = 4;
+			else if(signal_state->signal[i].rsrp_dbm >= -114 && -109 > signal_state->signal[i].rsrp_dbm)
+                signal_state->signal[i].rsrp = 3;
+            else if(signal_state->signal[i].rsrp_dbm >= -119 && -114 > signal_state->signal[i].rsrp_dbm)
+				signal_state->signal[i].rsrp = 2;
+			else if(signal_state->signal[i].rsrp_dbm >= -120 && -119 > signal_state->signal[i].rsrp_dbm)
+                signal_state->signal[i].rsrp = 1;
+            else if(-120 > signal_state->signal[i].rsrp_dbm)
+                signal_state->signal[i].rsrp = 0;
+        }
+    }
+
+     /* If any data of signal has been modified, return KAL_TRUE */
+	 return KAL_FALSE;
+}
+
+typedef struct{
+kal_uint32 type;
+kal_uint32 len;
+kal_uint32 tid;
+} l5_msg_header;
+
+void custom_l5_MBIM_message(void* message_buffer, uint32_t msg_length)
+{
+    l5_msg_header* p = (l5_msg_header *)message_buffer;
+    kal_prompt_trace(MOD_L5IO, "MBIM_TYPE:%u, MBIM_LEN:%u, MBIM_TID:%u", p->type, p->len, p->tid);
+
+    return;
+}
+
+//The example of the mapping array for the oper_name by plmn_id and gid1.
+//the list is the customized,offical release will be comment out.
+l5u_oper_name_mapping_item g_l5u_oper_name_mapping_table[] = {
+//     plmn_id                gid1                  gid1_length          oper_name
+    {"23430",       {0xee},       1,               "EE"},
+    {"23433",       {0xff},       1,               "FF"},
+    {"23430",       {0xc3},       1,               "BT"},
+    {"23433",       {0xb3},       1,               "BT"},
+};
+
+/*
+This func just a example, Customer can redefine implementation method and mapping list according to their own needs.
+*/
+kal_bool custom_l5_oper_name_mapping_by_gid1(kal_char *oper_name, kal_char *plmn_id, kal_uint8 plmn_length, kal_uint8 *gid1, kal_uint8 gid1_max_length)
+{
+    kal_uint32 mapping_table_size = 0;
+    kal_uint32 index = 0;
+    kal_uint8 i = 0;
+    kal_bool result = KAL_FALSE;
+    //kal_uint8 gid1_length = 0;
+    kal_bool is_gid1_match = KAL_TRUE;
+    //kal_uint32 p_gid1 = 0;
+/*
+    The pointer plmn_id and gid1 points to the value of plmn and gid1,whitch map to the oper_name in the mapping list.
+    if call the func ,it will select the mapping list, and map to oper_name accprding to plmn_id and gid1.
+    if find in the list,it will be return KAL_TRUE; otherwise return KAL_FALSE.
+
+    Example:
+    If you get a valid oper_name from the list ,
+        memcpy(oper_name, g_l5u_oper_name_mapping_table[index].oper_name, sizeof(oper_name));
+        return KAL_TRUE;
+    If there can't get valid oper_name:
+        return KAL_FALSE;
+
+    The example code as follow:
+    **this is just a demo,customer shoult according their needs to coding by themself.
+*/
+    mapping_table_size = (kal_uint32)sizeof(g_l5u_oper_name_mapping_table)/sizeof(g_l5u_oper_name_mapping_table[0]);
+    for (; index <= mapping_table_size - 1; index++) {
+        for (; i <= g_l5u_oper_name_mapping_table[index].gid1_length - 1; i++) {
+            if (g_l5u_oper_name_mapping_table[index].gid1[i] == gid1[i]) {
+                continue;
+            } else {
+                is_gid1_match = KAL_FALSE;
+                break;
+            }
+        }
+        if ((strncmp(g_l5u_oper_name_mapping_table[index].plmn_id, plmn_id, 
+                sizeof(g_l5u_oper_name_mapping_table[index].plmn_id) > plmn_length ? plmn_length : sizeof(g_l5u_oper_name_mapping_table[index].plmn_id)) == 0) 
+                && is_gid1_match == KAL_TRUE) {
+            memcpy(oper_name, g_l5u_oper_name_mapping_table[index].oper_name, strlen(g_l5u_oper_name_mapping_table[index].oper_name));
+            result = KAL_TRUE;
+            break;
+        }
+    }
+    return result;
+}
+
+/******************************************************************************
+**You can modify this fuction to choose the mode of 5g icon display
+*******************************************************************************/
+kal_uint32 custom_l5_get_5g_icon_display_mode()
+{
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+    return L5_5G_ICON_MODE_JP;
+}
\ No newline at end of file
diff --git a/mcu/custom/protocol/common/ps/custom_l5.h b/mcu/custom/protocol/common/ps/custom_l5.h
new file mode 100644
index 0000000..a921ed2
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_l5.h
@@ -0,0 +1,90 @@
+#ifndef _CUSTOM_L5_H_
+#define _CUSTOM_L5_H_
+#include "kal_public_defs.h"
+#include "l5_common.h"
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+typedef struct {
+    kal_uint32 device_type;
+    kal_uint32 cellular_class;
+    kal_uint32 voice_class;
+    kal_uint32 sim_class;
+    kal_uint32 data_class;
+    kal_uint32 sms_caps;
+    kal_uint32 control_caps;
+    kal_uint16 max_activated_contexts;
+    kal_uint8 custom_class_name[11];
+    kal_uint8 device_id[18];
+    kal_uint8 firmware_info[30];
+    kal_uint8 hardware_info[30];
+} l5_custom_device_cap_info_struct;
+
+typedef struct{
+    kal_int32 rsrp;
+    kal_int32 snr;
+    kal_int32 rsrp_dbm;
+    kal_int32 snr_db;
+} l5_custom_rsrp_snr_info;
+
+typedef struct{
+    kal_uint32 rsrp_snr_count;
+    kal_int32 rssi;
+    kal_int32 rssi_dbm;
+	kal_int32 rscp_dbm;
+    kal_int32 ecn0_dbm;
+    l5_custom_rsrp_snr_info signal[2];
+} l5_custom_signal_state;
+
+//the example of the structure of the oper_name mapping intem of plmn_id and gid1.
+typedef struct {
+    kal_char *plmn_id;
+    kal_uint8 gid1[20];
+    kal_uint8 gid1_length;
+    kal_char *oper_name;
+} l5u_oper_name_mapping_item;
+
+typedef enum {
+    L5_5G_ICON_MODE_JP = 0,
+    L5_5G_ICON_MODE_D_CACHE,
+} l5_5g_icon_display_mode;
+
+eventid custom_l5_timer_set(CUSTOM_L5_TIMER_CB cb, void *cb_priv, kal_uint32 ms);
+void custom_l5_timer_cancel(eventid event_id);
+
+kal_bool l5_general_modem_configure_req_custom(kal_uint8 ps_id, kal_bool is_set, ilm_struct *ilm_ptr);
+kal_uint8 custom_l5_sms_storage_select_init();
+kal_bool custom_l5_sms_need_ack_init();
+kal_bool custom_l5_sms_force_relay_to_HOST(const kal_uint8* sms_ptr);
+kal_bool custom_l5_sms_force_relay_to_HOST_3gpp2(const kal_uint8* sms_ptr, kal_uint8 pdu_len);
+kal_bool l5custom_is_ok_to_write_nvram(kal_uint32 file_idx);
+kal_bool l5custom_is_ok_to_write_dipc_config(kal_uint8 *type);
+
+#if 0
+/* under construction !*/
+#endif
+
+kal_bool custom_l5_custom_device_caps(l5_custom_device_cap_info_struct *device_caps);
+kal_bool custom_l5_custom_provider_name(kal_uint8 *provider_name, kal_uint16 *len, kal_uint32 sbp_id);
+kal_bool custom_l5_signal_state_rsrp_threshold(uint32_t *rsrp_threshold);
+kal_bool custom_l5_packet_service_speed(uint32_t data_class, kal_uint64 *uplink_speed_ptr, kal_uint64 *downlink_speed_ptr);
+kal_bool custom_l5_nw_enable_EONS();
+kal_bool custom_l5_nw_enable_EDMFAPP_6_3();
+kal_bool custom_l5_signal_check(l5_custom_signal_state *signal);
+void custom_l5_MBIM_message(void* message_buffer, uint32_t msg_length);
+kal_bool custom_l5_oper_name_mapping_by_gid1(kal_char *oper_name, kal_char *plmn_id, kal_uint8 plmn_length, kal_uint8 *gid1, kal_uint8 gid1_max_length);
+kal_uint32 custom_l5_get_5g_icon_display_mode();
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_l5_at.c b/mcu/custom/protocol/common/ps/custom_l5_at.c
new file mode 100644
index 0000000..acf5e33
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_l5_at.c
@@ -0,0 +1,695 @@
+#include "custom_l5.h"
+#include "custom_l5_at.h"
+#include "pcie_if.h"
+#if (defined(__PCIE_LTR_SUPPORT__)||defined(__PCIE_TRAS_SUPPORT__))&&defined(__MTK_TARGET__)
+#include "dpcopro_ltr_tras_custom.h"
+#endif
+
+void remove_spaces(char* s);
+//normal flow of CUSTOM_L5_AT_REQ_CB
+static void custom_at_cb_cmn_hdlr(kal_uint32 ch_id, custom_at_rsp_type_enum rsp_type, kal_uint16 err_code, char *at_data, kal_uint16 at_data_len)
+{
+    switch(rsp_type) {
+        case CUSTOM_AT_RSP_ERR:
+            custom_l5_send_at_rsp_err(ch_id, err_code);
+            break;
+        case CUSTOM_AT_RSP_OK:
+            custom_l5_send_at_rsp_ok(ch_id);
+            break;
+        case CUSTOM_AT_RSP_INT:
+            custom_l5_send_at_rsp_int(ch_id, at_data, at_data_len);
+            break;
+        default:
+            break;
+    }
+}
+
+//#define __L5_TIMER_TEST__
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifdef __L5_TIMER_TEST__
+eventid custom_at_timer_id;
+
+//AT%TIMER to start the timer
+//AT%TIMER0 to stop the tiemr
+
+static void custom_at_timer_cb(void *priv)
+{
+    kal_uint32 i = (kal_uint32)priv;
+
+    //demo priv usage
+    kal_prompt_trace(MOD_L5IO, "TIMER %d", i);
+    i++;
+
+    //demo send MIPC IND
+    mipc_msg_t *msg_ind_ptr;
+    //SETP1: build MIPC message
+    msg_ind_ptr = mipc_msg_init(MIPC_INTERNAL_TEST_IND, MIPC_MSG_PS0);
+    //SETP2: add paramters (in this case, there is only one TLV parameter)
+    //mipc_msg_add_tlv_uint8(msg_indptr, MIPC_INTERAL_TEST_IND_T_MODE, 0);
+
+    //send IND to sAP
+    custom_l5_at_send_mipc_ind(msg_ind_ptr);
+
+    //set event again for next one
+    custom_at_timer_id = custom_l5_timer_set(custom_at_timer_cb, (void *)i, 1000);
+}
+
+void custom_at_timer_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    //AT%TIMER0 to stop timer
+    if (at_data[8] == '0') {
+        if (custom_at_timer_id) {
+            custom_l5_timer_cancel(custom_at_timer_id);
+        }
+        custom_l5_send_at_rsp(ch_id, "OK\r", strlen("OK\r"));
+        return;
+    }
+    //otherwise, start timer
+    custom_at_timer_id = custom_l5_timer_set(custom_at_timer_cb, 0, 1000);
+    custom_l5_send_at_rsp(ch_id, "OK\r", strlen("OK\r"));
+}
+#endif
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+static void custom_at_custom_cb(kal_uint32 ch_id, custom_at_rsp_type_enum rsp_type, kal_uint16 err_code, char *at_data, kal_uint16 at_data_len, void *priv_ptr)
+{
+    kal_prompt_trace(MOD_L5IO, "%s[%d] %d", __FUNCTION__, rsp_type, at_data_len);
+    //send response to Host/AP
+    custom_at_cb_cmn_hdlr(ch_id, rsp_type, err_code, at_data, at_data_len);
+}
+
+void custom_at_custom_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    if(KAL_FALSE == custom_l5_at_send_at_req(ch_id, custom_at_custom_cb, NULL, "AT+XXX=1\r", strlen("AT+XXX=1\r"))){
+        custom_l5_send_at_rsp_err(ch_id, 0);
+    }
+}
+
+void custom_at_customa_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    if(KAL_FALSE == custom_l5_at_send_at_req(ch_id, custom_at_custom_cb, NULL, "AT+XXX=2\r", strlen("AT+XXX=2\r"))){
+        custom_l5_send_at_rsp_err(ch_id, 0);
+    }
+}
+
+void custom_at_custmulti_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    if(KAL_FALSE == custom_l5_at_send_at_req(ch_id, custom_at_custom_cb, NULL, "AT+X=1;+XX=2;+XXX=3\r", strlen("AT+X=1;+XX=2;+XXX=3\r"))){
+        custom_l5_send_at_rsp_err(ch_id, 0);
+    }
+}
+
+static void custom_at_custtrip_cb(kal_uint32 ch_id, custom_at_rsp_type_enum rsp_type, kal_uint16 err_code, char *at_data, kal_uint16 at_data_len, void *priv_ptr)
+{
+    kal_uint32 *cache = (kal_uint32*)priv_ptr;
+    kal_prompt_trace(MOD_L5IO, "%s[%d] %d", __FUNCTION__, rsp_type, at_data_len);
+    if(CUSTOM_AT_RSP_INT == rsp_type) {
+        custom_l5_send_at_rsp_int(ch_id, at_data, at_data_len);
+        return;
+    }
+    (*cache)++;
+    if(CUSTOM_AT_RSP_ERR == rsp_type)
+        *cache = ((*cache)&0xffff)|(err_code<<16);
+    if(((*cache)&0xff) ==(((*cache)&0xff00)>>8)) {
+        if(0xffff0000 != ((*cache)&0xffff0000))
+            custom_l5_send_at_rsp_err(ch_id, (*cache)>>16);
+        else
+            custom_l5_send_at_rsp_ok(ch_id);
+        *cache = 0;
+    }
+}
+
+void custom_at_custtrip_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    static kal_uint32 rsp_num = 0;
+    if(0 != rsp_num) {
+        custom_l5_send_at_rsp_err(ch_id, 0);
+    }
+    if(KAL_FALSE == custom_l5_at_send_at_req(ch_id, custom_at_custtrip_cb, (void*)(&rsp_num), "AT+CMGD=1\r", strlen("AT+CMGD=1\r")))
+        custom_l5_send_at_rsp_err(ch_id, 0);
+    rsp_num = 0xffff0300;
+    if(KAL_FALSE == custom_l5_at_send_at_req(ch_id, custom_at_custtrip_cb, (void*)(&rsp_num), "AT+X=1;+XX=2;+XXX=3\r", strlen("AT+X=1;+XX=2;+XXX=3\r")))
+        rsp_num -= 0x100;
+    if(KAL_FALSE == custom_l5_at_send_at_req(ch_id, custom_at_custtrip_cb, (void*)(&rsp_num), "AT+XXXX=4\r", strlen("AT+XXXX=4\r")))
+        rsp_num -= 0x100;
+}
+
+void custom_at_custlarg_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    kal_uint16 val = 0;
+    if(1==sscanf(at_data, "AT+CUSTLARG=%hu\r", &val)) {
+        kal_char *data = get_ctrl_buffer(9000);
+        kal_uint8 idx = 0;
+        kal_mem_set(data, 0x30, 9000);
+        for(idx=1; idx<10; idx++) {
+            data[1000*(idx-1)] = idx+'0';
+        }
+        switch(val) {
+            case 1:
+                custom_l5_send_at_rsp_int(ch_id, data, 1);
+                custom_l5_send_at_rsp_int(ch_id, data, 2);
+                custom_l5_send_at_rsp_int(ch_id, data, 4);
+                custom_l5_send_at_rsp_int(ch_id, data, 8);
+                custom_l5_send_at_rsp_int(ch_id, data, 16);
+                custom_l5_send_at_rsp_int(ch_id, data, 32);
+                custom_l5_send_at_rsp_int(ch_id, data, 64);
+                custom_l5_send_at_rsp_int(ch_id, data, 128);
+                custom_l5_send_at_rsp_int(ch_id, data, 200);
+                custom_l5_send_at_rsp_int(ch_id, data, 500);
+                break;
+            case 2:
+                custom_l5_send_at_rsp_int(ch_id, data, 1000);
+                custom_l5_send_at_rsp_int(ch_id, data, 1000);
+                custom_l5_send_at_rsp_int(ch_id, data, 1000);
+                custom_l5_send_at_rsp_int(ch_id, data, 1000);
+                break;
+            case 3:
+                custom_l5_send_at_rsp_int(ch_id, data, 8200);
+                custom_l5_send_at_rsp_int(ch_id, data, 2500);
+                custom_l5_send_at_rsp_int(ch_id, data, 1200);
+                custom_l5_send_at_rsp_int(ch_id, data, 600);
+                break;
+            case 4:
+                custom_l5_send_at_rsp_int(ch_id, data, 1);
+                custom_l5_send_at_rsp_int(ch_id, data, 2);
+                custom_l5_send_at_rsp_int(ch_id, data, 4);
+                custom_l5_send_at_rsp_int(ch_id, data, 8);
+                custom_l5_send_at_rsp_int(ch_id, data, 16);
+                custom_l5_send_at_rsp_int(ch_id, data, 32);
+                custom_l5_send_at_rsp_int(ch_id, data, 64);
+                custom_l5_send_at_rsp_int(ch_id, data, 128);
+                custom_l5_send_at_rsp_int(ch_id, data, 200);
+                custom_l5_send_at_rsp_int(ch_id, data, 500);
+                custom_l5_send_at_rsp_int(ch_id, data, 1000);
+                custom_l5_send_at_rsp_int(ch_id, data, 2000);
+                custom_l5_send_at_rsp_int(ch_id, data, 4000);
+                break;
+            case 5:
+                custom_l5_send_at_rsp_int(ch_id, data, 4000);
+                custom_l5_send_at_rsp_int(ch_id, data, 4000);
+                custom_l5_send_at_rsp_int(ch_id, data, 4000);
+                custom_l5_send_at_rsp_int(ch_id, data, 4000);
+                custom_l5_send_at_rsp_int(ch_id, data, 4000);
+                custom_l5_send_at_rsp_int(ch_id, data, 4000);
+                custom_l5_send_at_rsp_int(ch_id, data, 4000);
+                custom_l5_send_at_rsp_int(ch_id, data, 4000);
+                custom_l5_send_at_rsp_int(ch_id, data, 4000);
+                custom_l5_send_at_rsp_int(ch_id, data, 4000);
+                custom_l5_send_at_rsp_int(ch_id, data, 4000);
+                custom_l5_send_at_rsp_int(ch_id, data, 4000);
+                custom_l5_send_at_rsp_int(ch_id, data, 4000);
+                break;
+            default:
+                break;
+        }
+        free_ctrl_buffer(data);
+        custom_l5_send_at_rsp_ok(ch_id);
+    } else {
+        custom_l5_send_at_rsp_err(ch_id, 50);
+    }
+}
+
+void custom_at_custcust_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    static kal_uint8 val = 0;
+    char at_str[32] = {0};
+
+    snprintf(at_str, sizeof(at_str), "AT+CUSTCUST=%hhu\r", ++val);
+    kal_prompt_trace(MOD_L5IO, "CUSTCUST:%s", at_str);
+    if(KAL_FALSE == custom_l5_at_send_at_req(ch_id, custom_at_custom_cb, NULL, at_str, strlen(at_str))){
+        custom_l5_send_at_rsp_err(ch_id, 0x1305);
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+static void custom_at_ccid_cb(kal_uint32 ch_id, custom_at_rsp_type_enum rsp_type, kal_uint16 err_code, char *at_data, kal_uint16 at_data_len, void *priv_ptr)
+{
+    char data[64] = {0};
+    kal_prompt_trace(MOD_L5IO, "%s[%d] %d", __FUNCTION__, rsp_type, at_data_len);
+
+    if (CUSTOM_AT_RSP_INT == rsp_type) {
+        //translate +ICCID to +CCID
+#if defined(__MTK_TARGET__)
+        snprintf(data, at_data_len < sizeof(data)? at_data_len:sizeof(data), "+CCID%s", index(at_data, ':'));
+
+#else
+        snprintf(data, sizeof(data) - 1, "+CCID: 1234567890");
+#endif
+        //send response to Host/AP
+        custom_l5_send_at_rsp_int(ch_id, data, strlen(data));
+        return;
+    }
+    //send response to Host/AP
+    custom_at_cb_cmn_hdlr(ch_id, rsp_type, err_code, at_data, at_data_len);
+}
+
+void custom_at_ccid_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    //send AT command to protocol. custom_at_ccid_cb will be invoked when intermediate and result returned
+    custom_l5_at_send_at_req(ch_id, custom_at_ccid_cb, NULL, "AT+ICCID\r", strlen("AT+ICCID\r"));
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+void custom_at_xpcierate_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    kal_uint32 lane = 0;
+    kal_uint32 speed = 0;
+    char data[30] = "";
+
+    kal_prompt_trace(MOD_L5IO, "%s", __FUNCTION__);
+#ifdef __HIF_PCIE_SUPPORT__
+    pcie_link_status_t pcie_link_status;
+    pcie_report_link_status(&pcie_link_status);
+    lane = pcie_link_status.lane_num;
+    speed = pcie_link_status.rate_level;
+#endif
+    snprintf(data, sizeof(data), "+XPCIERATE: %d, %d\r\n", lane, speed);
+    custom_l5_send_at_rsp_int(ch_id, data, strlen(data));
+    custom_l5_send_at_rsp_ok(ch_id);
+
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+void custom_at_xpcielb_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+#if defined(__MTK_TARGET__) && (defined(MT6880)|| defined(MT6890))
+    kal_uint32 lane = 2;
+    char buf[30] = {0};
+    char *ptr = NULL;
+#endif
+
+    kal_prompt_trace(MOD_L5IO, "%s", __FUNCTION__);
+#if defined(__MTK_TARGET__) && (defined(MT6880)|| defined(MT6890))
+
+    sprintf(buf, at_data);
+    remove_spaces(buf);
+
+    /*remove AT CMD in at_data, only keep argument after "=" e.g. AT+XXX=123 only keep 123 */
+    ptr = strchr(buf, '=');
+
+    if(ptr){
+
+        ptr++;
+        ptr [ strcspn(ptr, "\r\n") ] = '\0';
+
+        if (strcmp(ptr, "1") == 0) {
+            lane = 1;
+        }else{
+            /*Maximun supported lane is 2*/
+            lane = 2;
+        }
+    }
+
+    if (pcie_phy_loopback_test(lane)){
+        custom_l5_send_at_rsp_ok(ch_id);
+    }
+    else {
+#endif
+        custom_l5_send_at_rsp_err(ch_id, 0);
+#if defined(__MTK_TARGET__) && (defined(MT6880)|| defined(MT6890))
+    }
+#endif
+}
+
+void remove_spaces(char* s) {       //remove whiltespaces
+    const char* d = s;
+    do {
+        while (*d == ' ') {
+            ++d;
+        }
+    } while ((*s++ = *d++));
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+void custom_at_xpciemtcmos_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    /*input example: AT+XPCIEMTCMOS=mac,1 */
+    char data[70] = {0};
+    kal_bool success = KAL_TRUE;
+
+#if defined(__MTK_TARGET__) && (defined(MT6880)|| defined(MT6890))
+    char *arg[5] = {0};
+    char buf[30] = {0};
+    char *substr = NULL, *saveptr = NULL;
+    int count = 0;
+
+    sprintf(buf, at_data);
+    remove_spaces(buf);
+
+    /*remove AT CMD in at_data, only keep argument after "=" e.g. AT+XXX=123 only keep 123 */
+    substr = strtok_r(buf, "=", &saveptr);
+
+    if(!(substr = strtok_r(NULL, "=", &saveptr))){
+        snprintf (data, sizeof(data), "%s-%s  ", at_data, "Error: need argument: AT+...=mac/phy, 0/1");
+        success = KAL_FALSE;
+    }
+
+    substr = strtok_r(substr, ",", &saveptr);
+
+    /*string segmentation*/
+    while (substr) {
+        arg[count] = substr;
+        count++;
+        substr = strtok_r(NULL, ",", &saveptr);
+
+        if (count > 1) {        //only accept two input with one quote
+            break;
+        }
+    }
+
+    if (count == 1) {           //if there is only on input, assign -1 to show error message
+        arg[1] = "-1";
+    }
+
+    if (strncmp(arg[0], "mac", 3) == 0) {
+        if (strncmp(arg[1], "1", 1) ==0) {
+            pcie_mac_mtcmos_ctrl(KAL_TRUE);
+            snprintf (data, sizeof(data), "%s-%s", at_data, "Success");
+            success = KAL_TRUE;
+        }
+        else if (strncmp(arg[1], "0", 1) == 0) {
+            pcie_mac_mtcmos_ctrl(KAL_FALSE);
+            snprintf (data, sizeof(data), "%s-%s", at_data, "Success");
+            success = KAL_TRUE;
+        }
+        else {
+            snprintf (data, sizeof(data), "%s-%s", at_data, "Error: mac, enable option unknown(expect 0/1)");
+            success = KAL_FALSE;
+        }
+    }
+    else if (strncmp(arg[0], "phy", 3) == 0) {
+        if (strncmp(arg[1], "1", 1) == 0) {
+            pcie_phy_mtcmos_ctrl(KAL_TRUE);
+            snprintf (data, sizeof(data), "%s-%s", at_data, "Success");
+            success = KAL_TRUE;
+        }
+        else if (strncmp(arg[1], "0", 1) == 0) {
+            pcie_phy_mtcmos_ctrl(KAL_FALSE);
+            snprintf (data, sizeof(data), "%s-%s", at_data, "Success");
+            success = KAL_TRUE;
+        }
+        else {
+            snprintf (data, sizeof(data), "%s-%s", at_data, "Error: phy, enable option unknown(expect 0/1)");
+            success = KAL_FALSE;
+        }
+    }
+    else {
+        snprintf (data, sizeof(data), "%s-%s", at_data, "Error: input unknown(expect mac/phy, 0/1)");
+        success = KAL_FALSE;
+    }
+#else
+    success = KAL_FALSE;
+#endif
+
+    //send response to Host/AP
+    custom_l5_send_at_rsp_int(ch_id, data, strlen(data));
+    custom_at_cb_cmn_hdlr(ch_id, (KAL_TRUE == success ? CUSTOM_AT_RSP_OK : CUSTOM_AT_RSP_ERR), 0, NULL, 0);
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+void custom_at_cfun15_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    mipc_msg_t *msg_cmd_ptr;
+    //SETP1: build MIPC message
+    msg_cmd_ptr = mipc_msg_init(MIPC_SYS_REBOOT_CMD, MIPC_MSG_PS0);
+    //SETP2: add paramters (in this case, there is only one TLV parameter)
+    mipc_msg_add_tlv_uint8(msg_cmd_ptr, MIPC_SYS_REBOOT_CMD_T_MODE, 0);
+
+    //send CMD to AP (no callback because we didn't wait it completion)
+    if (custom_l5_at_send_mipc_cmd(ch_id, NULL, NULL, msg_cmd_ptr)) {
+        //send response to Host/AP
+        custom_l5_send_at_rsp_ok(ch_id);
+    } else {
+        //send response to Host/AP
+        custom_l5_send_at_rsp_err(ch_id, 0);
+    }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+#if (defined(__PCIE_LTR_SUPPORT__)||defined(__PCIE_TRAS_SUPPORT__))&&defined(__MTK_TARGET__)
+void custom_at_ltren_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    char data[50];
+    const char *del = " =,";
+    char *arg[5] = {0};
+    char buf[30] = {0};
+    char *substr = NULL, *saveptr = NULL;
+    int count = 0;
+    uint_fast8_t ltr_en;
+
+    sprintf(buf, at_data);
+
+    substr = strtok_r(buf, del, &saveptr);
+
+    do {
+        arg[count] = substr;
+        count++;
+        substr = strtok_r(NULL, del, &saveptr);
+    } while (substr);
+
+    //LTR enable
+    if (strncmp(arg[1], "0", 1) ==0){ ltr_en=0; }
+    else{ ltr_en=1; }
+
+    ltr_tras_atcmd_ltr_en(ltr_en);
+
+    snprintf(data, sizeof(data), "LTR_TRAS: LTR_EN=%d", ltr_en);
+
+    //send response to Host/AP
+    custom_l5_send_at_rsp_int(ch_id, data, strlen(data));
+    custom_l5_send_at_rsp_ok(ch_id);
+}
+
+void custom_at_trasen_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    char data[50];
+    const char *del = " =,";
+    char *arg[5] = {0};
+    char buf[30] = {0};
+    char *substr = NULL, *saveptr = NULL;
+    int count = 0;
+    uint_fast8_t ul_tras_en,dl_tras_en;
+
+    sprintf(buf, at_data);
+
+    substr = strtok_r(buf, del, &saveptr);
+
+    do {
+        arg[count] = substr;
+        count++;
+        substr = strtok_r(NULL, del, &saveptr);
+    } while (substr);
+
+    //LTR enable
+    if (strncmp(arg[1], "0", 1) ==0){ ul_tras_en=0; }
+    else{ ul_tras_en=1; }
+
+    if (strncmp(arg[2], "0", 1) ==0){ dl_tras_en=0; }
+    else{ dl_tras_en=1; }
+
+    ltr_tras_atcmd_tras_en(ul_tras_en,dl_tras_en);
+
+    snprintf(data, sizeof(data), "TRAS EN: (UL_EN, DL_EN)=(%d, %d)", ul_tras_en, dl_tras_en);
+
+    //send response to Host/AP
+    custom_l5_send_at_rsp_int(ch_id, data, strlen(data));
+    custom_l5_send_at_rsp_ok(ch_id);
+}
+
+void custom_at_trasprof_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    char data[50];
+    LTR_TRAS_PROFILE *profile;
+
+    profile=ltr_tras_atcmd_profile();
+
+    snprintf(data, sizeof(data), "LTR_TRAS Profiling: max_chk_time=%d", profile->max_chk_time);
+    custom_l5_send_at_rsp_int(ch_id, data, strlen(data));
+
+    snprintf(data, sizeof(data), "LTR_TRAS Profiling: acc_chk_time=%d", profile->acc_chk_time);
+    custom_l5_send_at_rsp_int(ch_id, data, strlen(data));
+
+    snprintf(data, sizeof(data), "LTR_TRAS Profiling: total_chk_cnt=%d", profile->total_chk_cnt);
+    custom_l5_send_at_rsp_int(ch_id, data, strlen(data));
+
+    snprintf(data, sizeof(data), "LTR_TRAS Profiling: vrb_mode_cnt=%d", profile->vrb_mode_cnt);
+    custom_l5_send_at_rsp_int(ch_id, data, strlen(data));
+
+    snprintf(data, sizeof(data), "LTR_TRAS Profiling: total_cnt=%d", profile->total_cnt);
+    custom_l5_send_at_rsp_int(ch_id, data, strlen(data));
+    custom_l5_send_at_rsp_ok(ch_id);
+}
+
+static kal_uint32 str_to_uint32(char* str)
+{
+    kal_uint32 i,res=0;
+    for(i=0;(str[i]>='0')&&(str[i]<='9');++i){
+        res=res*10+str[i]-'0';
+    }
+    if(res==0) return 10;
+    else return res;
+}
+
+void custom_at_ultrasdeliv_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    char data[50];
+    const char *del = " =,";
+    char *arg[5] = {0};
+    char buf[30] = {0};
+    char *substr = NULL, *saveptr = NULL;
+    int count = 0;
+    kal_uint32 period;
+
+    sprintf(buf, at_data);
+
+    substr = strtok_r(buf, del, &saveptr);
+
+    do {
+        arg[count] = substr;
+        count++;
+        substr = strtok_r(NULL, del, &saveptr);
+    } while (substr);
+
+    period=str_to_uint32(arg[1]);
+
+    ltr_tras_atcmd_ul_deliv(period);
+
+    snprintf(data, sizeof(data), "LTR_TRAS: Change UL Deliver Timer Period to %d", period);
+
+    //send response to Host/AP
+    custom_l5_send_at_rsp_int(ch_id, data, strlen(data));
+    custom_l5_send_at_rsp_ok(ch_id);
+}
+
+void custom_at_dltrasdeliv_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    char data[50];
+    const char *del = " =,";
+    char *arg[5] = {0};
+    char buf[30] = {0};
+    char *substr = NULL, *saveptr = NULL;
+    int count = 0;
+    kal_uint32 period;
+
+    sprintf(buf, at_data);
+
+    substr = strtok_r(buf, del, &saveptr);
+
+    do {
+        arg[count] = substr;
+        count++;
+        substr = strtok_r(NULL, del, &saveptr);
+    } while (substr);
+
+    period=str_to_uint32(arg[1]);
+
+    ltr_tras_atcmd_dl_deliv(period);
+
+    snprintf(data, sizeof(data), "LTR_TRAS: Change DL Deliver Timer Period to %d", period);
+
+    //send response to Host/AP
+    custom_l5_send_at_rsp_int(ch_id, data, strlen(data));
+    custom_l5_send_at_rsp_ok(ch_id);
+}
+
+void custom_at_trasinact_hdlr(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len)
+{
+    char data[50];
+    const char *del = " =,";
+    char *arg[5] = {0};
+    char buf[30] = {0};
+    char *substr = NULL, *saveptr = NULL;
+    int count = 0;
+    kal_uint32 period;
+
+    sprintf(buf, at_data);
+
+    substr = strtok_r(buf, del, &saveptr);
+
+    do {
+        arg[count] = substr;
+        count++;
+        substr = strtok_r(NULL, del, &saveptr);
+    } while (substr);
+
+    period=str_to_uint32(arg[1]);
+
+    ltr_tras_atcmd_inact(period);
+
+    snprintf(data, sizeof(data), "LTR_TRAS: Change Inactive Timer Period to %d", period);
+
+    //send response to Host/AP
+    custom_l5_send_at_rsp_int(ch_id, data, strlen(data));
+    custom_l5_send_at_rsp_ok(ch_id);
+}
+#endif
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+custom_l5_at_cmd_table_t custom_l5_at_cmd_table[] = {
+//#ifdef __NANO_UT__    //for Testing
+    {"AT+CUSTOM", custom_at_custom_hdlr},
+    {"AT+CUSTOMA", custom_at_customa_hdlr},
+    {"AT+CUSTMULTI", custom_at_custmulti_hdlr},
+    {"AT+CUSTTRIP", custom_at_custtrip_hdlr},
+    {"AT+CUSTLARG", custom_at_custlarg_hdlr},
+    {"AT+CUSTCUST", custom_at_custcust_hdlr},
+//#endif /* __NANO_UT__ */
+    {"AT+CCID", custom_at_ccid_hdlr},
+    {"AT+XPCIERATE?", custom_at_xpcierate_hdlr},
+    {"AT+XPCIELB", custom_at_xpcielb_hdlr},
+    {"AT+XPCIEMTCMOS" , custom_at_xpciemtcmos_hdlr},
+    {"AT+CFUN=15", custom_at_cfun15_hdlr},
+    //ADD CUSTOM HANDLERs here
+#if (defined(__PCIE_LTR_SUPPORT__)||defined(__PCIE_TRAS_SUPPORT__))&&defined(__MTK_TARGET__)
+    {"AT+LTREN" , custom_at_ltren_hdlr},
+    {"AT+TRASEN" , custom_at_trasen_hdlr},
+    {"AT+TRASPROF" , custom_at_trasprof_hdlr},
+    {"AT+ULTRASDELIV" , custom_at_ultrasdeliv_hdlr},
+    {"AT+DLTRASDELIV" , custom_at_dltrasdeliv_hdlr},
+    {"AT+TRASINACT" , custom_at_trasinact_hdlr},
+#endif
+#ifdef __L5_TIMER_TEST__
+    {"AT%TIMER", custom_at_timer_hdlr},
+#endif
+};
+
+kal_uint16 get_custom_l5_at_cmd_table_size()
+{
+    return sizeof(custom_l5_at_cmd_table)/sizeof(custom_l5_at_cmd_table_t);
+}
+
+kal_bool custom_l5_at_cmd_handle(kal_uint8 ch_id, const kal_uint8 *input_str_ptr, kal_uint16 input_str_len)
+{
+    kal_uint32 i;
+    kal_uint8 match_len = 0;
+    CUSTOM_L5_AT_CMD_HDLR hdlr = NULL;
+
+    //find longest match in custom prefix
+    for (i = 0; i < get_custom_l5_at_cmd_table_size(); i++) {
+        if (strncasecmp((char *)custom_l5_at_cmd_table[i].cmd, (char *)input_str_ptr, strlen((char *)custom_l5_at_cmd_table[i].cmd)) == 0
+           && custom_l5_at_cmd_table[i].cmd_hdlr_ptr
+           && strlen((char *)custom_l5_at_cmd_table[i].cmd)>match_len) {
+            match_len = strlen((char *)custom_l5_at_cmd_table[i].cmd);
+            hdlr = custom_l5_at_cmd_table[i].cmd_hdlr_ptr;
+        }
+    }
+    if(hdlr) {
+#define CUST_AT_MAX_LEN 512
+        char *at_cmd = (char*)get_ctrl_buffer(CUST_AT_MAX_LEN);
+        kal_uint16 at_len = (input_str_len > (CUST_AT_MAX_LEN - 1)) ? (CUST_AT_MAX_LEN - 1) : input_str_len;
+
+        kal_mem_set(at_cmd, 0, CUST_AT_MAX_LEN);
+        kal_mem_cpy(at_cmd, (char *)input_str_ptr, at_len);
+        kal_prompt_trace(MOD_L5IO, "call custom handler %x cust_ch_id=%x", hdlr, ch_id);
+        hdlr(ch_id, at_cmd, at_len);
+        free_ctrl_buffer(at_cmd);
+#undef CUST_AT_MAX_LEN
+        return KAL_TRUE;
+    }
+    return KAL_FALSE;
+}
+
+// when modem_at ready, there would be a +EIND:128 URC notify(normally just once afer boot up).
+// If you dont need this URC notify when boot up(As in AT spec, no URC is default on), you can change this api to avoid the initial +EIND:128
+kal_bool custom_l5_at_enable_eind128_init()
+{
+    return KAL_TRUE;    //enable the +EIND:128 with bootup
+    //return KAL_FALSE;   //disable the +EIND:128 with bootup
+}
+
diff --git a/mcu/custom/protocol/common/ps/custom_l5_at.h b/mcu/custom/protocol/common/ps/custom_l5_at.h
new file mode 100644
index 0000000..21743bf
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_l5_at.h
@@ -0,0 +1,52 @@
+#ifndef _CUSTOM_L5_AT_H_
+#define _CUSTOM_L5_AT_H_
+
+#include "kal_general_types.h"
+#include "ps_public_utility.h"
+#include "ps_public_enum.h"
+
+#include "mipc_msg.h"
+
+typedef enum {
+    CUSTOM_AT_RSP_ERR,      //final rsp, no more rsp later
+    CUSTOM_AT_RSP_OK,       //final rsp, no more rsp later
+    CUSTOM_AT_RSP_INT       //intermediate rsp, there should be final rsp later
+}custom_at_rsp_type_enum;
+
+typedef void (*CUSTOM_L5_AT_CMD_HDLR)(kal_uint32 ch_id, char *at_data, kal_uint16 at_data_len);
+//<err_code> valid when <CUSTOM_AT_RSP_ERR == rsp_type>
+//<at_data & at_data_len> valid when <CUSTOM_AT_RSP_INT == rsp_type>
+typedef void (*CUSTOM_L5_AT_REQ_CB)(kal_uint32 ch_id, custom_at_rsp_type_enum rsp_type, kal_uint16 err_code, char *at_data, kal_uint16 at_data_len, void *priv_ptr);
+typedef void (*CUSTOM_L5_AT_CMD_CB)(kal_uint32 ch_id, mipc_msg_t *msg_rsp_ptr, void *priv_ptr);
+
+//send AT command to protocol
+extern kal_bool custom_l5_at_send_at_req(kal_uint32 ch_id, CUSTOM_L5_AT_REQ_CB cb, void *cb_priv_ptr, char *at_cmd, kal_uint16 at_cmd_len);
+//send CMD to AP
+extern kal_bool custom_l5_at_send_mipc_cmd(kal_uint32 ch_id, CUSTOM_L5_AT_CMD_CB cb, void *cb_priv_ptr, mipc_msg_t *msg_ptr);
+//send IND to AP
+extern kal_bool custom_l5_at_send_mipc_ind(mipc_msg_t *msg_ptr);
+
+
+//send AT response to ch_id(int means intermediate), every AT need end with final_rsp(_err or _ok) in the end
+extern void custom_l5_send_at_rsp_err(kal_uint32 ch_id, kal_uint16 cause);
+
+extern void custom_l5_send_at_rsp_ok(kal_uint32 ch_id);
+
+extern void custom_l5_send_at_rsp_int(kal_uint32 ch_id, char *at_rsp, kal_uint16 at_rsp_len);
+
+
+//send AT URC to host
+extern void custom_l5_send_at_urc(char *at_urc, kal_uint32 at_urc_len);
+
+#define CUSTOM_L5_AT_CMD_TABLE_SIZE (20)
+
+typedef struct {
+    char cmd[CUSTOM_L5_AT_CMD_TABLE_SIZE];
+    CUSTOM_L5_AT_CMD_HDLR cmd_hdlr_ptr;
+} custom_l5_at_cmd_table_t;
+
+kal_bool custom_l5_at_cmd_handle(kal_uint8 ch_id, const kal_uint8 *input_str_ptr, kal_uint16 input_str_len);
+
+kal_bool custom_l5_at_enable_eind128_init();
+
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_l5_ims.c b/mcu/custom/protocol/common/ps/custom_l5_ims.c
new file mode 100644
index 0000000..c9b39d9
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_l5_ims.c
@@ -0,0 +1,21 @@
+#include "custom_l5_ims.h"
+
+
+kal_uint32 custom_l5_is_ims_support(kal_uint32 sbp_id, char *mcc, char *mnc, void *other)
+{
+    kal_uint32 caps = 0;
+
+#if !defined(__ANDROID_MODEM__)
+    switch (sbp_id) {
+        default:
+            caps |= CUSTOM_L5_IMS_SMS_CAP;
+            break;
+    }
+
+    if (caps) {
+        caps |= CUSTOM_L5_IMS_ENABLE;
+    }
+#endif
+
+    return caps;
+}
diff --git a/mcu/custom/protocol/common/ps/custom_l5_ims.h b/mcu/custom/protocol/common/ps/custom_l5_ims.h
new file mode 100644
index 0000000..bff0397
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_l5_ims.h
@@ -0,0 +1,16 @@
+#ifndef __CUSTOM_L5_IMS_H__
+#define __CUSTOM_L5_IMS_H__
+
+#include "kal_public_defs.h"
+#include "kal_public_api.h"
+
+#define CUSTOM_L5_IMS_VOLTE_CAP (0x00000001)
+#define CUSTOM_L5_IMS_VILTE_CAP (0x00000002)
+#define CUSTOM_L5_IMS_VOWIFI_CAP (0x00000004)
+#define CUSTOM_L5_IMS_VIWIFI_CAP (0x00000008)
+#define CUSTOM_L5_IMS_SMS_CAP (0x00000010)
+#define CUSTOM_L5_IMS_ENABLE (0x00000020)
+
+//return CUSTOM_L5_IMS_XXX_CAP bitmask
+kal_uint32 custom_l5_is_ims_support(kal_uint32 sbp_id, char *mcc, char *mnc, void *other);
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_l5_mbci.c b/mcu/custom/protocol/common/ps/custom_l5_mbci.c
new file mode 100644
index 0000000..1cc1d2f
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_l5_mbci.c
@@ -0,0 +1,205 @@
+#include "custom_l5_mbci.h"
+#include "nvram_interface.h"
+#ifndef L4_NOT_PRESENT
+#include "l4c_utility.h"
+#endif
+#include "device.h"
+
+extern kal_char *release_build();
+
+
+//which CID is required auth
+//return 0 means no need to check SLA
+//return 1 means need SLA level 1
+//return 2 means need SLA level 2
+//return 3 means need SLA level 3
+kal_uint8 custom_mbci_is_needed_to_check_SLA(kal_uint8 uuid[16], kal_uint32 cid, kal_uint32 command_type)
+{
+    kal_uint8 f001_uuid1[] = {0xf8, 0x5d, 0x46, 0xef, 0xab, 0x26, 0x40, 0x81, 0x98, 0x68, 0x4d, 0x18, 0x3c, 0x0a, 0x3a, 0xec};
+    if (memcmp(uuid, f001_uuid1, 16) == 0 && cid == 2 && command_type == 1) {
+        return 3;
+    }
+
+    return 0;
+}
+
+///////////////////////////////////////////////////////////////////////////////////
+typedef struct {
+    kal_uint32 DeviceIdOffset;
+    kal_uint32 DeviceIdSize;
+    kal_uint32 ManufacturerIdOffset;
+    kal_uint32 ManufacturerIdSize;
+    kal_uint32 FirmwareInfoOffset;
+    kal_uint32 FirmwareInfoSize;
+    kal_uint32 FirmwareCustomInfoOffset;
+    kal_uint32 FirmwareCustomInfoSize;
+    kal_uint32 HardwareInfoOffset;
+    kal_uint32 HardwareInfoSize;
+} custom_mbci_fw_version_struct;
+
+//example 3: 
+static void custom_mbci_fw_req(void *context_ptr, void *meta_ptr, kal_uint8 uuid[16], kal_uint32 cid, kal_uint32 command_type, kal_uint16 data_len, kal_uint8 *data_ptr)
+{
+    kal_uint32 status = 0;
+    kal_wchar utf16[60];
+    kal_uint16 utf16_len;
+
+    //reserve for fixed part
+    custom_mbci_fw_version_struct *info_ptr = (custom_mbci_fw_version_struct *)custom_l5_mbci_append(meta_ptr, sizeof(custom_mbci_fw_version_struct), NULL);
+    kal_uint8 *base_ptr = (kal_uint8 *)info_ptr;
+    kal_uint8 *current_ptr;
+
+    if (info_ptr == NULL) {
+        //general error
+        custom_l5_mbci_cnf(context_ptr, meta_ptr, 2);
+        return;
+    }
+
+    //get PS#0 IMEI
+    do {
+        kal_uint8 imei_bcd[8];
+        kal_uint8 imei_str[16];
+
+        if (nvram_get_imei_value(8, imei_bcd, 1)) {
+            imei_bcd[7] = imei_bcd[7] | 0xf0;
+            convert_to_digit((kal_uint8 *)imei_bcd, imei_str);
+
+            utf16_len = l5mbci_ascii_to_utf16(18, imei_str, utf16);
+            current_ptr = custom_l5_mbci_append(meta_ptr, utf16_len, utf16);
+
+            info_ptr->DeviceIdOffset = current_ptr - base_ptr;
+            info_ptr->DeviceIdSize = utf16_len;
+        } else {
+            info_ptr->DeviceIdOffset = 0;
+            info_ptr->DeviceIdSize = 0;
+        }
+    } while(0);
+
+    //get manufacturer
+    do {
+        utf16_len = l5mbci_ascii_to_utf16(32, custom_uem_get_equip_id(EQ_ME_MANUFACTURE_ID), utf16);
+        current_ptr = custom_l5_mbci_append(meta_ptr, utf16_len, utf16);
+
+        info_ptr->ManufacturerIdOffset = current_ptr - base_ptr;
+        info_ptr->ManufacturerIdSize = utf16_len;
+    } while(0);
+
+    //get firmware
+    do {
+        kal_uint8 fwid[64];
+
+        if (get_ms_revision(L4C_SW_CODE, fwid)) {
+            utf16_len = l5mbci_ascii_to_utf16(32, fwid, utf16);
+            current_ptr = custom_l5_mbci_append(meta_ptr, utf16_len, utf16);
+
+            info_ptr->FirmwareInfoOffset = current_ptr - base_ptr;
+            info_ptr->FirmwareInfoSize = utf16_len;
+        } else {
+            info_ptr->FirmwareInfoOffset = 0;
+            info_ptr->FirmwareInfoSize = 0;
+        }
+    } while(0);
+
+    //get custom firmware
+    do {
+        utf16_len = l5mbci_ascii_to_utf16(32, (kal_uint8 *)release_build(), utf16);
+        current_ptr = custom_l5_mbci_append(meta_ptr, utf16_len, utf16);
+
+        info_ptr->FirmwareCustomInfoOffset = current_ptr - base_ptr;
+        info_ptr->FirmwareCustomInfoSize = utf16_len;
+    } while(0);
+
+    //get hardware
+    do {
+        utf16_len = l5mbci_ascii_to_utf16(32, custom_uem_get_equip_id(EQ_ME_MODEL_ID), utf16);
+        current_ptr = custom_l5_mbci_append(meta_ptr, utf16_len, utf16);
+
+        info_ptr->HardwareInfoOffset = current_ptr - base_ptr;
+        info_ptr->HardwareInfoSize = utf16_len;
+    } while(0);
+
+    custom_l5_mbci_cnf(context_ptr, meta_ptr, status);
+
+/*
+    //example notification
+    do {
+        //kal_uint8 custom_uuid[] = {0x9f, 0x04, 0xa4, 0x64, 0xd1, 0xb7, 0x4e, 0xa7, 0x99, 0x91, 0x94, 0xbd, 0x4b, 0xe4, 0x91, 0x6a};
+        kal_uint8 custom_uuid[] = {0x4a, 0xda, 0x49, 0x62, 0xb9, 0x88, 0x46, 0xc3, 0x87, 0xa7, 0x97, 0xf2, 0x0f, 0x99, 0x4a, 0xbb};
+        kal_uint32 noti_CID = 7;
+        custom_mbci_fw_version_struct *noti_info_ptr = NULL;
+        kal_uint8 *noti_base_ptr = NULL;
+        void *noti_meta_ptr = custom_l5_mbci_prepare_notification(custom_uuid, noti_CID, 1024);
+
+        if (noti_meta_ptr == NULL)
+            break;
+
+        noti_info_ptr = (custom_mbci_fw_version_struct *)custom_l5_mbci_append(noti_meta_ptr, sizeof(custom_mbci_fw_version_struct), NULL);
+
+        if (noti_info_ptr == NULL)
+            break;
+
+        noti_base_ptr = (kal_uint8 *)noti_info_ptr;
+
+        noti_info_ptr->DeviceIdOffset = 0;
+        noti_info_ptr->DeviceIdSize = 0;
+        noti_info_ptr->ManufacturerIdOffset = 0;
+        noti_info_ptr->ManufacturerIdSize = 0;
+        noti_info_ptr->FirmwareCustomInfoOffset = 0;
+        noti_info_ptr->FirmwareCustomInfoSize = 0;
+        utf16_len = l5mbci_ascii_to_utf16(32, custom_uem_get_equip_id(EQ_ME_MODEL_ID), utf16);
+        current_ptr = custom_l5_mbci_append(noti_meta_ptr, utf16_len, utf16);
+
+        info_ptr->HardwareInfoOffset = current_ptr - noti_base_ptr;
+        info_ptr->HardwareInfoSize = utf16_len;
+        
+        custom_l5_mbci_send_notification(context_ptr, noti_meta_ptr);
+
+    } while(0);
+*/
+}
+
+custom_l5_mbci_cid_table_t custom_l5_mbci_tools_table[] = {
+    {KAL_FALSE, 0, NULL}, //CID=0
+    {KAL_FALSE, 1, NULL}, //CID=1
+    {KAL_FALSE, 2, NULL}, //CID=2
+    {KAL_FALSE, 3, NULL}, //CID=3
+    {KAL_FALSE, 4, NULL}, //CID=4
+    {KAL_FALSE, 5, NULL}, //CID=5
+    {KAL_FALSE, 6, NULL}, //CID=6
+    {KAL_TRUE, 7, custom_mbci_fw_req}, //CID=7
+};
+
+mbci_service_t custom_l5_mbci_service_table[] = {
+    {KAL_FALSE, "tools", {.c = {0x4a, 0xda, 0x49, 0x62, 0xb9, 0x88, 0x46, 0xc3, 0x87, 0xa7, 0x97, 0xf2, 0x0f, 0x99, 0x4a, 0xbb}}, sizeof(custom_l5_mbci_tools_table)/sizeof(custom_l5_mbci_cid_table_t), custom_l5_mbci_tools_table},
+};
+
+kal_uint16 get_custom_l5_mbci_service_table_size()
+{
+    return sizeof(custom_l5_mbci_service_table)/sizeof(mbci_service_t);
+}
+
+kal_bool custom_mbci_check_multicarrier_provider(l5mbci_custom_providers_struct *multicarrer_tbl_ptr)
+{
+    kal_uint32 i, j;
+    l5mbci_custom_providers_struct q_providers;
+    l5mbci_custom_provider_struct *sm_ptr;
+    l5mbci_custom_provider_struct *mc_ptr;
+
+    l5_mbci_sm_value_query(&q_providers);
+
+    for (i = 0; i < q_providers.Count; i++) {
+        sm_ptr = &q_providers.Provider[i];
+        for (j = 0; j < multicarrer_tbl_ptr->Count; j++) {
+            mc_ptr = &multicarrer_tbl_ptr->Provider[j];
+            if (strncmp((char *)sm_ptr->ProviderId, (char *)mc_ptr->ProviderId, strlen((kal_char*)mc_ptr->ProviderId)) == 0) {
+                mc_ptr->CanBe = 1;
+            }
+        }
+    }
+
+    return KAL_TRUE;
+}
+
+
+
+
diff --git a/mcu/custom/protocol/common/ps/custom_l5_mbci.h b/mcu/custom/protocol/common/ps/custom_l5_mbci.h
new file mode 100644
index 0000000..49dcd1f
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_l5_mbci.h
@@ -0,0 +1,64 @@
+#ifndef _CUSTOM_L5_MBCI_H_
+#define _CUSTOM_L5_MBCI_H_
+
+#include "l5_common.h"
+#include "mipc_msg.h"
+#include "custom_l5_mipc.h"
+
+#define MAX_CUSTOM_L5MBCI_CONTEXT_NUM (1)
+kal_uint8 custom_mbci_is_needed_to_check_SLA(kal_uint8 uuid[16], kal_uint32 cid, kal_uint32 command_type);
+
+typedef void (*CUSTOM_L5_MBCI_REQ_HANDLER)(void *context_ptr, void *meta_ptr, kal_uint8 uuid[16], kal_uint32 cid, kal_uint32 command_type, kal_uint16 data_len, kal_uint8 *data_ptr);
+typedef void (*CUSTOM_L5_MBCI_CMD_CB)(void *context_ptr, void *meta_ptr, mipc_msg_t *msg_rsp_ptr, void *priv_ptr);
+typedef void (*CUSTOM_L5_MBCI_AT_CB)(void *context_ptr, void *meta_ptr, kal_bool is_intermediate, char *at_data, kal_uint16 at_data_len, void *priv_ptr);
+
+//send MBCI CMD to sAP
+extern kal_bool custom_l5_mbci_send_mipc_cmd(void *context_ptr, void *meta_ptr, CUSTOM_L5_MBCI_CMD_CB cb, void *cb_priv_ptr, mipc_msg_t *msg_ptr);
+//send AT to PS
+extern kal_bool custom_l5_mbci_send_at_req(void *context_ptr, void *meta_ptr, CUSTOM_L5_MBCI_AT_CB cb, void *cb_priv_ptr, char *at_cmd, kal_uint16 at_cmd_len);
+
+//append data to meta_ptr
+extern kal_uint8 *custom_l5_mbci_append(void *meta_ptr, kal_uint16 data_len, void *data_ptr);
+//append Non MBIM data to meta_ptr
+extern kal_uint8 *custom_l5_mbci_append_without_alignment(void *meta_ptr, kal_uint16 data_len, void *data_ptr);
+extern void* custom_l5_mbci_buffer_resize(void *meta_ptr, kal_uint32 len);
+
+//send MBCI CNF to Host
+extern void custom_l5_mbci_cnf(void *context_ptr, void *meta_ptr, kal_uint32 status_code);
+
+//Prepare MBCI Notification
+extern void *custom_l5_mbci_prepare_notification(kal_uint8 *service_uuid, kal_uint32 cid, kal_uint32 len);
+//Send MBCI Notification to Host
+extern void custom_l5_mbci_send_notification(void *context_ptr, void *meta_ptr);
+
+extern kal_uint16 l5mbci_ascii_to_utf16(kal_uint16 ascii_len, kal_uint8 *src_ptr, kal_wchar *dst_ptr);
+extern kal_uint16 l5mbci_utf16_to_ascii(kal_uint16 utf16_len, kal_wchar *src_ptr, kal_uint8 *dst_ptr);
+
+typedef struct {
+    kal_bool is_support;
+    kal_uint32 cid;
+    CUSTOM_L5_MBCI_REQ_HANDLER handler;
+    kal_bool noti_enabled[MAX_CUSTOM_L5MBCI_CONTEXT_NUM]; //notification enabled or disabled
+} custom_l5_mbci_cid_table_t;
+
+extern mbci_service_t custom_l5_mbci_service_table[];
+
+kal_uint16 get_custom_l5_mbci_service_table_size();
+
+typedef struct {
+    kal_uint8 ProviderId[12];
+    kal_uint8 ProviderName[4];
+    kal_uint32 CellularClass;
+    kal_uint32 Rssi;
+    kal_uint32 ErrorRate;
+    kal_uint32 CanBe;
+} l5mbci_custom_provider_struct;
+
+typedef struct {
+    kal_uint32 Count;
+    l5mbci_custom_provider_struct Provider[20];
+} l5mbci_custom_providers_struct;
+
+extern kal_bool l5_mbci_sm_value_query(l5mbci_custom_providers_struct *query_provider_ptr);
+kal_bool custom_mbci_check_multicarrier_provider(l5mbci_custom_providers_struct *multicarrer_tbl_ptr);
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_l5_mipc.c b/mcu/custom/protocol/common/ps/custom_l5_mipc.c
new file mode 100644
index 0000000..a60c28a
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_l5_mipc.c
@@ -0,0 +1,213 @@
+#include "custom_l5_mipc.h"
+#include "custom_l5_at.h"
+
+/////////////////////////////////////////////////////////////////////////////////////
+static void custom_mipc_relay_req_cb(void *context_ptr, mipc_msg_t *msg_cnf_ptr, mipc_msg_t *msg_rsp_ptr, void *priv_ptr)
+{
+    //copy TLV from RSP MSG to CNF MSG
+    mipc_msg_copy_tlv(msg_rsp_ptr, msg_cnf_ptr);
+    //send CNF to Host
+    custom_l5_mipc_send_mipc_cnf(context_ptr, msg_cnf_ptr);
+    //free CNF MSG
+    mipc_msg_deinit(msg_cnf_ptr);
+}
+
+//example 1: relay to sAP
+static void custom_mipc_relay_req(void *context_ptr, mipc_msg_t *msg_ptr)
+{
+    mipc_msg_t *msg_cmd_ptr;
+    mipc_msg_t *msg_cnf_ptr;
+    kal_uint32 error = MIPC_RESULT_SUCCESS;
+
+    //prepare CNF MSG
+    if ((msg_cnf_ptr = mipc_msg_copy_hdr(msg_ptr)) == NULL) {
+        return;
+    }
+    //change CNF MSG ID
+    msg_cnf_ptr->hdr.msg_id = MIPC_VENDOR_RELAY_CNF;
+
+    //create CMD MSG
+    if ((msg_cmd_ptr = mipc_msg_init(MIPC_VENDOR_RELAY_CMD, MIPC_MSG_PS0))) {
+        //copy TLV from REQ MSG to CMD MSG
+        mipc_msg_copy_tlv(msg_ptr, msg_cmd_ptr);
+        //send CMD to sAP
+        if (custom_l5_mipc_send_mipc_cmd(context_ptr, msg_cnf_ptr, custom_mipc_relay_req_cb, NULL, msg_cmd_ptr) == KAL_FALSE) {
+            error = MIPC_RESULT_FAILURE;
+            //still need to free CMD MSG, no break here
+        }
+        //free CMD MSG
+        mipc_msg_deinit(msg_cmd_ptr);
+    } else {
+        error = MIPC_RESULT_FAILURE;
+    }
+    
+    if (error) {
+        //add TLV for result: MIPC_RESULT_FAILURE
+        mipc_msg_add_tlv_uint32(msg_cnf_ptr, MIPC_T_RESULT, MIPC_RESULT_FAILURE);
+        //send CNF to Host
+        custom_l5_mipc_send_mipc_cnf(context_ptr, msg_cnf_ptr);
+        //free CNF MSG
+        mipc_msg_deinit(msg_cnf_ptr);
+    }
+}
+
+/////////////////////////////////////////////////////////////////////////////////////
+static void custom_mipc_xxx_req_cb(void *context_ptr, mipc_msg_t *msg_cnf_ptr, mipc_msg_t *msg_rsp_ptr, void *priv_ptr)
+{
+    //add TLVs
+    mipc_msg_add_tlv_uint32(msg_cnf_ptr, MIPC_T_RESULT, MIPC_RESULT_SUCCESS);
+    //send CNF to Host
+    custom_l5_mipc_send_mipc_cnf(context_ptr, msg_cnf_ptr);
+    //free CNF MSG
+    mipc_msg_deinit(msg_cnf_ptr);
+}
+
+//example 2: send CMD to sAP
+static void custom_mipc_xxx_req(void *context_ptr, mipc_msg_t *msg_ptr)
+{
+    mipc_msg_t *msg_cnf_ptr;
+    kal_uint32 error = MIPC_RESULT_SUCCESS;
+
+    //prepare CNF MSG
+    if ((msg_cnf_ptr = mipc_msg_copy_hdr(msg_ptr)) == NULL) {
+        return;
+    }
+    //change CNF MSG ID
+    msg_cnf_ptr->hdr.msg_id = MIPC_VENDOR_XXX_CNF;
+
+    //create CMD MSG
+    do {
+        mipc_msg_tlv_t *tlv_ptr;
+        mipc_msg_t *msg_cmd_ptr = mipc_msg_init(MIPC_VENDOR_AAA_CMD, MIPC_MSG_PS0);
+        if (msg_cmd_ptr == NULL) {
+            error = MIPC_RESULT_FAILURE;
+            break;
+        }
+
+        //get parameter from REQ
+        tlv_ptr = mipc_msg_get_tlv(msg_ptr, 0x100);
+        if (tlv_ptr == NULL) {
+            error = MIPC_RESULT_FAILURE;
+            break;
+        }
+        //....
+        //....
+        //....
+        //....
+        
+        //add necessary TLVs
+        mipc_msg_add_tlv(msg_cnf_ptr, MIPC_MSG_GET_TLV_TYPE(tlv_ptr), MIPC_MSG_GET_TLV_LEN(tlv_ptr), MIPC_MSG_GET_TLV_VAL_PTR(tlv_ptr));
+        //....
+        //....
+        //....
+        //....
+        //send CMD to sAP
+        if (custom_l5_mipc_send_mipc_cmd(context_ptr, msg_cnf_ptr, custom_mipc_xxx_req_cb, NULL, msg_cmd_ptr) == KAL_FALSE) {
+            error = KAL_FALSE;
+            //still need to free CMD MSG, no break here
+        }
+        //free CMD MSG
+        mipc_msg_deinit(msg_cmd_ptr);
+    } while(0);
+    
+    if (error) {
+        //add TLV for result: MIPC_RESULT_FAILURE
+        mipc_msg_add_tlv_uint32(msg_cnf_ptr, MIPC_T_RESULT, MIPC_RESULT_FAILURE);
+        //send CNF to Host
+        custom_l5_mipc_send_mipc_cnf(context_ptr, msg_cnf_ptr);
+        //free CNF MSG
+        mipc_msg_deinit(msg_cnf_ptr);
+    }
+}
+
+///////////////////////////////////////////////////////////////////////////////////
+static void custom_mipc_at_req_cb(void *context_ptr, mipc_msg_t *msg_cnf_ptr, kal_bool is_intermediate, char *at_data, kal_uint16 at_data_len, void *priv_ptr)
+{
+    if (is_intermediate) {
+        //add TLVs
+        mipc_msg_add_tlv(msg_cnf_ptr, 0x100, at_data_len, at_data);
+        return;
+    } 
+
+    //add TLV
+    mipc_msg_add_tlv_uint32(msg_cnf_ptr, MIPC_T_RESULT, MIPC_RESULT_SUCCESS);
+    //send CNF to Host
+    custom_l5_mipc_send_mipc_cnf(context_ptr, msg_cnf_ptr);
+    //free CNF MSG
+    mipc_msg_deinit(msg_cnf_ptr);
+}
+
+//example 3: send AT to PS
+static void custom_mipc_at_req(void *context_ptr, mipc_msg_t *msg_ptr)
+{
+    mipc_msg_t *msg_cnf_ptr;
+
+    //prepare CNF MSG
+    if ((msg_cnf_ptr = mipc_msg_copy_hdr(msg_ptr)) == NULL) {
+        return;
+    }
+    //change CNF MSG ID
+    msg_cnf_ptr->hdr.msg_id = MIPC_VENDOR_AT_CNF;
+
+    custom_l5_mipc_send_at_req(context_ptr, msg_cnf_ptr, custom_mipc_at_req_cb, NULL, "AT+CGACT?\r", strlen("AT+CGACT?\r"));
+}
+
+//example: send notify
+static void custom_mipc_at_ntf(void *context_ptr, mipc_msg_t *msg_ptr)
+{
+    char *at_urc = "+EURC: HELLO, Test\r";
+
+    //send urc to host
+     custom_l5_send_at_urc(at_urc, strlen(at_urc));
+
+    //send at to ps
+    custom_l5_mipc_send_at_req(context_ptr, NULL, NULL, NULL, "AT+CGACT?\r", strlen("AT+CGACT?\r"));
+}
+
+//which MIPC requred to authenticate before using
+//return 0 means no need to check SLA
+//return 1 means need SLA level 1
+//return 2 means need SLA level 2
+//return 3 means need SLA level 3
+kal_uint8 custom_mipc_is_needed_to_check_SLA(mipc_msg_t *msg_ptr)
+{
+    switch (msg_ptr->hdr.msg_id) {
+        case MIPC_SYS_SET_FCC_LOCK_REQ:
+            return 3;
+    }
+    return 0;
+}
+
+//don't modify below statements
+#undef MIPC_REQ
+#define MIPC_REQ(msg, handler) {MIPC_VENDOR_##msg##_REQ, handler},
+custom_l5_mipc_req_table_t custom_l5_mipc_req_table[] = {
+#include "custom_l5_mipc_req.def"
+};
+
+#undef MIPC_CMD
+#define MIPC_CMD(msg) {MIPC_VENDOR_##msg##_CMD},
+custom_l5_mipc_cmd_table_t custom_l5_mipc_cmd_table[] = {
+#include "custom_l5_mipc_cmd.def"
+};
+
+#undef MIPC_NTF
+#define MIPC_NTF(msg, handler) {MIPC_VENDOR_##msg##_NTF, handler},
+custom_l5_mipc_ntf_table_t custom_l5_mipc_ntf_table[] = {
+#include "custom_l5_mipc_ntf.def"
+};
+
+kal_uint16 get_custom_l5_mipc_req_table_size()
+{
+    return sizeof(custom_l5_mipc_req_table)/sizeof(custom_l5_mipc_req_table_t);
+}
+
+kal_uint16 get_custom_l5_mipc_cmd_table_size()
+{
+    return sizeof(custom_l5_mipc_cmd_table)/sizeof(custom_l5_mipc_cmd_table_t);
+}
+
+kal_uint16 get_custom_l5_mipc_ntf_table_size()
+{
+    return sizeof(custom_l5_mipc_ntf_table)/sizeof(custom_l5_mipc_ntf_table_t);
+}
diff --git a/mcu/custom/protocol/common/ps/custom_l5_mipc.h b/mcu/custom/protocol/common/ps/custom_l5_mipc.h
new file mode 100644
index 0000000..c6dd169
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_l5_mipc.h
@@ -0,0 +1,47 @@
+#ifndef _CUSTOM_L5_MIPC_H_
+#define _CUSTOM_L5_MIPC_H_
+
+#include "mipc_msg.h"
+#include "custom_l5_mipc_req.h"
+#include "custom_l5_mipc_cmd.h"
+#include "custom_l5_mipc_ntf.h"
+
+typedef void (*CUSTOM_L5_MIPC_REQ_HANDLER)(void *context_ptr, mipc_msg_t *msg_ptr);
+typedef void (*CUSTOM_L5_MIPC_CMD_CB)(void *context_ptr, mipc_msg_t *msg_cnf_ptr, mipc_msg_t *msg_rsp_ptr, void *priv_ptr);
+typedef void (*CUSTOM_L5_MIPC_AT_CB)(void *context_ptr, mipc_msg_t *msg_cnf_ptr, kal_bool is_intermediate, char *at_data, kal_uint16 at_data_len, void *priv_ptr);
+typedef void (*CUSTOM_L5_MIPC_NTF_HANDLER)(void *context_ptr, mipc_msg_t *msg_ptr);
+
+
+//send MIPC CMD to sAP
+extern kal_bool custom_l5_mipc_send_mipc_cmd(void *context_ptr, mipc_msg_t *msg_cnf_ptr, CUSTOM_L5_MIPC_CMD_CB cb, void *cb_priv_ptr, mipc_msg_t *msg_ptr);
+//send AT to PS
+extern kal_bool custom_l5_mipc_send_at_req(void *context_ptr, mipc_msg_t *msg_cnf_ptr, CUSTOM_L5_MIPC_AT_CB cb, void *cb_priv_ptr, char *at_cmd, kal_uint16 at_cmd_len);
+
+//send MIPC CNF to Host
+extern void custom_l5_mipc_send_mipc_cnf(void *context_ptr, mipc_msg_t *msg_ptr);
+
+typedef struct {
+    kal_uint16 msg_id;
+    CUSTOM_L5_MIPC_REQ_HANDLER handler;
+} custom_l5_mipc_req_table_t;
+
+typedef struct {
+    kal_uint16 msg_id;
+} custom_l5_mipc_cmd_table_t;
+
+typedef struct {
+    kal_uint16 msg_id;
+    CUSTOM_L5_MIPC_NTF_HANDLER handler;
+} custom_l5_mipc_ntf_table_t;
+
+extern custom_l5_mipc_req_table_t custom_l5_mipc_req_table[];
+extern custom_l5_mipc_cmd_table_t custom_l5_mipc_cmd_table[];
+extern custom_l5_mipc_ntf_table_t custom_l5_mipc_ntf_table[];
+
+kal_uint16 get_custom_l5_mipc_req_table_size();
+kal_uint16 get_custom_l5_mipc_cmd_table_size();
+kal_uint16 get_custom_l5_mipc_ntf_table_size();
+
+kal_uint8 custom_mipc_is_needed_to_check_SLA(mipc_msg_t *msg_ptr);
+
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_lcsp.c b/mcu/custom/protocol/common/ps/custom_lcsp.c
new file mode 100644
index 0000000..a08294d
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_lcsp.c
@@ -0,0 +1,86 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_lcsp.c
+ *
+ * Project:
+ * --------
+ *   UMOLYA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the procedures for LCSP related customer functions.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by Perforce. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Log$
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by Perforce. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "ps_public_enum.h"
+#include "ps_public_utility.h"
+
+/*****************************************************************************
+* FUNCTION
+*  custom_lcsp_adj_rsp_time
+* DESCRIPTION
+*  This function adjusts response time from location protocols
+* PARAMETERS
+*  rsp [IN] Original response time
+*  sim [IN] Protocol SIM ID
+* RETURNS
+*  kal_uint8
+*****************************************************************************/
+kal_uint8 custom_lcsp_adj_rsp_time(kal_uint8 rsp, protocol_id_enum pid)
+{
+    kal_uint8 a = sbp_query_md_feature_data_by_ps(SBP_LCSP_RSP_TIME_ADJ, pid), l = sbp_query_md_feature_data_by_ps(SBP_LCSP_RSP_TIME_LB, pid);
+
+    kal_print_string_trace(MOD_GPS, TRACE_GROUP_1, "%s: rsp=%d, SBP_LCSP_RSP_TIME_ADJ=%d, SBP_LCSP_RSP_TIME_LB=%d", __FUNCTION__, rsp, a, l);    
+    return a && rsp>l ? (rsp>l+a ? rsp-a : l) : rsp;
+}
diff --git a/mcu/custom/protocol/common/ps/custom_lte_ca.xls b/mcu/custom/protocol/common/ps/custom_lte_ca.xls
new file mode 100644
index 0000000..41052cc
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_lte_ca.xls
Binary files differ
diff --git a/mcu/custom/protocol/common/ps/custom_ltecsr_config.c b/mcu/custom/protocol/common/ps/custom_ltecsr_config.c
new file mode 100644
index 0000000..adce354
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_ltecsr_config.c
@@ -0,0 +1,827 @@
+#include "custom_ltecsr_config.h"
+
+#ifdef __VOLTE_SUPPORT__
+
+void ltecsr_set_mtk_default_value(nvram_ef_ltecsr_profile_record_struct *nvram_ltecsr_profile_ptr)
+{
+    memset(nvram_ltecsr_profile_ptr, 0, sizeof(nvram_ef_ltecsr_profile_record_struct));
+
+    nvram_ltecsr_profile_ptr->dtx_enable                        = KAL_TRUE;
+    nvram_ltecsr_profile_ptr->silence_dropcall_threshold        = 30000;
+    nvram_ltecsr_profile_ptr->no_rtp_dropcall                   = 0;/*parmter for no dl rtp drop*/
+    nvram_ltecsr_profile_ptr->jbm_load_params_enable            = 0;
+    nvram_ltecsr_profile_ptr->jbm_prebuf_len                    = 4;
+    nvram_ltecsr_profile_ptr->jbm_jitter_max_depth              = 12;
+    nvram_ltecsr_profile_ptr->jbm_jitter_full_offset            = 98;
+    nvram_ltecsr_profile_ptr->silence_to_rrc_report_threshold   = 15000;
+    nvram_ltecsr_profile_ptr->ltecsr_common_para0               = 0;
+    nvram_ltecsr_profile_ptr->ltecsr_common_para1               = 0;
+    nvram_ltecsr_profile_ptr->ltecsr_common_para2               = 0;
+    nvram_ltecsr_profile_ptr->ltecsr_common_para3               = 0;
+    nvram_ltecsr_profile_ptr->ltecsr_common_para4               = 0;
+    nvram_ltecsr_profile_ptr->rtp_expire_timer                  = 20000;
+    nvram_ltecsr_profile_ptr->rtcp_expire_timer                 = 20000;
+    nvram_ltecsr_profile_ptr->rtp_expire_warning_timer          = 0;
+    nvram_ltecsr_profile_ptr->rtcp_xr_interval                  = 5000;
+    nvram_ltecsr_profile_ptr->rtcp_xr_compound_rtcp             = KAL_FALSE;
+    nvram_ltecsr_profile_ptr->rtcp_xr_gmin                      = 16;
+    nvram_ltecsr_profile_ptr->rtcp_fix_interval_active          = 5000;
+    nvram_ltecsr_profile_ptr->rtcp_fix_interval_hold            = 5000;
+    nvram_ltecsr_profile_ptr->tty_sync_buf_time                 = 300;
+    nvram_ltecsr_profile_ptr->tty_wait_time                     = 1000;
+    nvram_ltecsr_profile_ptr->tty_sentence_diff                 = 3000;
+    nvram_ltecsr_profile_ptr->silence_ping_pcscf_threshold      = 5000;
+    nvram_ltecsr_profile_ptr->rtcp_min_interval                 = 500;
+    nvram_ltecsr_profile_ptr->rtcp_max_interval                 = 2000;
+    nvram_ltecsr_profile_ptr->stat_feature_option               = 1;
+    nvram_ltecsr_profile_ptr->stat_report_interval              = 5000;
+    nvram_ltecsr_profile_ptr->evs_prefer_rate                   = 15;
+    nvram_ltecsr_profile_ptr->text_rtp_expire_timer             = 0;    // default zero because no text RTP is reasonable 
+    nvram_ltecsr_profile_ptr->text_rtcp_expire_timer            = 20000;
+    nvram_ltecsr_profile_ptr->text_rtp_rtcp_expire_timer        = 0;    // default zero because no text RTP is reasonable and we consider NW default don't support text RTCP
+    nvram_ltecsr_profile_ptr->wfc_silence_threshold             = 5000;
+    nvram_ltecsr_profile_ptr->evolte_delay_threshold            = 400;  // unit: ms
+    nvram_ltecsr_profile_ptr->evolte_jitter_threshold           = 1;    // unit: ms
+    nvram_ltecsr_profile_ptr->evolte_plr_threshold              = 3;    // unit:%
+    nvram_ltecsr_profile_ptr->evolte_anbr_enable                = KAL_FALSE;    // default false for all operations
+    nvram_ltecsr_profile_ptr->evolte_anbr_para                  = 0;
+    nvram_ltecsr_profile_ptr->ul_silence_dropcall_threshold     = 0;    // default set to 0, which is closed. When greater than 0, the unit: ms
+    nvram_ltecsr_profile_ptr->ra_para                           = 0;
+    nvram_ltecsr_profile_ptr->ra_duration_max                   = 10000;
+    nvram_ltecsr_profile_ptr->ra_duration_low                   = 15000;
+    nvram_ltecsr_profile_ptr->ra_rsrp_poor_th                   = -75;
+    nvram_ltecsr_profile_ptr->ra_rsrp_good_th                   = -70;
+    nvram_ltecsr_profile_ptr->ra_sinr_poor_th                   = 20;
+    nvram_ltecsr_profile_ptr->ra_sinr_good_th                   = 30;
+}
+
+
+void ltecsr_overlap_nvram_profile(nvram_ef_ltecsr_profile_record_struct *src, nvram_ef_ltecsr_profile_record_struct *dst)
+{
+    if(src->dtx_enable != LTECSR_UNDEF_CONFIG_8)                    {dst->dtx_enable = src->dtx_enable;}
+    if(src->silence_dropcall_threshold != LTECSR_UNDEF_CONFIG_32)   {dst->silence_dropcall_threshold = src->silence_dropcall_threshold;}
+    if(src->no_rtp_dropcall != LTECSR_UNDEF_CONFIG_32)              {dst->no_rtp_dropcall = src->no_rtp_dropcall;}
+    if(src->jbm_load_params_enable != LTECSR_UNDEF_CONFIG_16)       {dst->jbm_load_params_enable = src->jbm_load_params_enable;}
+    if(src->jbm_prebuf_len != LTECSR_UNDEF_CONFIG_16)               {dst->jbm_prebuf_len = src->jbm_prebuf_len;}
+    if(src->jbm_jitter_max_depth != LTECSR_UNDEF_CONFIG_16)         {dst->jbm_jitter_max_depth = src->jbm_jitter_max_depth;}
+    if(src->jbm_jitter_full_offset != LTECSR_UNDEF_CONFIG_16)       {dst->jbm_jitter_full_offset = src->jbm_jitter_full_offset;}
+    if(src->silence_to_rrc_report_threshold != LTECSR_UNDEF_CONFIG_16) {dst->silence_to_rrc_report_threshold = src->silence_to_rrc_report_threshold;}
+    if(src->ltecsr_common_para0 != LTECSR_UNDEF_CONFIG_16)          {dst->ltecsr_common_para0 = src->ltecsr_common_para0;}
+    if(src->ltecsr_common_para1 != LTECSR_UNDEF_CONFIG_16)          {dst->ltecsr_common_para1 = src->ltecsr_common_para1;}
+    if(src->ltecsr_common_para2 != LTECSR_UNDEF_CONFIG_16)          {dst->ltecsr_common_para2 = src->ltecsr_common_para2;}
+    if(src->ltecsr_common_para3 != LTECSR_UNDEF_CONFIG_16)          {dst->ltecsr_common_para3 = src->ltecsr_common_para3;}
+    if(src->ltecsr_common_para4 != LTECSR_UNDEF_CONFIG_16)          {dst->ltecsr_common_para4 = src->ltecsr_common_para4;}
+    if(src->rtp_expire_timer != LTECSR_UNDEF_CONFIG_32)             {dst->rtp_expire_timer = src->rtp_expire_timer;}
+    if(src->rtcp_expire_timer != LTECSR_UNDEF_CONFIG_32)            {dst->rtcp_expire_timer = src->rtcp_expire_timer;}
+    if(src->rtp_expire_warning_timer != LTECSR_UNDEF_CONFIG_32)     {dst->rtp_expire_warning_timer = src->rtp_expire_warning_timer;}
+    if(src->rtcp_xr_interval != LTECSR_UNDEF_CONFIG_16)             {dst->rtcp_xr_interval = src->rtcp_xr_interval;}
+    if(src->rtcp_xr_compound_rtcp != LTECSR_UNDEF_CONFIG_8)         {dst->rtcp_xr_compound_rtcp = src->rtcp_xr_compound_rtcp;}
+    if(src->rtcp_xr_gmin != LTECSR_UNDEF_CONFIG_8)                  {dst->rtcp_xr_gmin = src->rtcp_xr_gmin;}
+    if(src->rtcp_fix_interval_active != LTECSR_UNDEF_CONFIG_16)     {dst->rtcp_fix_interval_active = src->rtcp_fix_interval_active;}
+    if(src->rtcp_fix_interval_hold != LTECSR_UNDEF_CONFIG_16)       {dst->rtcp_fix_interval_hold = src->rtcp_fix_interval_hold;}
+    if(src->tty_sync_buf_time != LTECSR_UNDEF_CONFIG_16)            {dst->tty_sync_buf_time = src->tty_sync_buf_time;}
+    if(src->tty_wait_time != LTECSR_UNDEF_CONFIG_16)                {dst->tty_wait_time = src->tty_wait_time;}
+    if(src->tty_sentence_diff != LTECSR_UNDEF_CONFIG_16)            {dst->tty_sentence_diff = src->tty_sentence_diff;}
+    if(src->silence_ping_pcscf_threshold != LTECSR_UNDEF_CONFIG_32) {dst->silence_ping_pcscf_threshold = src->silence_ping_pcscf_threshold;}
+    if(src->rtcp_min_interval != LTECSR_UNDEF_CONFIG_16)            {dst->rtcp_min_interval = src->rtcp_min_interval;}
+    if(src->rtcp_max_interval != LTECSR_UNDEF_CONFIG_16)            {dst->rtcp_max_interval = src->rtcp_max_interval;}
+    if(src->stat_feature_option != LTECSR_UNDEF_CONFIG_16)          {dst->stat_feature_option = src->stat_feature_option;}
+    if(src->stat_report_interval != LTECSR_UNDEF_CONFIG_16)         {dst->stat_report_interval = src->stat_report_interval;}
+    if(src->evs_prefer_rate != LTECSR_UNDEF_CONFIG_8)               {dst->evs_prefer_rate = src->evs_prefer_rate;}
+    if(src->text_rtp_expire_timer != LTECSR_UNDEF_CONFIG_32)        {dst->text_rtp_expire_timer = src->text_rtp_expire_timer;}
+    if(src->text_rtcp_expire_timer != LTECSR_UNDEF_CONFIG_32)       {dst->text_rtcp_expire_timer = src->text_rtcp_expire_timer;}
+    if(src->text_rtp_rtcp_expire_timer != LTECSR_UNDEF_CONFIG_32)   {dst->text_rtp_rtcp_expire_timer = src->text_rtp_rtcp_expire_timer;}
+    if(src->wfc_silence_threshold != LTECSR_UNDEF_CONFIG_32)        {dst->wfc_silence_threshold = src->wfc_silence_threshold;}
+    if(src->evolte_delay_threshold != LTECSR_UNDEF_CONFIG_16)       {dst->evolte_delay_threshold = src->evolte_delay_threshold;}
+    if(src->evolte_jitter_threshold != LTECSR_UNDEF_CONFIG_16)      {dst->evolte_jitter_threshold = src->evolte_jitter_threshold;}
+    if(src->evolte_plr_threshold != LTECSR_UNDEF_CONFIG_16)         {dst->evolte_plr_threshold = src->evolte_plr_threshold;}
+    if(src->evolte_anbr_enable!= LTECSR_UNDEF_CONFIG_8)             {dst->evolte_anbr_enable = src->evolte_anbr_enable;}
+    if(src->evolte_anbr_para != LTECSR_UNDEF_CONFIG_32)             {dst->evolte_anbr_para = src->evolte_anbr_para;}
+    if(src->ul_silence_dropcall_threshold != LTECSR_UNDEF_CONFIG_32){dst->ul_silence_dropcall_threshold = src->ul_silence_dropcall_threshold;}
+    if(src->ra_para != LTECSR_UNDEF_CONFIG_32)                      {dst->ra_para = src->ra_para;}
+    if(src->ra_duration_max != LTECSR_UNDEF_CONFIG_32)              {dst->ra_duration_max = src->ra_duration_max;}
+    if(src->ra_duration_low != LTECSR_UNDEF_CONFIG_32)              {dst->ra_duration_low = src->ra_duration_low;}
+    if(src->ra_rsrp_poor_th != LTECSR_UNDEF_CONFIG_32)              {dst->ra_rsrp_poor_th = src->ra_rsrp_poor_th;}
+    if(src->ra_rsrp_good_th != LTECSR_UNDEF_CONFIG_32)              {dst->ra_rsrp_good_th = src->ra_rsrp_good_th;}
+    if(src->ra_sinr_poor_th != LTECSR_UNDEF_CONFIG_32)              {dst->ra_sinr_poor_th = src->ra_sinr_poor_th;}
+    if(src->ra_sinr_good_th != LTECSR_UNDEF_CONFIG_32)              {dst->ra_sinr_good_th = src->ra_sinr_good_th;}
+
+    return;
+}
+
+
+/* [NVRAM] > [MCF OTA Customization] > [MCF OTA Default] > [SBP Customization] > [Default] */
+kal_bool ltecsr_nvram_customization(ltecsr_custom_param_struct *custom_param_ptr, nvram_ef_ltecsr_profile_record_struct **profile_ptr, nvram_ef_ltecsr_profile_record_struct **rom_profile_ptr)
+{
+    nvram_ef_ltecsr_profile_record_struct *ltecsr_profile_ptr = NULL;
+    nvram_ef_ltecsr_profile_record_struct *tmp_ltecsr_profile_ptr = NULL;
+
+    kal_uint16 record_idx = custom_param_ptr->sim_slot_id + 1;
+    sim_interface_enum ps_id = l4c_gemini_get_switched_sim_id(custom_param_ptr->sim_slot_id);
+
+    mcf_tlvota_sbp_tag_t sbp_tag;
+    mcf_ota_result_e res = MCF_OTA_R_MAX;
+
+    // Allocate buffer to read NVRAM setting
+    ltecsr_profile_ptr = (nvram_ef_ltecsr_profile_record_struct*)get_ctrl_buffer(sizeof(kal_uint8) * NVRAM_EF_LTECSR_PROFILE_SIZE);
+    tmp_ltecsr_profile_ptr = (nvram_ef_ltecsr_profile_record_struct*)get_ctrl_buffer(sizeof(kal_uint8) * NVRAM_EF_LTECSR_PROFILE_SIZE);
+
+
+    /* Priority 5: [Default] load MTK default nvram setting */
+    ltecsr_set_mtk_default_value(ltecsr_profile_ptr);
+
+
+    /* Priority 4: [MCF OTA Default] */
+    memset((void *)tmp_ltecsr_profile_ptr, 0xff, sizeof(nvram_ef_ltecsr_profile_record_struct));
+
+    res = mcf_read_ota_buffer(NVRAM_EF_LTECSR_PROFILE_LID, record_idx, (kal_uint8 *)tmp_ltecsr_profile_ptr, sizeof(nvram_ef_ltecsr_profile_record_struct));
+    if(res == MCF_OTA_R_SUCCESS) {
+        ltecsr_overlap_nvram_profile(tmp_ltecsr_profile_ptr, ltecsr_profile_ptr);
+    }
+
+
+    /* Priority 3: [SBP Customization] Customize NVRAM according to SBP ID */
+    switch(custom_param_ptr->op_id)
+    {
+        case 1: /* CMCC */
+        {
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<12); //LTECSR_FEATURE_HOLDCALL_DL_CHECK
+            ltecsr_profile_ptr->evs_prefer_rate = 4; /*VoLTE_EVS_Codec_Bitrate_13_2 */
+                              
+            ltecsr_profile_ptr->evolte_anbr_enable = KAL_TRUE;
+            ltecsr_profile_ptr->evolte_anbr_para = ltecsr_profile_ptr->evolte_anbr_para | 1; //ping pong avoided for anbr scenerio: dl bitrate increase
+            ltecsr_profile_ptr->evolte_anbr_para = ltecsr_profile_ptr->evolte_anbr_para | (1<<1); //rtcp bw not considered
+            ltecsr_profile_ptr->evolte_anbr_para = ltecsr_profile_ptr->evolte_anbr_para | (1<<2); //sip avoided
+            ltecsr_profile_ptr->evolte_anbr_para = ltecsr_profile_ptr->evolte_anbr_para | (1<<3); //only part of audio rates can be selected from, instead of all mode_set
+            ltecsr_profile_ptr->no_rtp_dropcall = 60000;/*add for no rtp drop call*/
+            break;
+        }
+        case 2:/* CU*/
+        {            
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<12); //LTECSR_FEATURE_HOLDCALL_DL_CHECK
+            ltecsr_profile_ptr->no_rtp_dropcall = 60000;/*add for no rtp drop call*/
+            break;
+        }
+
+        case 3: /* Orange */
+        {
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<4); //LTECSR_FEATURE_DYNAMIC_QOS
+            break;
+        }
+        case 5: /* DTAG (TMOEU) */
+        {
+            ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;
+            /* Poland */
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "260", 3) == 0) {
+                ltecsr_profile_ptr->ltecsr_common_para0 = 8;  // dtmf interval
+                ltecsr_profile_ptr->ltecsr_common_para1 = 8;  // dtmf duration
+            }
+            break;
+        }
+        case 6: /* VDF */
+        {
+            ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<5) | (1<<6);
+			/* New Zealand */
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "530", 3) == 0) {
+				ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<1) | (1<<5) | (1<<6);
+            } 
+            break;
+        }
+        case 7:   /* ATT */
+        case 145: /* Cricket (should be aligned with AT&T) */
+        case 196: /* FirstNet (should be aligned with AT&T) */
+        {
+            ltecsr_profile_ptr->stat_feature_option = ltecsr_profile_ptr->stat_feature_option | (1<<1); //LTECSR_STAT_CIQ
+
+            ltecsr_profile_ptr->rtp_expire_timer = 20000;
+            ltecsr_profile_ptr->rtcp_expire_timer = 20000;
+            ltecsr_profile_ptr->silence_dropcall_threshold = 20000; // Inactivity timeouts for both RTP and RTCP shall be set to 20 seconds
+            ltecsr_profile_ptr->text_rtp_rtcp_expire_timer = 20000;
+            /* Mexico */
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "334", 3) == 0) {
+                ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;
+                ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<1); //LTECSR_FEATURE_HOLDCALL_DL_CHECK
+            }
+            break;
+        }
+        case 8: /* TMO-US */
+        {
+            //LTECSR_FEATURE_HOLDCALL_DL_CHECK and LTECSR_FEATURE_RTCP_MAX_INTERVAL_ENABLE
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<1) | (1<<8);
+            ltecsr_profile_ptr->stat_feature_option = ltecsr_profile_ptr->stat_feature_option | (1<<2); //LTECSR_STAT_ECHO
+
+            ltecsr_profile_ptr->rtcp_max_interval = 2000;
+            ltecsr_profile_ptr->rtp_expire_timer = 30000;
+            ltecsr_profile_ptr->rtcp_expire_timer = 30000;
+            ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;
+            ltecsr_profile_ptr->ul_silence_dropcall_threshold = 30000; 
+
+            break;
+        }
+        case 9: /* CT */
+        {
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<1) | (1<<12); //LTECSR_FEATURE_HOLDCALL_DL_CHECK
+
+            ltecsr_profile_ptr->silence_dropcall_threshold   = 20000; //CT requirment: 20s
+            ltecsr_profile_ptr->no_rtp_dropcall = 60000;/*add for no rtp drop call*/
+            break;
+        }
+        case 11: /* H3G */
+        {
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "232", 3) == 0) {
+                /* Austria */
+                ltecsr_profile_ptr->rtp_expire_timer  = 15000;
+                ltecsr_profile_ptr->rtcp_expire_timer = 15000;
+            }
+            break;
+        }
+        case 12: /* VzW */
+        {
+            //LTECSR_FEATURE_HOLDCALL_DL_CHECK and LTECSR_FEATURE_DTMF_MUTE and LTECSR_FEATURE_FIX_RTCP_INTERVAL_ACTIVE and LTECSR_FEATURE_FIX_RTCP_INTERVAL_HOLD
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<1) | (1<<0) | (1<<5) | (1<<6);
+            ltecsr_profile_ptr->stat_feature_option = ltecsr_profile_ptr->stat_feature_option | 0x1;    //LTECSR_STAT_MDMI
+
+            ltecsr_profile_ptr->silence_dropcall_threshold   = 20000; //VzW requirment: 20s
+            ltecsr_profile_ptr->rtcp_fix_interval_hold = 2000;    //VzW requirement: 2s while the call is not active
+            ltecsr_profile_ptr->wfc_silence_threshold = 1000;
+
+            ltecsr_profile_ptr->text_rtcp_expire_timer = 0; //ALPS04442456: VzW requirement: do not enable RTCP inactivity timer for text
+            break;
+        }
+        case 15: /* Telefonica */
+        {
+            /* Spain */
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "214", 3) == 0) {
+                ltecsr_profile_ptr->silence_dropcall_threshold   = 30000;
+            }  
+            /* UK */
+            else if (strncmp((char *)(custom_param_ptr->mccmnc), "234", 3) == 0) {
+                ltecsr_profile_ptr->silence_dropcall_threshold   = 20000;
+            }
+            /* Default */
+            else {
+                ltecsr_profile_ptr->silence_dropcall_threshold   = 10000; //Telefonica requirment: 10s
+            }
+            break;
+        }
+        case 16: /* EE */
+        {
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<1); //LTECSR_FEATURE_HOLDCALL_DL_CHECK
+            break;
+        }
+        case 17: /* DOCOMO */
+        {
+            //LTECSR_FEATURE_DTMF_MUTE and LTECSR_FEATURE_FIX_RTCP_INTERVAL_ACTIVE and LTECSR_FEATURE_FIX_RTCP_INTERVAL_HOLD
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 |(1<<0) | (1<<5) | (1<<6); 
+
+            ltecsr_profile_ptr->silence_dropcall_threshold   = 12000; //DCM requirment: 12s
+            break;
+        }
+        case 18: /* RJIL */
+        {
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<1); //LTECSR_FEATURE_HOLDCALL_DL_CHECK
+
+            ltecsr_profile_ptr->stat_feature_option = ltecsr_profile_ptr->stat_feature_option | (1<<4); //LTECSR_STAT_RJIL
+            break;
+        }
+        case 20: /* Sprint */
+        {
+            ltecsr_profile_ptr->stat_feature_option    = ltecsr_profile_ptr->stat_feature_option | (1<<3); //LTECSR_STAT_HIDDEN
+            ltecsr_profile_ptr->stat_report_interval   = 3000;
+
+            ltecsr_profile_ptr->silence_dropcall_threshold   = 45000; //Sprint requirment: 45s
+            break;
+        }
+        case 50: /*SoftBank*/
+        {
+            //LTECSR_FEATURE_DTMF_MUTE and LTECSR_FEATURE_CMR_DISABLE
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<0) | (1<<5) | (1<<6) | (1<<11);
+            ltecsr_profile_ptr->ltecsr_common_para0 = 6;  // dtmf interlval
+            ltecsr_profile_ptr->ltecsr_common_para1 = 6;  // dtmf duration
+            break;
+        }
+        case 104: /*strahub*/
+        {
+            ltecsr_profile_ptr->no_rtp_dropcall= 60000;/*parmter for no dl rtp drop*/
+            break;
+        } 
+        case 114: /*KT*/
+        case 115: /*SKT*/
+        case 116: /*U Plus*/
+        {
+            //LTECSR_FEATURE_DTMF_MUTE and LTECSR_FEATURE_ALWAYS_ONE_SHOT_DTMF and LTECSR_FEATURE_DTMF_END_SEP_ENABLE and LTECSR_FEATURE_DTMF_END_DURATION_UPDATE
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<0) | (1<<2) | (1<<3) | (1<<10);
+            ltecsr_profile_ptr->ltecsr_common_para0 = 6;  // dtmf interlval
+            ltecsr_profile_ptr->ltecsr_common_para1 = 6;  // dtmf duration
+            ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;  
+            break;
+        }
+        case 110: /* FET */
+        {
+            ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;  
+            break;
+        }
+        case 111: /* Vodafone */
+        {
+            ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;  
+            break;
+        }
+        case 112: /* Telcel */
+        {
+            /* Mexico */
+            ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<1); //LTECSR_FEATURE_HOLDCALL_DL_CHECK
+            ltecsr_profile_ptr->rtp_expire_timer = 10000;
+            ltecsr_profile_ptr->rtcp_expire_timer = 10000;
+            break;
+        }
+        case 120: /* Claro */
+        {
+            ltecsr_profile_ptr->rtp_expire_timer = 30000;
+            ltecsr_profile_ptr->rtcp_expire_timer = 25000;
+            
+            /* Peru */
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "716", 3) == 0) {
+                ltecsr_profile_ptr->silence_dropcall_threshold = 10000;
+            }
+            /* Ecuador */
+            else if (strncmp((char *)(custom_param_ptr->mccmnc), "740", 3) == 0) {
+                ltecsr_profile_ptr->silence_dropcall_threshold = 10000;
+            }
+            break;
+        }
+		case 126: /* TurkTelekom */
+        {
+			/*Turkey*/
+			ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<5) | (1<<6);
+            ltecsr_profile_ptr->rtp_expire_timer = 30000;
+            ltecsr_profile_ptr->rtcp_expire_timer = 0;
+            break;
+        }
+        case 129: /* KDDI */
+        {
+            //LTECSR_FEATURE_DTMF_MUTE and LTECSR_FEATURE_HOLDCALL_DL_CHECK
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<0) | (1<<1); 
+            ltecsr_profile_ptr->rtp_expire_timer = 0;
+            ltecsr_profile_ptr->rtcp_expire_timer = 20000;
+            ltecsr_profile_ptr->silence_dropcall_threshold = 20000;
+            break;
+        }
+        case 132: /* Movistar */
+        {
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "334", 3) == 0) {
+                /* Mexico */
+                ltecsr_profile_ptr->rtp_expire_timer = 30000;
+            } else if (strncmp((char *)(custom_param_ptr->mccmnc), "748", 3) == 0) {
+                /* Uruguay */
+                ltecsr_profile_ptr->rtp_expire_timer = 60000;
+            } else {
+                /* default */
+                ltecsr_profile_ptr->rtp_expire_timer = 10000;
+            }
+            break;
+        }
+        case 134: /* Elisa */
+        {
+            ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;
+            break;
+        }
+		case 135: /* MTS */
+        {
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<1); //LTECSR_FEATURE_HOLDCALL_DL_CHECK
+            ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;
+            break;
+		}
+		case 136: /* Entel */
+        {
+			/* Peru */
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "716", 3) == 0) {
+                // LTECSR_FEATURE_FIX_RTCP_INTERVAL_ACTIVE and LTECSR_FEATURE_FIX_RTCP_INTERVAL_HOLD
+				ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<5) | (1<<6);
+            }
+			break;
+		}
+        case 137: /* Tele2 */
+        {
+            ltecsr_profile_ptr->silence_dropcall_threshold = 20000;
+            break;
+        }   
+        case 147: /* Airtel */
+        {
+            ltecsr_profile_ptr->silence_dropcall_threshold   = 90000;
+            ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;
+            // LTECSR_FEATURE_SEND_INCOMING_DLPKT
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<12);
+            break;
+        }
+        case 155: /* DIGI */
+        {
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "216", 3) == 0) {
+                /* Hungary */
+                ltecsr_profile_ptr->silence_dropcall_threshold = 5000; //DIGI requirment: 5s
+                ltecsr_profile_ptr->wfc_silence_threshold = 3000; //DIGI requirment: 3s
+            }
+            else if (strncmp((char *)(custom_param_ptr->mccmnc), "226", 3) == 0) {
+                 /*Romania*/
+                ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;
+            }
+            else if (strncmp((char *)(custom_param_ptr->mccmnc), "502", 3) == 0) {
+                /* Malaysia */
+                ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;
+            }
+            break;
+        }
+        case 156: /* Telenor */
+        {
+            ltecsr_profile_ptr->rtp_expire_warning_timer = 3000;
+            break;
+        }
+        case 157: /* TELUS */
+        {
+            ltecsr_profile_ptr->silence_dropcall_threshold   = 14000;
+            ltecsr_profile_ptr->rtcp_expire_timer            = 14000;
+            ltecsr_profile_ptr->rtp_expire_timer             = 14000;
+            ltecsr_profile_ptr->ra_para                      = ltecsr_profile_ptr->ra_para | (1 << 0) | (1 << 1) | (1 << 2);
+            ltecsr_profile_ptr->ra_duration_max              = 10000;
+            ltecsr_profile_ptr->ra_duration_low              = 15000;
+            ltecsr_profile_ptr->ra_rsrp_poor_th              = -75;
+            ltecsr_profile_ptr->ra_rsrp_good_th              = -70;
+            ltecsr_profile_ptr->ra_sinr_poor_th              = 20;
+            ltecsr_profile_ptr->ra_sinr_good_th              = 30;
+            break;
+        }
+        case 158: /* Zain */
+        {
+            /* Bahrain */
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "426", 3) == 0) {
+                //LTECSR_FEATURE_FIX_RTCP_INTERVAL_ACTIVE and LTECSR_FEATURE_FIX_RTCP_INTERVAL_HOLD
+                ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<5) | (1<<6);
+                ltecsr_profile_ptr->rtcp_fix_interval_active = 30000;
+                ltecsr_profile_ptr->rtcp_fix_interval_hold = 60000;
+            }
+            break;
+        }
+        case 159: /* STC */
+        {
+            /* Bahrain */
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "426", 3) == 0) {
+                //LTECSR_FEATURE_FIX_RTCP_INTERVAL_ACTIVE and LTECSR_FEATURE_FIX_RTCP_INTERVAL_HOLD
+                ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<5) | (1<<6);
+            }
+            break;
+        }
+        case 161: /* Play Poland */
+        {
+            ltecsr_profile_ptr->silence_dropcall_threshold   = 60000;
+            break;
+        }
+		case 162: /* Freedom Canada */
+        {
+            ltecsr_profile_ptr->silence_dropcall_threshold = 10000;
+            break;
+        }
+        case 171: /* WOM Colombia */{
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "732", 3) == 0) {
+                ltecsr_profile_ptr->rtp_expire_timer = 30000;
+                ltecsr_profile_ptr->rtcp_expire_timer = 25000; 
+            }
+            break;
+        }
+		case 172: /* Altice Dominican */
+        {
+	        ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<5) | (1<<6);
+            ltecsr_profile_ptr->rtcp_expire_timer = 120000;
+            break;
+        }
+        case 183: /* Personal */
+        {
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "722", 3) == 0) {
+                /* Argentina */
+                ltecsr_profile_ptr->silence_dropcall_threshold   = 20000; // 20s
+                ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;
+            }
+            break;
+        }
+        case 184: /* Vietnam Viettel  */
+        {
+            ltecsr_profile_ptr->silence_dropcall_threshold   = 20000; // 20s
+            break;
+        }
+        case 185: /* 2degrees */
+        {
+            ltecsr_profile_ptr->rtp_expire_timer = 30000; //30 seconds
+            break;
+        }
+		case 187: /* Kenya/Safaricom */
+        {
+            ltecsr_profile_ptr->rtcp_expire_timer = 0;
+            break;
+        }
+        case 189: /* UMOBILE */
+        {
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "502", 3) == 0) {
+                ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;
+            }
+            break;
+        }
+        case 195: /* O2 Czech */
+        {
+            ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;
+            break;
+        }
+        case 202: /* spark NZ*/
+        {
+            ltecsr_profile_ptr->rtp_expire_warning_timer = 1000;
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<1); //LTECSR_FEATURE_HOLDCALL_DL_CHECK
+            break;
+        }
+        case 209: /* Avantel */
+        {
+            // LTECSR_FEATURE_FIX_RTCP_INTERVAL_ACTIVE and LTECSR_FEATURE_FIX_RTCP_INTERVAL_HOLD
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<5) | (1<<6);
+            ltecsr_profile_ptr->rtcp_fix_interval_active = 20000;
+            ltecsr_profile_ptr->rtcp_fix_interval_hold = 20000;
+            break;
+        }
+        case 215: /* Cellcard */
+        {
+            /* Cambodia */
+			// LTECSR_FEATURE_FIX_RTCP_INTERVAL_ACTIVE and LTECSR_FEATURE_FIX_RTCP_INTERVAL_HOLD
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<5) | (1<<6);
+            ltecsr_profile_ptr->rtcp_fix_interval_active = 10000;
+            ltecsr_profile_ptr->rtcp_fix_interval_hold = 10000;
+            break;
+        }
+        case 216: /* Zong */
+        {
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "410", 3) == 0) {
+                /* Pakistan */
+                ltecsr_profile_ptr->silence_dropcall_threshold   = 10000; // 10s
+            }
+            break;
+        }
+		case 220: /* Tigo */
+        {
+            /* Bolivia */
+            // LTECSR_FEATURE_FIX_RTCP_INTERVAL_ACTIVE and LTECSR_FEATURE_FIX_RTCP_INTERVAL_HOLD
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<5) | (1<<6);
+            ltecsr_profile_ptr->rtcp_fix_interval_active = 5000;
+            ltecsr_profile_ptr->rtcp_fix_interval_hold = 5000;
+            ltecsr_profile_ptr->silence_dropcall_threshold = 20000;
+            break;
+        }
+        case 227: /* Wind */
+        {
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "222", 3) == 0) {
+                /* italy */
+                ltecsr_profile_ptr->silence_dropcall_threshold   = 10000; //10s
+                ltecsr_profile_ptr->rtcp_expire_timer = 10000;
+            }
+            break;
+        }
+        case 232: /* Mobitel */
+        {
+            /* Sri Lanka */
+            // LTECSR_FEATURE_FIX_RTCP_INTERVAL_ACTIVE and LTECSR_FEATURE_FIX_RTCP_INTERVAL_HOLD
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<5) | (1<<6);
+            ltecsr_profile_ptr->rtcp_fix_interval_active = 20000;
+            ltecsr_profile_ptr->rtcp_fix_interval_hold = 20000;
+            break;
+        }
+        case 236: /* USCC */
+        {
+            //LTECSR_FEATURE_FIX_RTCP_INTERVAL_ACTIVE and LTECSR_FEATURE_FIX_RTCP_INTERVAL_HOLD
+            ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<5) | (1<<6);
+
+            ltecsr_profile_ptr->rtp_expire_timer             = 20000;   // 20s
+            ltecsr_profile_ptr->rtcp_expire_timer            = 20000;   // 20s
+            ltecsr_profile_ptr->silence_dropcall_threshold   = 20000;   // 20s
+            ltecsr_profile_ptr->rtcp_fix_interval_active     = 5000;    // 5s
+            ltecsr_profile_ptr->rtcp_fix_interval_hold       = 5000;    // 5s
+            break;
+        }
+        case 239: /* VIP */
+        {
+            if((strncmp((char *)(custom_param_ptr->mccmnc), "294", 3) == 0) ||
+               (strncmp((char *)(custom_param_ptr->mccmnc), "220", 3) == 0))
+            {
+                /* Macedonia and Serbia */
+                ltecsr_profile_ptr->silence_dropcall_threshold   = 20000; // 20s
+            }
+            break;
+        }
+        case 240: /* XPlore Mobile Canada */
+        {
+            ltecsr_profile_ptr->silence_dropcall_threshold = 20000;
+            break;
+        }
+        case 243: /* Globe */
+        {
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "515", 3) == 0) {
+                /* Philippines */
+                ltecsr_profile_ptr->rtp_expire_timer = 60000;
+                ltecsr_profile_ptr->rtcp_expire_timer = 60000;
+            }
+            break;
+        }
+        case 267: /* GCI/USA */
+        {
+            ltecsr_profile_ptr->rtp_expire_timer = 30000;
+            break;
+        }
+        case 275: /* Lifecell Ukraine */
+        {
+            ltecsr_profile_ptr->rtp_expire_timer = 15000;
+            ltecsr_profile_ptr->rtcp_expire_timer = 15000;
+            break;
+        }
+        case 285: /* Vinafhone Vietnam */
+        {
+            ltecsr_profile_ptr->silence_dropcall_threshold = 20000;
+            break;
+        }
+        case 288: /* Virgin UK */
+        {
+            ltecsr_profile_ptr->rtp_expire_timer  = 15000;
+            ltecsr_profile_ptr->rtcp_expire_timer = 15000;
+            break;
+        }
+		case 298: /* Umniah Jordan */
+        {
+            ltecsr_profile_ptr->silence_dropcall_threshold   = 20000;
+            break;
+        }
+		case 302: /* Oman */
+        {
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "422", 3) == 0) {
+                /* ooredoo */ 
+				ltecsr_profile_ptr->rtp_expire_timer  = 30000;
+                ltecsr_profile_ptr->rtcp_expire_timer = 30000;
+            }
+            break;
+        }
+        case 304: /* CTMO/Macau */
+        {
+            ltecsr_profile_ptr->silence_dropcall_threshold   = 10000; // 10 sec
+            break;
+        }
+        case 316: /* Nex-Tech Wireless / USA */
+        {
+            ltecsr_profile_ptr->silence_dropcall_threshold = 10000; // 10s
+            ltecsr_profile_ptr->rtp_expire_timer  = 30000;          // 30s
+            break;
+        }
+        case 332: /*SoLinc/USA*/
+        {
+            ltecsr_profile_ptr->rtp_expire_timer = 1800000;
+            ltecsr_profile_ptr->rtcp_expire_timer = 1800000;
+            break;
+        }
+        case 333: /*Cellcom/USA*/
+        {
+            ltecsr_profile_ptr->text_rtcp_expire_timer = 0;
+            break;
+        }
+        case 334: /* Tashi-Cell/Bhutan */
+        {
+            ltecsr_profile_ptr->silence_dropcall_threshold = 20000;
+            break;
+        }
+        case 341: /* UCell-Uzbekistan */
+        {
+            ltecsr_profile_ptr->silence_dropcall_threshold = 20000;
+            break;
+        }
+		case 352: /* MOD/Egypt */
+        {
+            ltecsr_profile_ptr->silence_dropcall_threshold   = 60000;
+            break;
+        }
+		case 365: /* Illinois Valley Cellular */
+        {
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "311", 3) == 0) {
+				ltecsr_profile_ptr->rtp_expire_timer  = 10000;
+                ltecsr_profile_ptr->rtcp_expire_timer = 10000;
+            }
+            break;
+        }
+		case 367: /* James Valley Wireless */
+        {
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "310", 3) == 0) {
+                ltecsr_profile_ptr->rtp_expire_timer  = 10000;
+                ltecsr_profile_ptr->rtcp_expire_timer = 10000;
+            }
+            break;
+        }
+		case 382: /* ZEOP */
+        {
+            /* France Reunion */
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "647", 3) == 0) {
+                //LTECSR_FEATURE_FIX_RTCP_INTERVAL_ACTIVE and LTECSR_FEATURE_FIX_RTCP_INTERVAL_HOLD
+                ltecsr_profile_ptr->ltecsr_common_para2 = ltecsr_profile_ptr->ltecsr_common_para2 | (1<<5) | (1<<6);
+            }
+            break;
+        }	
+        case 387: /* West Central Wireless USA */
+        {
+            if (strncmp((char *)(custom_param_ptr->mccmnc), "310", 3) == 0) {
+                ltecsr_profile_ptr->rtp_expire_timer  = 10000;
+                ltecsr_profile_ptr->rtcp_expire_timer = 10000;
+            }
+            break;
+        }
+    }
+
+    /* Priority 2:[MCF OTA Customization] */
+    memset((void *)&sbp_tag, 0, sizeof(mcf_tlvota_sbp_tag_t));
+    memset((void *)tmp_ltecsr_profile_ptr, 0xff, sizeof(nvram_ef_ltecsr_profile_record_struct));
+
+    sbp_tag.sbp_id = custom_param_ptr->op_id;
+    if (custom_param_ptr->with_imsi_info) {
+        strncpy((char *)&sbp_tag.mcc[0], (const char *)custom_param_ptr->mccmnc, 3);
+        strncpy((char *)&sbp_tag.mnc[0], (const char *)(custom_param_ptr->mccmnc + 3), custom_param_ptr->imsi_mnc_len);
+    }
+    res = mcf_read_tlvota_buffer_sbp_tag(ps_id, sbp_tag, NVRAM_EF_LTECSR_PROFILE_LID, (kal_uint8 *)tmp_ltecsr_profile_ptr, sizeof(nvram_ef_ltecsr_profile_record_struct));
+    if (res == MCF_OTA_R_SUCCESS) {
+        ltecsr_overlap_nvram_profile(tmp_ltecsr_profile_ptr, ltecsr_profile_ptr);
+    }
+
+
+    /* Priority 1: [NVRAM] overlap EM Settings to nvram_ims_profile_ptr which would update to ltecsr context */
+    if (!nvram_external_read_data(NVRAM_EF_LTECSR_PROFILE_LID,
+                             record_idx,
+                             (kal_uint8 *)tmp_ltecsr_profile_ptr,
+                             NVRAM_EF_LTECSR_PROFILE_SIZE)) {
+        free_ctrl_buffer(tmp_ltecsr_profile_ptr);
+        free_ctrl_buffer(ltecsr_profile_ptr);
+        return KAL_FALSE;
+    }
+
+    ltecsr_overlap_nvram_profile(tmp_ltecsr_profile_ptr, ltecsr_profile_ptr);
+
+
+    *profile_ptr = ltecsr_profile_ptr;
+
+    if (rom_profile_ptr != NULL) {
+        *rom_profile_ptr = tmp_ltecsr_profile_ptr;
+    }
+    else {
+        free_ctrl_buffer(tmp_ltecsr_profile_ptr);
+    }
+
+    return KAL_TRUE;
+}
+
+kal_bool mcf_custom_dump_ltecsr_data(mcf_custom_dump_param_struct *param_ptr)
+{
+    nvram_ef_ltecsr_profile_record_struct *ltecsr_profile_ptr = NULL;
+    ltecsr_custom_param_struct custom_param;
+    kal_bool ret = KAL_FALSE;
+
+    kal_mem_set(&custom_param, 0, sizeof(ltecsr_custom_param_struct));
+
+
+    if (param_ptr->lid == NVRAM_EF_LTECSR_PROFILE_LID) {
+        switch (param_ptr->type) {
+            case MCF_TYPE_OTA:
+                /* MCF could not map ps_id when default OTA. Use record_idx instead of ps_id. */
+                custom_param.op_id = 0;
+                custom_param.sim_slot_id = (sim_interface_enum)(param_ptr->record_idx - 1);
+                custom_param.with_imsi_info = KAL_FALSE;
+
+                ltecsr_nvram_customization(&custom_param, &ltecsr_profile_ptr, NULL);
+                ret = KAL_TRUE;
+                break;
+
+            case MCF_TYPE_OTA_BY_OP:
+                custom_param.op_id = param_ptr->sbp_id;
+                custom_param.sim_slot_id = l4c_gemini_get_actual_sim_id(param_ptr->ps_id);
+                custom_param.with_imsi_info = KAL_TRUE;
+                custom_param.imsi_mnc_len = strlen((const char *)param_ptr->mnc);
+                kal_mem_cpy(&custom_param.mccmnc[0], &param_ptr->mcc[0], 3);
+                kal_mem_cpy(&custom_param.mccmnc[0] + 3, &param_ptr->mnc[0], custom_param.imsi_mnc_len);
+
+                ltecsr_nvram_customization(&custom_param, &ltecsr_profile_ptr, NULL);
+                ret = KAL_TRUE;
+                break;
+
+            default:
+                break;
+        }
+    }
+
+    if (ltecsr_profile_ptr) {
+        *(param_ptr->size) = sizeof(nvram_ef_ltecsr_profile_record_struct);
+        kal_mem_cpy(param_ptr->buffer, ltecsr_profile_ptr, sizeof(nvram_ef_ltecsr_profile_record_struct));
+
+        free_ctrl_buffer(ltecsr_profile_ptr);
+    }
+
+    return ret;
+}
+
+#endif
+
+
+
diff --git a/mcu/custom/protocol/common/ps/custom_ltecsr_config.h b/mcu/custom/protocol/common/ps/custom_ltecsr_config.h
new file mode 100644
index 0000000..a550b8a
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_ltecsr_config.h
@@ -0,0 +1,40 @@
+#ifndef __CUSTOME_LTECSR_CONFIG_H__
+#define __CUSTOME_LTECSR_CONFIG_H__
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "ps_public_enum.h"
+#include "sim_ps_api.h"
+
+#include "nvram_editor_data_item.h"
+#include "nvram_interface.h"
+
+// MCF
+#include "ps_public_utility.h"
+#include "mcf_if.h"
+#include "mcf_enum.h"
+#include "mcf_struct.h"
+
+#include "ims_nvram_editor.h"
+#include "ims_nvram_def.h"
+
+#define LTECSR_UNDEF_CONFIG_32 0xFFFFFFFF
+#define LTECSR_UNDEF_CONFIG_16 0xFFFF
+#define LTECSR_UNDEF_CONFIG_8 0xFF
+
+
+typedef struct
+{
+    kal_uint16 op_id;
+    sim_interface_enum sim_slot_id;
+    kal_bool with_imsi_info;
+    kal_uint8 imsi_mnc_len;
+    kal_uint8 mccmnc[8];
+} ltecsr_custom_param_struct;
+
+#ifdef __VOLTE_SUPPORT__
+kal_bool ltecsr_nvram_customization(ltecsr_custom_param_struct *custom_param_ptr, nvram_ef_ltecsr_profile_record_struct **profile_ptr, nvram_ef_ltecsr_profile_record_struct **rom_profile_ptr);
+#endif
+
+#endif
+
diff --git a/mcu/custom/protocol/common/ps/custom_mm_config.c b/mcu/custom/protocol/common/ps/custom_mm_config.c
new file mode 100644
index 0000000..7a64888
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_mm_config.c
@@ -0,0 +1,1970 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_mm_config.c
+ *
+ * Project:
+ * --------
+ *   MONZA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the MM configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "custom_mm_config.h"
+#include "ps_public_enum.h"
+#include "gmss_public.h"
+
+
+/****************************************************************************
+* MTK default value of T3311 value is 15 secs as per 3GPP spec. 24.008, sec.11.2.2
+* Use MM_CUSTOM_T3311_TIMER_VALUE_ON_RSIM_STACK to increase or decrease 
+* T3311 Time period (value in seconds) for ATTACH retry on RSIM stack.
+* The range for values of MM_CUSTOM_T3311_TIMER_VALUE_ON_RSIM_STACK are (1-15)
+* if the values are out of above range then MTK default value will be used.
+* Example: say if T3311 Timer needs to be customized to 5 secs then 
+* set MM_CUSTOM_T3311_TIMER_VALUE_ON_RSIM_STACK = 5.
+*****************************************************************************/
+const kal_uint32 MM_CUSTOM_T3311_TIMER_VALUE_ON_RSIM_STACK = 2;
+
+/****************************************************************************
+* MTK default value of T3311 value is 15 secs as per 3GPP spec. 24.008, sec.11.2.2
+* Use MM_CUSTOM_T3311_TIMER_VALUE_ON_AKA_STACK to increase or decrease 
+* T3311 Time period (value in seconds) for ATTACH retry on AKA stack (virtual SIM card).
+* The range for values of MM_CUSTOM_T3311_TIMER_VALUE_ON_AKA_STACK are (1-15)
+* if the values are out of above range then MTK default value will be used.
+* Example: say if T3311 Timer needs to be customized to 5 secs then 
+* set MM_CUSTOM_T3311_TIMER_VALUE_ON_AKA_STACK = 5.
+****************************************************************************/
+const kal_uint32 MM_CUSTOM_T3311_TIMER_VALUE_ON_AKA_STACK = 2;
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+/*************************************************************************
+* When MT CSFB will be triggered, then MM will start custom timer with time period T(by default value will be 0)which will be customizable. 
+* If time period is 0, then MM will not start timer and will behave as legacy.
+* When timer expires, then MM will send MSG_ID_NWSEL_MM_EVENT_IND (event MM_EVENT_MT_CSFB_SEARCH_ABORT) and release the CSFB MSPM.
+***************************************************************************/
+const kal_uint32 MM_CUSTOM_MT_CSFB_PLMN_SEARCH_ABORT_GUARD_TIMER = 0;
+
+/****************************************************************************
+* MTK default value of T3240 value is 10 secs as per 3GPP spec. 24.008
+* Use MM_CUSTOM_T3240_TIMER_VALUE_FOR_CM_MM_WAIT_FOR_NETWORK_RELEASE  
+* to decrease T3240 Time period (value in seconds) so as to honour the L4 SS retry request.
+* This customized T3240 value is only applicable when SBP_SINGLE_SS_OPERATION_ON_CSFB_WHEN_AFR_ENABLED
+* is enabled or when added the PLMN in MM custom PLMN array(CUSTOM_SINGLE_SS_OPERATION_ON_CSFB_WHEN_AFR_ENABLED_LIST)
+* MM_CUSTOM_T3240_TIMER_VALUE_FOR_CM_MM_WAIT_FOR_NETWORK_RELEASE should be always less than the L4 SS Retry timer 
+* configured for the same reject cause.
+* Example: say if T3240  Timer needs to be customized to 5 secs then 
+* set MM_CUSTOM_T3240_TIMER_VALUE_FOR_CM_MM_WAIT_FOR_NETWORK_RELEASE = 5.
+****************************************************************************/
+const kal_uint32 MM_CUSTOM_T3240_TIMER_VALUE_FOR_CM_MM_WAIT_FOR_NETWORK_RELEASE = 5;
+
+/*************************************************************************
+* On IRAT from 2G to 3G or RAT MODE change from 2G to 3G, then RESET GMM CKSN and 
+* GMM KEYS so that NW will apply new authentication parameters through 
+* GMM AUTHENTICATION and CIPHERING procedure for PLMN mentioned in below 
+* PLMN array.
+*************************************************************************/
+const char *CUSTOM_RESET_GMM_KEYS_LIST[] = {"40410F",INVALID_CUSTOM_PLMN};
+const kal_uint32 CUSTOM_RESET_GMM_KEYS_LIST_NUM = sizeof(CUSTOM_RESET_GMM_KEYS_LIST)/sizeof(char *);
+
+/*************************************************************************
+*  When LAU has been rejected with cause #12, MM will request AS to add
+*  the LA in forbidden LA for Roaming list for PLMN mentioned in below 
+*  PLMN array
+*************************************************************************/
+const char *CUSTOM_MM_STAY_ON_LA_OF_REGIONAL_PROVISIONAL_SERVICE_PLMN_LIST[] = {"732103",INVALID_CUSTOM_PLMN};
+const kal_uint32 CUSTOM_MM_STAY_ON_LA_OF_REGIONAL_PROVISIONAL_SERVICE_PLMN_LIST_NUM = sizeof(CUSTOM_MM_STAY_ON_LA_OF_REGIONAL_PROVISIONAL_SERVICE_PLMN_LIST)/sizeof(char *);
+
+/*************************************************************************
+*In case of IMSI detach (due to power off) failure with lower layer failure cause DC_Status_RLC_Release_Tx_Not_Acked 
+*and GPRS detach (due to power off) failure with lower layer failure cause DC_Status_RLC_Release_Tx_Not_Acked 
+*or DC_Status_RLC_Release_Discard, IMSI/GPRS detach is aborted and local detach is performed. 
+*This leads unsync between UE and network. If camped PLMN is present in custom PLMN array, IMSI and GPRS detach (due to power off) procedure
+*will be retried in the case of lower layer failure with above mentioned causes.
+*IMSI/GPRS detach (due to power off) is limited to 8 sec after which UE local detach will be performed. 
+*************************************************************************/
+const char *CUSTOM_IMSI_GPRS_DETACH_RETRY_LIST[] = {"65510F",INVALID_CUSTOM_PLMN};
+const kal_uint32 CUSTOM_IMSI_GPRS_DETACH_RETRY_LIST_NUM = sizeof(CUSTOM_IMSI_GPRS_DETACH_RETRY_LIST)/sizeof(char *);
+
+
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_stay_on_la_of_regional_provisional_service
+* DESCRIPTION
+*  This function is for customize MM behavior when entering forbidden LA of #12
+*
+* PARAMETERS
+*
+* RETURNS
+*  MM_STAY_ON_LA_OF_REGIONAL_PROVISIONAL_SERVICE
+*      follow spec (enter limited service and stay on forbidden LA of #12)
+*  MM_STAY_ON_LA_OF_REGIONAL_PROVISIONAL_ONLY_IF_TEST_SIM_TEST_MODE
+*      follow spec (enter limited service and stay on forbidden LA of #12) 
+*      only when test sim is inserted or test mode(CTA/FTA/Operator) is enabled
+*  MM_NOT_STAY_ON_LA_OF_REGINOAL_PROVISIONAL_SERVICE
+*      allow MS directly retry other PLMN/RAT for normal service
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+mm_rej_12_handle_enum mm_custom_stay_on_la_of_regional_provisional_service(protocol_id_enum ps_id)
+{
+    //suggest to use default setting [MM_STAY_ON_LA_OF_REGIONAL_PROVISIONAL_SERVICE]
+    //change this setting might affect the result of FTA or IOT.
+    //may only be changed on production version of software after pass all lab test
+    if (sbp_query_md_feature_by_ps(SBP_MM_NOT_STAY_ON_FBLA_FOR_REG_PROV,ps_id) == KAL_TRUE)
+    {
+        return MM_STAY_ON_LA_OF_REGIONAL_PROVISIONAL_ONLY_IF_TEST_SIM_TEST_MODE;
+    }
+    else
+    {
+        return MM_STAY_ON_LA_OF_REGIONAL_PROVISIONAL_SERVICE;
+    }
+}
+
+/*****************************************************************************
+* FUNCTION
+* mm_custom_get_T3240_timer_value_for_specific_plmn
+*
+* DESCRIPTION
+*  This function is to get different T3240 timer value for specific plmns.
+*  MTK default value of T3240 timer is 10sec.
+*  Use mm_custom_get_T3240_timer_value_for_specific_plmn to increase or decrease
+*  T3240 timer value for specific plmn.
+*  Example : say, if T3240 timer value is to be customize for CMCC (46000f) operator
+*  to be 12 sec. then compare with oplmn variable and return corresponding value 
+*  which is defined below code.
+*  This feature is guarded with SBP SBP_MM_CUSTOMIZE_T3240_TIMEOUT_VALUE.
+*  SBP SBP_MM_CUSTOMIZE_T3240_TIMEOUT_VALUE is by default OFF.
+*  To use this feature, Turn ON SBP SBP_MM_CUSTOMIZE_T3240_TIMEOUT_VALUE.
+* PARAMETERS
+* oplmn : operator plmn
+* RETURNS
+*  kal_unit32
+* GLOBALS AFFECTED
+*   
+*****************************************************************************/
+
+kal_uint32 mm_custom_get_T3240_timer_value_for_specific_plmn(kal_uint8 *oplmn)
+{  
+    //CMCC  
+   if(kal_mem_cmp(oplmn,"46000F",6)  == 0)
+   {
+      return 12; 
+   }
+   /* Want to set different T3240 value for other operator like CU(46001F), use similar logic as defined below example.
+   else if(kal_mem_cmp(oplmn,"40001F",6)  == 0)
+   {
+      return 15;
+   } */
+   else
+   {
+  	  return 10;
+   }
+}
+
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_registration_related_setting
+* DESCRIPTION
+*  This function is used to query registration related setting.
+*
+* PARAMETERS
+*  Which setting
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+kal_bool mm_custom_registration_related_setting(mm_setting_enum setting)
+{
+
+  switch(setting)
+  { 
+   
+   case MM_ENABLE_LR_REJ111_RETRY:
+      {
+          #ifdef  __TC01__
+            /* MUSE -ALPS01526239 */
+            /* The customer wants to change the default value  */
+            /* from enabled to disabled by changing name of feature */
+            #ifdef __ENABLE_LR_REJ111_RETRY__  
+            return KAL_TRUE;
+            #else
+            return KAL_FALSE;
+            #endif
+          #else /* __TC01__ */
+            #ifndef __DISABLE_LR_REJ111_RETRY__   
+            return KAL_TRUE;
+            #else
+            return KAL_FALSE;
+            #endif
+          #endif /* __TC01__ */
+        break;
+      } 
+   case MM_ENABLE_HPPLMN_SEARCH_FORCE_RELEASE_PCH_CONNECTION:
+	  {	 
+#ifndef __DISABLE_HPPLMN_SEARCH_FORCE_RELEASE_PCH_CONNECTION__
+			  return KAL_TRUE;
+#else
+			  return KAL_FALSE;
+#endif  
+		break;
+	  } 
+ 
+   default:
+   		break;
+  }
+  
+  return KAL_FALSE;
+} 
+
+/* MAUI_03014009 Russia Operator BeeLine request to use ECC with IMEI */
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_force_ecc_with_imei
+* DESCRIPTION
+*  This function configures emergency call force to use IMEI during phone lock period.
+*  default: KAL_FALSE (using TMSI->IMSI->IMEI)
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+kal_bool mm_custom_force_ecc_with_imei(void)
+{
+    return KAL_FALSE;
+}
+
+/* ALPS01451877 UK should be allowed to make emergency calls with expired SIM cards */
+const kal_uint32 ECC_IMSI_MCC_LIST[] = {234, 235};
+const kal_uint32 ECC_IMSI_MCC_NUM = sizeof(ECC_IMSI_MCC_LIST)/sizeof(kal_uint32);
+
+/**********************************************************************************************************
+ * On IRAT from 4G to 3G, In cases where RAU procedure is not complete or un-successful with NW and
+ * followed by UE moves back to 4G as part of network recovery search, EMM shall use TAU type as Combined 
+ * TA/LA updating with IMSI attach for the PLMN mentioned in the below custom array.  
+ * 
+ *   Ex: CUSTOM_PLMN_IRAT_TAU_TYPE[] = 
+ *           {"46001F",INVALID_CUSTOM_PLMN}         
+ **********************************************************************************************************/
+
+const char *CUSTOM_PLMN_IRAT_TAU_TYPE[] = {"46001F",INVALID_CUSTOM_PLMN};
+
+const kal_uint32 CUSTOM_PLMN_IRAT_TAU_TYPE_NUM = sizeof(CUSTOM_PLMN_IRAT_TAU_TYPE)/sizeof(char *);
+
+const char *CUSTOM_IRAT_TAU_TYPE_FOR_PENDING_RAU_ON_NON_DATA_SIM[] = {"46001F",INVALID_CUSTOM_PLMN};
+const kal_uint32 CUSTOM_IRAT_TAU_TYPE_FOR_PENDING_RAU_ON_NON_DATA_SIM_NUM = sizeof(CUSTOM_IRAT_TAU_TYPE_FOR_PENDING_RAU_ON_NON_DATA_SIM)/sizeof(char *);
+
+
+/**********************************************************************************************************
+ * As per Spec 24.008 Rel-13,The MS shall include old lai during combined attach/RAU procedure if MS hold
+ * valid LAI & support EMM combined procedure. This implementation is controlled via the custom array.
+ * Here UE skip  old lai only  for the PLMN mentioned in the below custom array.  
+ * 
+ *   Ex: CUSTOM_PLMN_SKIP_OLD_LAI_LIST[] = 
+ *           {"46001F",INVALID_CUST_PLMN}         
+ **********************************************************************************************************/
+
+const char *CUSTOM_PLMN_SKIP_OLD_LAI_LIST[] = {INVALID_CUST_PLMN};
+const kal_uint32 CUSTOM_PLMN_SKIP_OLD_LAI_LIST_NUM = sizeof(CUSTOM_PLMN_SKIP_OLD_LAI_LIST)/sizeof(char *);
+
+/**********************************************************************************************************
+ *  When CM_SERVICE_REQUEST for SMS in MM_WAIT_FOR_ADDITIONAL_OUTGOING_MM_CONN state has been rejected with
+ *  cause IMSI_UNKNOWN_IN_VLR then convert the cause #4 to #17 (NETWORK FAILURE) so that other established 
+ *  MM connection should not be impacted.
+ **********************************************************************************************************/
+
+const char *CUSTOM_CM_SERV_REJ_CAUSE_CONVERT_TO_17_FOR_ADDIT_OUTGOING_MM_CONN_LIST[] = {"41409F", INVALID_CUST_PLMN};
+const kal_uint32 CUSTOM_CM_SERV_REJ_CAUSE_CONVERT_TO_17_FOR_ADDIT_OUTGOING_MM_CONN_LIST_NUM = 
+	          sizeof(CUSTOM_CM_SERV_REJ_CAUSE_CONVERT_TO_17_FOR_ADDIT_OUTGOING_MM_CONN_LIST)/sizeof(char *);
+
+/**************************************************************************************************************
+ *  When previous registered RAT was 4G and current RAT MODE setting supports 3G, then GMM ATTACH REQUEST
+ *  will be triggered with IMSI as MS identity.
+ ***************************************************************************************************************/
+
+const char *CUSTOM_TRIGGER_ATTACH_WITH_IMSI_LIST[] = {"25506F", INVALID_CUST_PLMN};
+const kal_uint32 CUSTOM_TRIGGER_ATTACH_WITH_IMSI_LIST_NUM = 
+	                    sizeof(CUSTOM_TRIGGER_ATTACH_WITH_IMSI_LIST)/sizeof(char *);
+
+
+/**************************************************************************************************************
+ * 
+ ***************************************************************************************************************/
+
+const char *CUSTOM_LU_BEFORE_CSFB_ECC_IF_LAI_DIFF_LIST[] = {"302500","302510","302520",INVALID_CUST_PLMN};
+const kal_uint32 CUSTOM_LU_BEFORE_CSFB_ECC_IF_LAI_DIFF_LIST_NUM = 
+	         sizeof(CUSTOM_LU_BEFORE_CSFB_ECC_IF_LAI_DIFF_LIST)/sizeof(char *);
+
+/**************************************************************************************************************
+ * When Active MM is EMM and RAT mode setting has been changed, then EMM will perform DETACH for the PLMNs mentioned
+ * in below custom PLMN array so that active MM will perform ATTACH procedure again.
+ ***************************************************************************************************************/
+const char *CUSTOM_EMM_DETACH_REQUIRED_ON_RAT_MODE_CHANGE_PLMN_LIST[] = {INVALID_CUSTOM_PLMN};
+const kal_uint32 CUSTOM_EMM_DETACH_REQUIRED_ON_RAT_MODE_CHANGE_PLMN_LIST_NUM = sizeof(CUSTOM_EMM_DETACH_REQUIRED_ON_RAT_MODE_CHANGE_PLMN_LIST)/sizeof(char *);
+
+/**************************************************************************************************************
+* When Active MM is EMM and RAT mode setting has been changed from 45G to 4G, then EMM will perform DETACH for the 
+* PLMNs mentioned in below custom PLMN array so that active MM will perform ATTACH procedure again.
+***************************************************************************************************************/
+const char *CUSTOM_EMM_DETACH_REQUIRED_ON_RAT_MODE_CHANGE_45G_TO_4G_PLMN_LIST[] = {
+    //CU
+    "46001F", "46006F",
+    //end
+    INVALID_CUSTOM_PLMN
+};
+
+const kal_uint32 CUSTOM_EMM_DETACH_REQUIRED_ON_RAT_MODE_CHANGE_45G_TO_4G_PLMN_LIST_NUM = sizeof(CUSTOM_EMM_DETACH_REQUIRED_ON_RAT_MODE_CHANGE_45G_TO_4G_PLMN_LIST)/sizeof(char *);
+
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif 
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_start_timer_for_mt_mm_conn
+* DESCRIPTION
+*  This function is used to configure whether start T3240 for page.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+kal_bool mm_custom_start_timer_for_mt_mm_conn(void)
+{
+    /*work around CMCC 3G network issue
+    1. PS signaling exist, receive page for CS domain
+    2. send page response, enter MM_WAIT_FOR_NETWORK_COMMAND
+    3. handover to another LA, then no MM or CM message from network
+    4. can not process CM request until cs signaling or RRC release
+    */
+    return KAL_TRUE;
+}
+
+/*For Customer Default test plmn. Follows TS34.123 Table 6.2  */
+const char *CUSTOM_TEST_PLMN[] = 
+    {"00101", "00211", "00321", "00431", "00541", "00651",
+     "00761", "00871", "00902", "01012", "01122", "01232" , CUSTOM_TEST_PLMN_SET_END};
+
+const kal_uint32 CUSTOM_TEST_PLMN_NUM = sizeof(CUSTOM_TEST_PLMN)/sizeof(char *);
+
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_get_erase_forbidden_la_list_timer_period
+* DESCRIPTION
+*  This function is used to get ERASE_FORBIDDEN_LA_LIST timer period.
+*
+* PARAMETERS
+*  None
+*
+* RETURNS
+*  kal_uint32
+*
+* GLOBALS AFFECTED
+*  None
+*
+*****************************************************************************/
+kal_uint32 mm_custom_get_erase_forbidden_la_list_timer_period(void)
+{
+    // TS24.008 specifies this timer should be 12~24hr.
+    // Default 12hr.
+    // Set 0 to disable this timer
+    #ifdef __HAPS_FPGA_CLK_ADJUST__   //fix build warning "integer overflow in expression [-Woverflow]"
+    return 0;
+    #else
+    return 12*60*KAL_TICKS_1_MIN;
+    #endif
+}
+
+/*************************************************************************
+ * In Japan, UE can not perform MO emergency call if UE has not completed registration procedure 
+ * (so, MSC does not know MSISDN of mobile originating user), because transferring MSISDN of
+ * mobile originating user to emergency authority is mandatory
+ *
+ * Example:
+ * 1.
+ * const kal_uint32 LR_BEFORE_ECC_MCC_LIST[] = {440}; // Only in Japan does UE need perform LR before ECC
+ * 2.
+ * const kal_uint32 LR_BEFORE_ECC_MCC_LIST[] = {NO_MCC_ALLOWED}; // UE shall perform ECC before LR regardless of MCC
+ * 3.
+ * const kal_uint32 LR_BEFORE_ECC_MCC_LIST[] = {ALL_MCC_ALLOWED}; // UE shall perform LR before ECC regardless of MCC
+ *
+ *************************************************************************/
+#if defined(__MM_PERFORM_LU_BEFORE_ECC__)
+const kal_uint32 LR_BEFORE_ECC_MCC_LIST[] = {ALL_MCC_ALLOWED};
+#elif defined(__DOCOMO_IOT_LR_BEFORE_ECC__)
+const kal_uint32 LR_BEFORE_ECC_MCC_LIST[] = {440};
+#else
+const kal_uint32 LR_BEFORE_ECC_MCC_LIST[] = {NO_MCC_ALLOWED};
+#endif
+const kal_uint32 LR_BEFORE_ECC_MCC_NUM = sizeof(LR_BEFORE_ECC_MCC_LIST)/sizeof(kal_uint32);
+
+#ifndef __MM_DISABLE_PERFORM_LU_BEFORE_CSFB_ECC__
+const char *LR_BEFORE_CSFB_ECC_PLMN_LIST[] = {"23420","23594" , "302500", "302510", "302520",LR_BEFORE_CSFB_ECC_PLMN_SET_END};
+#else
+const char *LR_BEFORE_CSFB_ECC_PLMN_LIST[] = {LR_BEFORE_CSFB_ECC_PLMN_SET_END};
+#endif
+const kal_uint32 LR_BEFORE_CSFB_ECC_PLMN_NUM = sizeof(LR_BEFORE_CSFB_ECC_PLMN_LIST)/sizeof(char *);
+
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_enable_early_oos_ind
+* DESCRIPTION
+*  If enabled, AP will display OOS when lost coverage and AS start cell reselection
+*  If disabled, AP will display OOS after lost coverage and cell reselection failure
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+kal_bool mm_custom_enable_early_oos_ind(protocol_id_enum ps_id)
+{
+    return sbp_query_md_feature_by_ps(SBP_OOS_EARLY_IND,ps_id);
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_reattach_for_mt_gprs_detach_other_cause
+*
+* DESCRIPTION
+*  If the UE receives network initiated GPRS detach request of type "re-attach not required",
+*  and the reject cause is not defined in SPEC (not one of #2/#3/#6/#7/#8/#11/#12/#13/#14/#15/#25),
+*  according to the SPEC, further actions of MS are implementation dependent.
+*
+* PARAMETERS
+*
+* RETURNS
+*   KAL_TRUE:
+*    - The UE will re-attach immediatedly after performing GPRS detach 
+*   KAL_FALSE:
+*    - The UE will not re-attach immediately after performing GPRS detach
+*    - The UE will re-attach when user starts a new data transmission
+*
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+kal_bool mm_custom_reattach_for_mt_gprs_detach_other_cause(protocol_id_enum ps_id)
+{
+    if (sbp_query_md_feature_by_ps(SBP_GMM_REATTACH_FOR_NW_DETACH_OTHER_CAUSE,ps_id) == KAL_TRUE)
+    {
+        return KAL_TRUE;
+    }	
+    else
+    {
+        return KAL_FALSE;
+    }
+}
+
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_imsi_detach_when_mm_conn_active
+* DESCRIPTION
+*  If enabled, AP will display OOS when lost coverage and AS start cell reselection
+*  If disabled, AP will display OOS after lost coverage and cell reselection failure
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+kal_bool mm_custom_imsi_detach_when_mm_conn_active(protocol_id_enum ps_id)
+{
+    if (sbp_query_md_feature_by_ps(SBP_MM_IMSI_DETACH_WHEN_MM_CONN_ACTIVE,ps_id) == KAL_TRUE)
+    {
+        return KAL_TRUE;
+    }    
+    else
+    {
+        return KAL_FALSE;
+    }
+}
+
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_enable_dynamic_set_modem2_imei
+* DESCRIPTION
+*  CMCC requires: Two Modems of TDD GEMINI UE shall use the same IMEI in CMCC Network.
+*  And by FT experience, Core Network may reject UE if two modems use the same IMEi.
+*  The feature implement: 
+*      In China network, two modems use the same IMEI.
+*      In other network, two modems use different IMEI.
+*
+* PARAMETERS
+*    sim_index    current sim index
+* RETURNS
+*  KAL_TRUE: The feature is enabled.
+    KAL_FALSE: The feature is disabled. In all networks, two modems use the SAME IMEI.
+*  None
+*****************************************************************************/
+kal_bool mm_custom_enable_dynamic_set_modem2_imei(kal_uint8 sim_index)
+{
+    #ifdef __TDD_2G_OP01__
+    kal_bool tdd_2g_op01 = KAL_TRUE;
+    #else
+    kal_bool tdd_2g_op01 = KAL_FALSE;
+    #endif
+    
+    if(tdd_2g_op01 == KAL_TRUE || gmss_is_tdscdma_mode_activated(sim_index) == KAL_TRUE)
+    {
+        return KAL_TRUE;
+    }
+    else
+    {
+        return KAL_FALSE;
+    }
+}
+
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_report_reg_when_csfb_ecc_lu_needed
+* DESCRIPTION
+*  For 4G23 CSFB ECC and LU needed, UE may delay LU until ECC end.
+*  During ECC, no registration result will report to AP due to LU is pending.
+*  AP will keep displaying 4G icon.
+*  To solve this problem, we provide this function for RAT icon display when registration status is unknown.
+* PARAMETERS
+*   current_plmn_type  PLMN type of current camp on cell.
+* RETURNS
+*   KAL_TRUE:  Display registered on 2/3G.
+*   KAL_FALSE: Display network lost.
+*  None
+*****************************************************************************/
+kal_bool mm_custom_report_reg_when_csfb_ecc_lu_delayed(mm_custom_plmn_type current_plmn_type)
+{
+    switch (current_plmn_type)
+    {
+        case MM_CUSTOM_HPLMN:
+        case MM_CUSTOM_R_E_PLMN:
+            return KAL_TRUE;
+        case MM_CUSTOM_UNKNOWN_PLMN_TYPE:
+        default:
+            return KAL_FALSE;
+    }
+}
+/*****************************************************************************
+* Set FOR bit in GMM ATTACH Request false when PLMN is in CUSTOM list
+*
+*   - If PLMN is listed in the array, then UE shall Reset FOR bit in GMM ATTACH Request
+*      
+*
+*****************************************************************************/
+const char *SET_FOR_BIT_FALSE_IN_ATTACH_FOR_CUSTOM_PLMN[] = {"40411F", SET_FOR_BIT_FALSE_IN_ATTACH_FOR_CUSTOM_PLMN_END};
+const kal_uint32 SET_FOR_BIT_FALSE_IN_ATTACH_FOR_CUSTOM_PLMN_NUM = sizeof(SET_FOR_BIT_FALSE_IN_ATTACH_FOR_CUSTOM_PLMN)/sizeof(char *);
+
+/*****************************************************************************
+* When RAU is performed with FOR bit set as FALSE, After RAU procedure is successful, perform PDP 
+* activation over the new Connection when PLMN is in CUSTOM list
+*
+*   - If PLMN is listed in the array, then UE shall shall trigger PDP ACTIVATION over new connection
+*   - This customization is not applicable on test sim and FTA mode.  
+*
+*****************************************************************************/
+const char *ALLOW_PDP_ACTIVATION_OVER_NEW_CONNECTION_WHEN_RAU_FOR_FALSE_FOR_CUSTOM_PLMN[] = {INVALID_CUST_PLMN};
+const kal_uint32 ALLOW_PDP_ACTIVATION_OVER_NEW_CONNECTION_WHEN_RAU_FOR_FALSE_FOR_CUSTOM_PLMN_NUM =
+	         sizeof(ALLOW_PDP_ACTIVATION_OVER_NEW_CONNECTION_WHEN_RAU_FOR_FALSE_FOR_CUSTOM_PLMN)/sizeof(char *);
+
+/*****************************************************************************
+*  On IRAT to LTE, MM shall handle the pending SS transaction as CSFB request.
+*      
+*   - If PLMN is listed in the array, MM shall handle the pending SS transaction as CSFB request
+*   - This customization is not applicable on test sim and FTA mode.  
+*
+*****************************************************************************/
+const char *MM_TRY_PENDING_SS_AS_CSFB_AFTER_IRAT_TO_4G_FOR_CUSTOM_PLMN[] = {"40495F", INVALID_CUST_PLMN};
+const kal_uint32 MM_TRY_PENDING_SS_AS_CSFB_AFTER_IRAT_TO_4G_FOR_CUSTOM_PLMN_NUM =
+	         sizeof(MM_TRY_PENDING_SS_AS_CSFB_AFTER_IRAT_TO_4G_FOR_CUSTOM_PLMN)/sizeof(char *);
+
+/*****************************************************************************
+* On CSFB, NW redirect UE to 2/3G but 2/3G AS report PLMN loss and no 23G cell found. On IRAT back to LTE, 
+* MM shall request EMM to perform forced Combined TAU so as to make sync with network. 
+* This customization enables UE to receive MT paging in LTE NW.
+*      
+*   - If PLMN is listed in the array, MM shall request EMM to perform forced TAU 
+*   - This customization is not applicable on test sim and FTA mode.  
+*
+*****************************************************************************/
+const char *MM_FORCE_TAU_NEEDED_AFTER_CSFB_FOR_CUSTOM_PLMN[] = {"46000F", INVALID_CUST_PLMN};
+const kal_uint32 MM_FORCE_TAU_NEEDED_AFTER_CSFB_FOR_CUSTOM_PLMN_NUM =
+	         sizeof(MM_FORCE_TAU_NEEDED_AFTER_CSFB_FOR_CUSTOM_PLMN)/sizeof(char *);
+
+/*************************************************************************
+ * Ignore Reject cause 7, GPRS serive not allowed, in ATTACH REJECT or 
+ * in ROUTING AREA UPDATING REJECT message when roaming. Reject Cause 
+ * 14, GPRS serive not allowed in this PLMN, insteads of.
+ * 
+ * - IGNORE_GPRS_SERVICE_NOT_ALLOWED_WHEN_ROAMING_OPERATOR
+ *     - If PLMN is defined in the list, UE take action as receiving reject
+ *        cause 14 when UE receive ATTACH REJECT or ROUTING AREA UPDATING
+ *        REJECT message with cause 7 and roaming.
+ * 
+ *************************************************************************/
+#ifdef __GMM_CELCOM_IGNORE_GPRS_SERVICE_NOT_ALLOWED_WHEN_ROAMING__
+const char *IGNORE_GPRS_SERVICE_NOT_ALLOWED_WHEN_ROAMING_OPERATOR[] = {"50219F", IGNORE_GPRS_SERVICE_NOT_ALLOWED_WHEN_ROAMING_OPERATOR_SET_END};
+#else
+const char *IGNORE_GPRS_SERVICE_NOT_ALLOWED_WHEN_ROAMING_OPERATOR[] = {IGNORE_GPRS_SERVICE_NOT_ALLOWED_WHEN_ROAMING_OPERATOR_SET_END};
+#endif
+
+const kal_uint32 IGNORE_GPRS_SERVICE_NOT_ALLOWED_WHEN_ROAMING_OPERATOR_NUM = sizeof(IGNORE_GPRS_SERVICE_NOT_ALLOWED_WHEN_ROAMING_OPERATOR)/sizeof(char *);
+
+
+/*************************************************************************
+ * Convert Attach  Reject cause #14, GPRS serive not allowed in PLMN in 
+ * ATTACH REJECT or to cause #111,Protocol error
+ *
+ ************************************************************************/
+const char *CONVERT_GPRS_NOT_ALLOWED_IN_PLMN_TO_PROTOCOL_ERROR[] = {"46000F", "46001F", CONVERT_GPRS_NOT_ALLOWED_IN_PLMN_TO_PROTOCOL_ERROR_SET_END};
+const kal_uint32 CONVERT_GPRS_NOT_ALLOWED_IN_PLMN_TO_PROTOCOL_ERROR_NUM = sizeof(CONVERT_GPRS_NOT_ALLOWED_IN_PLMN_TO_PROTOCOL_ERROR)/sizeof(char *);
+
+/*************************************************************************
+ * Convert RAU  Reject cause #7, GPRS serive not allowed  in 
+ * RAU REJECT  to cause #111,Protocol error
+ * Customer needs to add PLMN values to the below array .Ex : { "46001F",CONVERT_GPRS_NOT_ALLOWED_TO_PROTOCOL_ERROR_SET_END};
+ ************************************************************************/
+const char *CONVERT_GPRS_NOT_ALLOWED_TO_PROTOCOL_ERROR[] = {CONVERT_GPRS_NOT_ALLOWED_TO_PROTOCOL_ERROR_SET_END};
+const kal_uint32 CONVERT_GPRS_NOT_ALLOWED_TO_PROTOCOL_ERROR_NUM = sizeof(CONVERT_GPRS_NOT_ALLOWED_TO_PROTOCOL_ERROR)/sizeof(char *);
+
+/*************************************************************************
+ * Some operators cannot decode IEs for SRVCC correctly brought in attach/RAU request
+ * (i.e. MS Classmark2/MS Classmark3/Supported Codecs)
+ *
+ * - DISABLE_SRVCC_IE_PLMN
+ *   - Do not bring new IEs for SRVCC in Attach/RAU request while trying registration on PLMNs specified in this array
+ * 
+ *************************************************************************/
+const char *DISABLE_SRVCC_IE_PLMN[] = {"40468F", DISABLE_SRVCC_IE_PLMN_SET_END};
+const kal_uint32 DISABLE_SRVCC_IE_PLMN_NUM = sizeof(DISABLE_SRVCC_IE_PLMN)/sizeof(char *);
+
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_get_t3x11_period
+* DESCRIPTION
+*  This function is used to get t3x11 timer period for enhance SoR, only rejected by network failure start t3211 would call this function
+*  Not applicable for GCF test
+* PARAMETERS
+*  None
+*
+* RETURNS
+*  kal_uint32
+*
+* GLOBALS AFFECTED
+*  None
+*
+*****************************************************************************/
+kal_uint32 mm_custom_get_t3x11_period(protocol_id_enum ps_id)
+{
+    if (sbp_query_md_feature_by_ps(SBP_ENHANCED_SOR,ps_id) == KAL_TRUE)
+    {
+        return (5  * KAL_TICKS_1_SEC );
+    }
+
+    return (15  * KAL_TICKS_1_SEC );
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_get_T3311_timer_period_on_rsim_stack
+* DESCRIPTION
+*  MM will use this function to get T3311 value for ATTACH request retry
+*  on RSIM stack if SBP_MM_CUSTOMIZE_T3311_TIMEOUT_VALUE_FOR_RSIM is enabled.
+* PARAMETERS
+*  protocol_id_enum protocol stack 
+*
+* RETURNS
+*  kal_uint32
+*
+* GLOBALS AFFECTED
+*  None
+*
+*****************************************************************************/
+kal_uint32 mm_custom_get_T3311_timer_period_on_rsim_stack(protocol_id_enum ps_id)
+{
+	if (sbp_query_md_feature_by_ps(SBP_MM_CUSTOMIZE_T3311_TIMEOUT_VALUE_FOR_RSIM, ps_id) == KAL_TRUE)
+	{
+		return MM_CUSTOM_T3311_TIMER_VALUE_ON_RSIM_STACK;
+	}
+	else
+	{
+        return 15;
+	}
+}
+
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_get_T3311_timer_period_on_aka_stack
+* DESCRIPTION
+*  MM will use this function to get T3311 value for ATTACH request retry
+*  on AKA stack for virtual SIM card if SBP_MM_CUSTOMIZE_T3311_TIMEOUT_VALUE_FOR_RSIM is enabled.
+* PARAMETERS
+*  protocol_id_enum protocol stack 
+*
+* RETURNS
+*  kal_uint32
+*
+* GLOBALS AFFECTED
+*  None
+*
+*****************************************************************************/
+kal_uint32 mm_custom_get_T3311_timer_period_on_aka_stack(protocol_id_enum ps_id)
+{
+    if (sbp_query_md_feature_by_ps(SBP_MM_CUSTOMIZE_T3311_TIMEOUT_VALUE_FOR_RSIM, ps_id) == KAL_TRUE)
+	{
+		return MM_CUSTOM_T3311_TIMER_VALUE_ON_AKA_STACK;
+	}
+    else
+	{
+        return 15;
+	}
+}
+/*****************************************************************************
+* In some network, the CSMT flag cannot be set in paging response during MT CSFB calls.
+* 
+* - DISABLE_PAGING_CSMT_FLAG_PLMN_END
+*   - If PLMN is listed in the array, the CSMT flag shall never be set
+*
+*****************************************************************************/
+const char *DISABLE_PAGING_CSMT_FLAG_PLMN[] = {"40410", "22201", "46601", "23415", "23410", "51011", "45406", "21401", "46001", "310260", "50501", "20801", DISABLE_PAGING_CSMT_FLAG_PLMN_END};
+const kal_uint32 DISABLE_PAGING_CSMT_FLAG_PLMN_NUM = sizeof(DISABLE_PAGING_CSMT_FLAG_PLMN)/sizeof(char *);
+
+const char *CUSTOM_CAUSE_PLMN[] = {CUSTOM_CAUSE_PLMN_SET_ANY};
+
+const kal_uint32 CUSTOM_CAUSE_PLMN_NUM = sizeof(CUSTOM_CAUSE_PLMN)/sizeof(char *);
+
+/*****************************************************************************
+* Enable CSMT flag in paging response
+* 
+* - DISABLE_PAGING_CSMT_FLAG_PLMN_END
+*   - If PLMN is listed in the array, the CSMT flag shall never be set
+*
+*****************************************************************************/
+const char *ENABLE_PAGING_CSMT_FLAG_PLMN[] = {"310410", "46000", ENABLE_PAGING_CSMT_FLAG_PLMN_END};
+const kal_uint32 ENABLE_PAGING_CSMT_FLAG_PLMN_NUM = sizeof(ENABLE_PAGING_CSMT_FLAG_PLMN)/sizeof(char *);
+
+/*****************************************************************************
+* Trigger detach when user set rat G->L
+*
+*   - If PLMN is listed in the array, then UE will trigger detach when user set rat from G to L
+*
+*****************************************************************************/
+const char *CONFIGURE_USER_SET_RAT_DETACH_G2L_PLMN[] = {"26003F", CONFIGURE_USER_SET_RAT_DETACH_G2L_PLMN_END};
+const kal_uint32 CONFIGURE_USER_SET_RAT_DETACH_G2L_PLMN_NUM = sizeof(CONFIGURE_USER_SET_RAT_DETACH_G2L_PLMN)/sizeof(char *);
+
+/*****************************************************************************
+* Enable SKIP_LU_AFTER_CSFB_FOR_EAFR Feature
+*
+*   - If PLMN is listed in the array, then behave as SKIP_LU_AFTER_CSFB_FOR_EAFR Enabled
+*
+*****************************************************************************/
+const char *CONFIGURE_SKIP_LU_AFTER_CSFB_FOR_EAFR_PLMN[] = {"25002F","71006F","71010F","71017F","722310","40492F","40410F","40505F","45005F", CONFIGURE_SKIP_LU_AFTER_CSFB_FOR_EAFR_PLMN_END};
+const kal_uint32 CONFIGURE_SKIP_LU_AFTER_CSFB_FOR_EAFR_PLMN_NUM = sizeof(CONFIGURE_SKIP_LU_AFTER_CSFB_FOR_EAFR_PLMN)/sizeof(char *);
+
+/*****************************************************************************
+* Configure PLMN RAU delay for CSFB 
+*
+*   - If PLMN is listed in the array, RAU will be delay by 1.5 secs 
+*
+*****************************************************************************/
+const char *CONFIGURE_PLMN_RAU_DELAY_FOR_CSFB[] = {"45005F", CONFIGURE_PLMN_RAU_DELAY_FOR_CSFB_END};
+const kal_uint32 CONFIGURE_PLMN_RAU_DELAY_FOR_CSFB_NUM = sizeof(CONFIGURE_PLMN_RAU_DELAY_FOR_CSFB)/sizeof(char *);
+
+/*****************************************************************************
+* Disable DoS Feature
+*
+*   - If PLMN is listed in the array,DoS feature will be disabled when device camps on this PLMN.
+*   - For more details of DoS feature visit 24.008 4.1.1.6A and 24.301 5.3.7b
+*****************************************************************************/
+const char *PLMN_LIST_TO_DISABLE_DOS[] = {"46000F", PLMN_LIST_TO_DISABLE_DOS_END};
+const kal_uint32 PLMN_LIST_TO_DISABLE_DOS_NUM = sizeof(PLMN_LIST_TO_DISABLE_DOS)/sizeof(char *);
+
+/**********************************************************************************
+* Trigger detach when user set rat G->W
+*
+*   - If PLMN is listed in the array, then UE will trigger detach when user set rat from G to W
+*
+*****************************************************************************/
+const char *CONFIGURE_USER_SET_RAT_DETACH_G2W_PLMN[] = {"40403F", CONFIGURE_USER_SET_RAT_DETACH_G2W_PLMN_END};
+const kal_uint32 CONFIGURE_USER_SET_RAT_DETACH_G2W_PLMN_NUM = sizeof(CONFIGURE_USER_SET_RAT_DETACH_G2W_PLMN)/sizeof(char *);
+
+/*******************************************************************************************
+* Convert VPLMN PS Reject cause # 7 to cause # 15 to retry PS registration again on same VPLMN, another LA/RAT
+*
+*   - If VPLMN is listed in the array, then convert PS reject cause # 7 to cause # 15
+*
+********************************************************************************************/
+const char *CUSTOM_VPLMN_PS_REJ_CAUSE_7TO15_PLMN[] = {"40471F", CUSTOM_VPLMN_PS_REJ_CAUSE_7TO15_PLMN_END};
+const kal_uint32 CUSTOM_VPLMN_PS_REJ_CAUSE_7TO15_PLMN_NUM = sizeof(CUSTOM_VPLMN_PS_REJ_CAUSE_7TO15_PLMN)/sizeof(char *);
+
+/*****************************************************************************
+* Set FOR bit in GMM ATTACH or RAU when data is enabled and PDP Activation procedure will follow subequently.
+*
+*   - If PLMN is listed in the array, then UE shall set FOR bit in GMM ATTACH or RAU 
+*      when data is enabled and PDP Activation procedure will follow subequently.
+*
+*****************************************************************************/
+const char *SET_FOR_BIT_IN_ATTACH_RAU_WHEN_DATA_ENABLED_PLMN[] = {SET_FOR_BIT_IN_ATTACH_RAU_WHEN_DATA_ENABLED_PLMN_END};
+const kal_uint32 SET_FOR_BIT_IN_ATTACH_RAU_WHEN_DATA_ENABLED_PLMN_NUM = sizeof(SET_FOR_BIT_IN_ATTACH_RAU_WHEN_DATA_ENABLED_PLMN)/sizeof(char *);
+
+/**************************************************************************************************************
+ *   When the first SS request is complete through CSFB and AFR is enabled,if MM receive another SS transaction,  
+ *   MM shall reject the SS transaction and shall allow AFR to happen to 45G
+ ***************************************************************************************************************/
+const char *CUSTOM_SINGLE_SS_OPERATION_ON_CSFB_WHEN_AFR_ENABLED_LIST[] = {"40495F","40411F","40470F","40410F","40496F","40401F","40484F", INVALID_CUST_PLMN};
+const kal_uint32 CUSTOM_SINGLE_SS_OPERATION_ON_CSFB_WHEN_AFR_ENABLED_LIST_NUM = 
+	                    sizeof(CUSTOM_SINGLE_SS_OPERATION_ON_CSFB_WHEN_AFR_ENABLED_LIST)/sizeof(char *);
+
+
+/****************************************************************************
+*
+* Sync RAU procedure will be started when UE is in IDLE mode and earlier RRC CNX on RAT_UMTS
+* was aborted forcefully causing the network to still page the UE on PAGE_TYPE-2 thinking RRC_CNX exists.
+* Since Network will only maintain its RRC CNX for a brief time, its an optimization from UE to let
+* network know about the abrupt RRC CNX release(When peer stack takes RF resources instantly)
+* after UE is back to idle
+* Sync RAU guard timer will ensure that UE does not perform an RAU procedure
+* to sync RNC network states after the specified value.
+* Please note that this timer is only effective when RAT_UMTS is MAIN_PS stack (Data Preferred Stack)
+* of with an active RRC connection and peer stack interrupts the MAIN_PS (Data Preferred Stack)
+* and the RRC connection of Data Preferred Stack is abruptly ended.
+*
+****************************************************************************/
+
+const kal_uint32 CUSTOM_GMM_SYNC_RAU_GUARD_TIMER_VALUE = 60;
+
+
+/*****************************************************************************
+* Disable ISR Feature
+* If SIM PLMN (either HPLMN or EHPLMN )is listed in custom array. 
+* ISR feature shall be disable
+*   
+*****************************************************************************/
+const char *PLMN_LIST_TO_DISABLE_ISR[] = {"22288F","22299F", PLMN_LIST_TO_DISABLE_ISR_END};
+const kal_uint32 PLMN_LIST_TO_DISABLE_ISR_NUM = sizeof(PLMN_LIST_TO_DISABLE_ISR)/sizeof(char *);
+
+
+/*****************************************************************************
+* Disable customization under SBP_USE_MM_INTERNAL_T3212_PERIOD_SETTING
+* 
+*    If PLMN is listed in the array, then MM shall use the T3212 value provided by network from SIB  message
+*   
+*****************************************************************************/
+const char *MM_DISABLE_USE_INTERNAL_T3212_PERIOD_SETTING_FOR_CUSTOM_PLMN[] = {"25099F", MM_DISABLE_USE_INTERNAL_T3212_PERIOD_SETTING_FOR_CUSTOM_PLMN_END};
+const kal_uint32 MM_DISABLE_USE_INTERNAL_T3212_PERIOD_SETTING_FOR_CUSTOM_PLMN_NUM = sizeof(MM_DISABLE_USE_INTERNAL_T3212_PERIOD_SETTING_FOR_CUSTOM_PLMN)/sizeof(char *);
+
+
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_get_cause_converter
+* DESCRIPTION
+*  This function is used to get customizable reject cause mapping.
+*  CUSTOM_CAUSE_PLMN might restrict applying network
+* CUSTOM_CAUSE_PLMN_SET_ANY : all network
+* "00101f" : only applying on 00101 reject cause
+*
+* PARAMETERS
+*  None
+*
+* RETURNS
+*  kal_uint32
+*
+* GLOBALS AFFECTED
+*  None
+*
+*****************************************************************************/
+kal_uint8 mm_custom_get_customize_cause(protocol_id_enum ps_id,kal_uint8 cause, mm_custom_proc_type proc, kal_bool is_on_hplmn, kal_bool is_test, kal_bool convert_vplmn_ps_cause7to15 ,kal_bool is_aka_sim)
+{
+    if (is_on_hplmn || is_test)
+    {
+       if ((is_aka_sim == KAL_TRUE) && (is_on_hplmn) && (cause == 0x7))
+       {
+           if(sbp_query_md_feature_by_ps(SBP_CONVERT_REJ_CAUSE7_TO_14_ON_HPLMN_FOR_AKASIM,ps_id) == KAL_TRUE)
+	       {
+	       	    return 0xe; /*GPRS_NOT_ALLOWED_IN_PLMN */
+	       }
+           else
+           {
+               /* MTK Default behavior is to return the same cause (i.e. 0x7) for HPLMN if SBP is not enable & current stack is AKA. 
+                              Customer could change to any other reject cause based on the need basis at their own risk.
+                               Ex. If customer likes to convert from cause #7 to #14. please change the value to 0x0e */
+                return cause;  
+           }
+       }
+       	
+        return cause;
+    }
+    
+    if (proc == MM_CUSTOM_MM)
+    {
+        switch (cause)
+        {
+            case 0x02:/* IMSI_UNKNOWN_IN_HLR */
+            case 0x03:/* ILLEGAL_MS */
+            case 0x06:/* ILLEGAL_ME */
+                if (sbp_query_md_feature_by_ps(SBP_ENHANCED_SOR,ps_id) == KAL_TRUE)
+                {
+                    return 0xd; /* ROAMING_AREA_NOT_ALLOWED */
+                }
+                break;
+            case 0x0d: /* ROAMING_AREA_NOT_ALLOWED */
+                if (sbp_query_md_feature_by_ps(SBP_ROAMING_NOT_ALLOW_AS_NO_SUITABLE,ps_id) == KAL_TRUE)
+                {
+                    return 0xf; /* NO_SUITABLE_CELLS_IN_LA */
+                }
+        default:
+            break;
+        }
+    }
+
+    if (proc == MM_CUSTOM_GMM)
+    {
+        switch (cause)
+        {            
+            case 0x03:/* ILLEGAL_MS */
+            case 0x06:/* ILLEGAL_ME */
+            case 0x07:/* GPRS_NOT_ALLOWED */
+            case 0x08:/* GPRS_NON_GPRS_NOT_ALLOWED */
+                if (sbp_query_md_feature_by_ps(SBP_ENHANCED_SOR,ps_id) == KAL_TRUE)
+                {
+                    return 0xd; /* ROAMING_AREA_NOT_ALLOWED */
+                }
+				/* GPRS_NOT_ALLOWED on VPLMN*/
+				else if(cause == 0x07 && convert_vplmn_ps_cause7to15 == KAL_TRUE) 
+				{
+					/*VPLMN returned GPRS_NOT_ALLOWED. Convert to NO_SUITABLE_CELLS_IN_LA 
+					 *so that PS Attach retried in other LA/other RAT on same VPLMN
+					 */
+					return 0xf; /* NO_SUITABLE_CELLS_IN_LA */
+				}
+                break;
+            case 0x0d: /* ROAMING_AREA_NOT_ALLOWED */
+                if (sbp_query_md_feature_by_ps(SBP_ROAMING_NOT_ALLOW_AS_NO_SUITABLE,ps_id) == KAL_TRUE)
+                {
+                    return 0xf; /* NO_SUITABLE_CELLS_IN_LA */
+                }
+            default:
+            break;
+        }
+    }
+    return cause;
+}
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_get_proc_cause_converter
+* DESCRIPTION
+*  This function is used to get customizable reject cause mapping.
+*  
+*
+* PARAMETERS
+*  cause        - cause value from Network 
+*  mm_cust_proc - MM/GMM procedure 
+*  is_on_hplmn  - if TRUE UE camped on HPLMN
+*  is_test      - if test-sim 
+*  protocol_id  - Protocol stack ID of current operating Stack
+* RETURNS
+*  kal_uint8
+*
+* GLOBALS AFFECTED
+*  None
+*
+*****************************************************************************/
+kal_uint8 mm_custom_get_proc_cause_converter(kal_uint8 cause, mm_custom_proc_msg cust_proc, kal_bool is_on_hplmn, kal_bool is_test, protocol_id_enum protocol_id)
+{
+    if (is_test)
+    {
+        return cause;
+    }
+
+    switch (cust_proc)
+    {
+    case CUST_MM_MSG_LU_REJECT:
+        switch (cause)
+        {
+        case 0x02:/* IMSI_UNKNOWN_IN_HLR */
+        case 0x03:/* ILLEGAL_MS */
+        case 0x06:/* ILLEGAL_ME */
+            if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x11;
+            }
+            else
+            {
+                return 0x0d;
+            }
+            break;
+
+        case 0x0b:
+            if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x6f;
+            }
+            else
+            {
+                return 0x0b;
+            }
+            break;
+
+        case 0x0c:
+          /*  if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x0f;
+            }
+            else */
+            {
+                return 0x0f;
+            }
+            break;
+
+        case 0x6f:
+            if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x11;
+            }
+            else
+            {
+                return 0x6f;
+            }
+            break;
+
+        default:
+            break;
+        }
+        break;
+        
+    case CUST_GMM_MSG_ATTACH_REJECT:
+    case CUST_GMM_MSG_RAU_REJECT:
+        switch (cause)
+        {
+        case 0x03:/* ILLEGAL_MS */
+        case 0x08:/* GPRS_NON_GPRS_NOT_ALLOWED */
+            if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x11;
+            }
+            else
+            {
+                return 0x0d;
+            }
+            break;
+            
+        case 0x06:/* ILLEGAL_ME */
+        case 0x07:/* GPRS_NOT_ALLOWED */
+
+            if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x11;
+            }
+            else
+            {
+                return 0x0e;
+            }
+            break;
+
+        case 0x0b:
+            if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x6f;
+            }
+            else
+            {
+                return 0x0b;
+            }
+            break;
+
+        case 0x0c:
+          /*  if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x0f;
+            }
+            else */
+            {
+                return 0x0f;
+            }
+            break;
+
+        case 0x6f:
+            if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x11;
+            }
+            else
+            {
+                return 0x6f;
+            }
+            break;
+
+        default:
+            break;
+        }
+        break;
+    
+    case CUST_GMM_MSG_DETACH_REQUEST:
+        switch (cause)
+        {
+        case 0x02:/* IMSI_UNKNOWN_IN_HLR */
+        case 0x03:/* ILLEGAL_MS */
+        case 0x06:/* ILLEGAL_ME */
+        case 0x08:/* GPRS_NON_GPRS_NOT_ALLOWED */
+            if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x11;
+            }
+            else
+            {
+                return 0x0d;
+            }
+            break;
+
+        case 0x07:/* GPRS_NOT_ALLOWED */
+            if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x11;
+            }
+            else
+            {
+                return 0x0e;
+            }
+            break;
+        case 0x0c:
+          /*  if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x0f;
+            }
+            else */
+            {
+                return 0x0f;
+            }
+            break;
+
+        case 0x6f:
+            if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x11;
+            }
+            else
+            {
+                return 0x6f;
+            }
+            break;
+
+        default:
+            break;
+        }
+        break;
+
+    case CUST_GMM_MSG_SERVICE_REJECT:
+        switch (cause)
+        {
+        case 0x03:/* ILLEGAL_MS */
+        case 0x06:/* ILLEGAL_ME */
+        case 0x08:/* GPRS_NON_GPRS_NOT_ALLOWED */
+            if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x0f;
+            }
+            else
+            {
+                return 0x0d;
+            }
+            break;
+
+        case 0x07:/* GPRS_NOT_ALLOWED */
+            if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x0f;
+            }
+            else
+            {
+                return 0x0e;
+            }
+            break;
+        case 0x0c:
+          /*  if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x0f;
+            }
+            else */
+            {
+                return 0x0f;
+            }
+            break;
+
+        case 0x6f:
+            if (is_on_hplmn == KAL_TRUE)
+            {
+                return 0x11;
+            }
+            else
+            {
+                return 0x6f;
+            }
+            break;
+
+        default:
+            break;
+        }
+        break;
+    default:
+        break;
+    }
+
+    return cause;
+}
+
+
+
+#ifdef __TC7__CS__SUPPORT__
+
+/*****************************************************************************
+
+* FUNCTION
+
+*  mm_custom_fake_lu_needed
+
+* DESCRIPTION
+
+*  IronMan requirement
+
+*
+
+* PARAMETERS
+
+*
+
+* RETURNS
+
+*  KAL_TRUE: The feature is enabled.
+
+    KAL_FALSE: The feature is disabled.
+
+*  None
+
+*****************************************************************************/
+
+kal_bool mm_custom_fake_lu_needed(void)
+
+{
+
+#if defined(__TC7_CS_OPT1__)
+
+    return KAL_TRUE;
+
+#else
+
+    return KAL_FALSE;
+
+#endif
+
+}
+
+#endif
+
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_get_sync_rau_guard_timer_period
+* DESCRIPTION
+* Sync RAU procedure will be started when UE is in IDLE mode and earlier RRC CNX on RAT_UMTS
+* was aborted forcefully causing the network to still page the UE on PAGE_TYPE-2 thinking RRC_CNX exists.
+* Since Network will only maintain its RRC CNX for a brief time, its an optimization from UE to let
+* network know about the abrupt RRC CNX release(When peer stack takes RF resources instantly)
+* after UE is back to idle
+* Sync RAU guard timer will ensure that UE does not perform an RAU procedure
+* to sync RNC network states after the specified value.
+* Please note that this timer is only effective when RAT_UMTS is data preferred stack
+* and Peer stack is attached to LTE.
+*
+* PARAMETERS
+*   NONE
+*
+* RETURNS
+*   Seconds
+*
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint32 mm_custom_get_sync_rau_guard_timer_period()
+{
+    return (CUSTOM_GMM_SYNC_RAU_GUARD_TIMER_VALUE);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_skip_force_lu
+* DESCRIPTION
+*   During inter RAT change between 23G<->4G, where UE was previously camped on 23G,
+*   searched on 4G (due to Higher Priority PLMN search/recovery search to 4G), but could not find a 
+*   suitable cell to camp on 4G and returned to 23G, MM need not perform a force LU in this case
+*   as there was no intimation to the network about the transient inter RAT status or no T3212 expiry
+* PARAMETERS
+*  protocol_id_enum protocol stack 
+*
+* RETURNS
+*  kal_bool
+*   KAL_FALSE: Perform Force LU in the above scenario
+*   KAL_TRUE: Do not perform Force LU in the above scenario
+*
+* GLOBALS AFFECTED
+*  None
+*
+*****************************************************************************/
+kal_bool mm_custom_skip_force_lu(protocol_id_enum ps_id)
+{
+    if (sbp_query_md_feature_by_ps(SBP_IS_OP12, ps_id) == KAL_TRUE)
+    {
+        return KAL_TRUE;
+    }
+    return KAL_FALSE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_get_csfb_rau_reject_cause_converter_for_specific_plmn
+* DESCRIPTION
+*  This function is used to get customizable RAU reject cause mapping for specific PLMN. 
+*  This cause convertion is only applicable for RAU reject cause during CSFB procedure in 23G.
+*
+* PARAMETERS
+*  original_cause  - cause value from Network 
+*  is_on_hplmn  - if TRUE UE camped on HPLMN
+*  current_plmn - current camped PLMN
+*  protocol_id  - Protocol stack ID of current operating Stack
+* RETURNS
+*  kal_uint8
+*
+* GLOBALS AFFECTED
+*  None
+*
+*****************************************************************************/
+kal_uint8 mm_custom_get_csfb_rau_reject_cause_converter_for_specific_plmn(kal_uint8 *current_plmn, kal_uint8 original_cause, protocol_id_enum ps_id, kal_bool is_on_hplmn)
+{
+    switch(original_cause)   
+    {
+        case 0x0e:
+            if (is_on_hplmn == KAL_FALSE)
+            {
+                if (kal_mem_cmp(current_plmn,"52005F",6)  == 0)   // Cause conversion from #14 to #111 for VPLMN 52005F
+                {
+                    return 0x6f;
+                }
+            }
+            break;
+		case 0x07:
+            if (kal_mem_cmp(current_plmn,"40411F",6)  == 0)   // Cause conversion from #7 to #111 for PLMN 40411F
+            {
+                return 0x6f;   
+            }
+            break;
+        default:
+            break;
+    }
+    return original_cause;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  mm_custom_get_T3240_timer_value_for_cm_mm_wait_for_network_release
+* DESCRIPTION
+*  This function is used to get customizable T3240 timer value.
+*  The customized timer value shall effect when CISS request is rejected with reject cause
+*  CM_MM_WAIT_FOR_NETWORK_RELEASE and when SBP_SINGLE_SS_OPERATION_ON_CSFB_WHEN_AFR_ENABLED
+*  is enabled  or added the PLMN in MM custom PLMN array.
+*  Customized T3240  timer will ensure such that eventhough NW has not released the CS Connection after CS procedural completion,
+*  before the second CISS retry by L4 SS retry timer expiry, MM will move out of MM_WAIT_FOR_NETWORK_COMMAND
+*  by triggering SCRI on customized T3240 timer expiry and thereby CISS retry request will be honoured and will not be further rejected.
+*
+* PARAMETERS
+*   NONE
+*
+* RETURNS
+*   Seconds
+*
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint32 mm_custom_get_T3240_timer_value_for_cm_mm_wait_for_network_release()
+{
+    return (MM_CUSTOM_T3240_TIMER_VALUE_FOR_CM_MM_WAIT_FOR_NETWORK_RELEASE);
+}
+/*****************************************************************************
+* FUNCTION
+* mm_custom_mt_csfb_mspm_guard_timer
+* DESCRIPTION
+* When MT CSFB will be triggered, then MM will start custom timer with time period T(by default value will be 0)which will be customizable. 
+* If time period is 0, then MM will not start timer and will behave as legacy.
+*
+* PARAMETERS
+*  NONE
+*
+* RETURNS
+*  Seconds
+*
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint32 mm_custom_mt_csfb_mspm_guard_timer(void)
+{
+    return (MM_CUSTOM_MT_CSFB_PLMN_SEARCH_ABORT_GUARD_TIMER);
+}
+
+
diff --git a/mcu/custom/protocol/common/ps/custom_mm_config.h b/mcu/custom/protocol/common/ps/custom_mm_config.h
new file mode 100644
index 0000000..070cdce
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_mm_config.h
@@ -0,0 +1,690 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_mm_config.c
+ *
+ * Project:
+ * --------
+ *   MONZA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the MM configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifndef _CUSTOM_MM_CONFIG_H
+#define _CUSTOM_MM_CONFIG_H
+
+#include "kal_general_types.h"
+#include "ps_public_utility.h"
+
+/*************************************************************************
+* Constant
+*************************************************************************/
+#define ALL_MCC_ALLOWED 0xfff
+#define NO_MCC_ALLOWED 0xffffffff
+
+extern const kal_uint32 ECC_IMSI_MCC_LIST[];
+extern const kal_uint32 ECC_IMSI_MCC_NUM;
+
+extern const kal_uint32 LR_BEFORE_ECC_MCC_LIST[];
+extern const kal_uint32 LR_BEFORE_ECC_MCC_NUM;
+
+extern const char *LR_BEFORE_CSFB_ECC_PLMN_LIST[];
+extern const kal_uint32 LR_BEFORE_CSFB_ECC_PLMN_NUM;
+#define LR_BEFORE_CSFB_ECC_PLMN_SET_END "FFFFFF"
+
+#define CUSTOM_TEST_PLMN_SET_END "FFFFFF"
+extern const char *CUSTOM_TEST_PLMN[];
+extern const kal_uint32 CUSTOM_TEST_PLMN_NUM;
+
+/* Set FOR bit False in GMM ATTACH for PLMN  in custom PLMN list */
+#define SET_FOR_BIT_FALSE_IN_ATTACH_FOR_CUSTOM_PLMN_END "FFFFFF"
+extern const char *SET_FOR_BIT_FALSE_IN_ATTACH_FOR_CUSTOM_PLMN[];
+extern const kal_uint32 SET_FOR_BIT_FALSE_IN_ATTACH_FOR_CUSTOM_PLMN_NUM;
+
+extern const char *ALLOW_PDP_ACTIVATION_OVER_NEW_CONNECTION_WHEN_RAU_FOR_FALSE_FOR_CUSTOM_PLMN[];
+extern const kal_uint32 ALLOW_PDP_ACTIVATION_OVER_NEW_CONNECTION_WHEN_RAU_FOR_FALSE_FOR_CUSTOM_PLMN_NUM;
+
+extern const char *MM_TRY_PENDING_SS_AS_CSFB_AFTER_IRAT_TO_4G_FOR_CUSTOM_PLMN[];
+extern const kal_uint32 MM_TRY_PENDING_SS_AS_CSFB_AFTER_IRAT_TO_4G_FOR_CUSTOM_PLMN_NUM;
+
+extern const char *MM_FORCE_TAU_NEEDED_AFTER_CSFB_FOR_CUSTOM_PLMN[];
+extern const kal_uint32 MM_FORCE_TAU_NEEDED_AFTER_CSFB_FOR_CUSTOM_PLMN_NUM;
+
+
+#define INVALID_CUSTOM_PLMN "FFFFFF"
+extern const char *CUSTOM_PLMN_IRAT_TAU_TYPE[];
+extern const kal_uint32 CUSTOM_PLMN_IRAT_TAU_TYPE_NUM;
+
+extern const char *CUSTOM_IRAT_TAU_TYPE_FOR_PENDING_RAU_ON_NON_DATA_SIM[];
+extern const kal_uint32 CUSTOM_IRAT_TAU_TYPE_FOR_PENDING_RAU_ON_NON_DATA_SIM_NUM;
+
+
+extern const char *CUSTOM_RESET_GMM_KEYS_LIST[];
+extern const kal_uint32 CUSTOM_RESET_GMM_KEYS_LIST_NUM;
+
+extern const char *CUSTOM_MM_STAY_ON_LA_OF_REGIONAL_PROVISIONAL_SERVICE_PLMN_LIST[];
+extern const kal_uint32 CUSTOM_MM_STAY_ON_LA_OF_REGIONAL_PROVISIONAL_SERVICE_PLMN_LIST_NUM;
+
+extern const char *CUSTOM_IMSI_GPRS_DETACH_RETRY_LIST[];
+extern const kal_uint32 CUSTOM_IMSI_GPRS_DETACH_RETRY_LIST_NUM;
+
+/* Skip Old LAI in combined procedure through custom array*/ 
+#define INVALID_CUST_PLMN "FFFFFF"
+extern const char *CUSTOM_PLMN_SKIP_OLD_LAI_LIST[];
+extern const kal_uint32 CUSTOM_PLMN_SKIP_OLD_LAI_LIST_NUM;
+
+/* Convert reject cause for CM_SERVICE_REJECT in MM wait for additional outgoing state through custom array */
+extern const char *CUSTOM_CM_SERV_REJ_CAUSE_CONVERT_TO_17_FOR_ADDIT_OUTGOING_MM_CONN_LIST[];
+extern const kal_uint32 CUSTOM_CM_SERV_REJ_CAUSE_CONVERT_TO_17_FOR_ADDIT_OUTGOING_MM_CONN_LIST_NUM;
+
+/* Trigger GMM ATTACH REQUEST with IMSI as MS identity */
+extern const char *CUSTOM_TRIGGER_ATTACH_WITH_IMSI_LIST[];
+extern const kal_uint32 CUSTOM_TRIGGER_ATTACH_WITH_IMSI_LIST_NUM;
+
+extern const char *CUSTOM_LU_BEFORE_CSFB_ECC_IF_LAI_DIFF_LIST[];
+extern const kal_uint32 CUSTOM_LU_BEFORE_CSFB_ECC_IF_LAI_DIFF_LIST_NUM;
+
+extern const char *CUSTOM_EMM_DETACH_REQUIRED_ON_RAT_MODE_CHANGE_PLMN_LIST[];
+extern const kal_uint32 CUSTOM_EMM_DETACH_REQUIRED_ON_RAT_MODE_CHANGE_PLMN_LIST_NUM;
+
+extern const char *CUSTOM_EMM_DETACH_REQUIRED_ON_RAT_MODE_CHANGE_45G_TO_4G_PLMN_LIST[];
+extern const kal_uint32 CUSTOM_EMM_DETACH_REQUIRED_ON_RAT_MODE_CHANGE_45G_TO_4G_PLMN_LIST_NUM;
+
+/* Ignore Reject cause 7, GPRS serive not allowed, in ATTACH REJECT or 
+   in ROUTING AREA UPDATING REJECT message when roaming. Reject Cause 
+   14, GPRS serive not allowed in this PLMN, insteads of */
+#define IGNORE_GPRS_SERVICE_NOT_ALLOWED_WHEN_ROAMING_OPERATOR_SET_END "FFFFFF"
+extern const char *IGNORE_GPRS_SERVICE_NOT_ALLOWED_WHEN_ROAMING_OPERATOR[];
+extern const kal_uint32 IGNORE_GPRS_SERVICE_NOT_ALLOWED_WHEN_ROAMING_OPERATOR_NUM;
+
+/* Convert  Attach Reject cause 14, GPRS  not allowed in the PLMN  to cause #111 for
+   specific PLMN  */
+#define CONVERT_GPRS_NOT_ALLOWED_IN_PLMN_TO_PROTOCOL_ERROR_SET_END "FFFFFF"
+extern const char *CONVERT_GPRS_NOT_ALLOWED_IN_PLMN_TO_PROTOCOL_ERROR[];
+extern const kal_uint32 CONVERT_GPRS_NOT_ALLOWED_IN_PLMN_TO_PROTOCOL_ERROR_NUM;
+
+/* Convert  RAU Reject cause 7, GPRS  not allowed, to cause #111 for
+   specific PLMN  */
+#define CONVERT_GPRS_NOT_ALLOWED_TO_PROTOCOL_ERROR_SET_END "FFFFFF"
+extern const char *CONVERT_GPRS_NOT_ALLOWED_TO_PROTOCOL_ERROR[];
+extern const kal_uint32 CONVERT_GPRS_NOT_ALLOWED_TO_PROTOCOL_ERROR_NUM;
+
+#define DISABLE_SRVCC_IE_PLMN_SET_END "FFFFFF"
+extern const char *DISABLE_SRVCC_IE_PLMN[];
+extern const kal_uint32 DISABLE_SRVCC_IE_PLMN_NUM;
+
+/* Disable CSMT flag in paging response for specific PLMNs */
+#define DISABLE_PAGING_CSMT_FLAG_PLMN_END "FFFFFF"
+extern const char *DISABLE_PAGING_CSMT_FLAG_PLMN[];
+extern const kal_uint32 DISABLE_PAGING_CSMT_FLAG_PLMN_NUM;
+
+/* Enable CSMT flag in paging response for specific PLMNs */
+#define ENABLE_PAGING_CSMT_FLAG_PLMN_END "FFFFFF"
+extern const char *ENABLE_PAGING_CSMT_FLAG_PLMN[];
+extern const kal_uint32 ENABLE_PAGING_CSMT_FLAG_PLMN_NUM;
+
+#define CUSTOM_CAUSE_PLMN_SET_ANY "FFFFFF"
+extern const char *CUSTOM_CAUSE_PLMN[];
+extern const kal_uint32 CUSTOM_CAUSE_PLMN_NUM;
+
+/* Configure user set rat detach specific PLMNs */
+#define CONFIGURE_USER_SET_RAT_DETACH_G2L_PLMN_END "FFFFFF"
+extern const char *CONFIGURE_USER_SET_RAT_DETACH_G2L_PLMN[];
+extern const kal_uint32 CONFIGURE_USER_SET_RAT_DETACH_G2L_PLMN_NUM;
+
+/* Configure SKIP_LU_AFTER_CSFB_FOR_EAFR specific PLMNs */
+#define CONFIGURE_SKIP_LU_AFTER_CSFB_FOR_EAFR_PLMN_END "FFFFFF"
+extern const char *CONFIGURE_SKIP_LU_AFTER_CSFB_FOR_EAFR_PLMN[];
+extern const kal_uint32 CONFIGURE_SKIP_LU_AFTER_CSFB_FOR_EAFR_PLMN_NUM;
+
+/* Configure RAU DELAY FOR CSFB for specific PLMNs */
+#define CONFIGURE_PLMN_RAU_DELAY_FOR_CSFB_END "FFFFFF"
+extern const char *CONFIGURE_PLMN_RAU_DELAY_FOR_CSFB[];
+extern const kal_uint32 CONFIGURE_PLMN_RAU_DELAY_FOR_CSFB_NUM;
+
+/*Configure PLMN_LIST_TO_DISABLE_DOS*/
+#define PLMN_LIST_TO_DISABLE_DOS_END "FFFFFF"
+extern const char *PLMN_LIST_TO_DISABLE_DOS[];
+extern const kal_uint32 PLMN_LIST_TO_DISABLE_DOS_NUM;
+/* Configure user set rat detach G2W specific PLMNs */
+#define CONFIGURE_USER_SET_RAT_DETACH_G2W_PLMN_END "FFFFFF"
+extern const char *CONFIGURE_USER_SET_RAT_DETACH_G2W_PLMN[];
+extern const kal_uint32 CONFIGURE_USER_SET_RAT_DETACH_G2W_PLMN_NUM;
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+/* Custom array of PLMNs containing VPLMN on which PS reject cause #7 shall be converted to #15 */
+#define CUSTOM_VPLMN_PS_REJ_CAUSE_7TO15_PLMN_END "FFFFFF"
+extern const char *CUSTOM_VPLMN_PS_REJ_CAUSE_7TO15_PLMN[];
+extern const kal_uint32 CUSTOM_VPLMN_PS_REJ_CAUSE_7TO15_PLMN_NUM;
+
+/* MM shall reject the next SS transaction and shall allow AFR to happen to 45G */
+extern const char *CUSTOM_SINGLE_SS_OPERATION_ON_CSFB_WHEN_AFR_ENABLED_LIST[];
+extern const kal_uint32 CUSTOM_SINGLE_SS_OPERATION_ON_CSFB_WHEN_AFR_ENABLED_LIST_NUM;
+
+/* Set FOR bit in GMM ATTACH or RAU when data is enabled and PDP Activation will follow */
+#define SET_FOR_BIT_IN_ATTACH_RAU_WHEN_DATA_ENABLED_PLMN_END "FFFFFF"
+extern const char *SET_FOR_BIT_IN_ATTACH_RAU_WHEN_DATA_ENABLED_PLMN[];
+extern const kal_uint32 SET_FOR_BIT_IN_ATTACH_RAU_WHEN_DATA_ENABLED_PLMN_NUM;
+
+/*Configure PLMN_LIST_TO_DISABLE_ISR*/
+#define PLMN_LIST_TO_DISABLE_ISR_END "FFFFFF"
+extern const char *PLMN_LIST_TO_DISABLE_ISR[];
+extern const kal_uint32 PLMN_LIST_TO_DISABLE_ISR_NUM;
+
+/*Disable customisation under SBP_USE_MM_INTERNAL_T3212_PERIOD_SETTING*/
+#define MM_DISABLE_USE_INTERNAL_T3212_PERIOD_SETTING_FOR_CUSTOM_PLMN_END "FFFFFF"
+extern const char *MM_DISABLE_USE_INTERNAL_T3212_PERIOD_SETTING_FOR_CUSTOM_PLMN[];
+extern const kal_uint32 MM_DISABLE_USE_INTERNAL_T3212_PERIOD_SETTING_FOR_CUSTOM_PLMN_NUM;
+
+extern const kal_uint32 CUSTOM_GMM_SYNC_RAU_GUARD_TIMER_VALUE;
+
+
+/*************************************************************************
+* Enum
+*************************************************************************/
+typedef enum
+{
+    MM_ENABLE_LR_REJ111_RETRY,
+    MM_ENABLE_HPPLMN_SEARCH_FORCE_RELEASE_PCH_CONNECTION
+}mm_setting_enum;
+
+typedef enum
+{
+    MM_STAY_ON_LA_OF_REGIONAL_PROVISIONAL_SERVICE,
+    MM_STAY_ON_LA_OF_REGIONAL_PROVISIONAL_ONLY_IF_TEST_SIM_TEST_MODE,
+    MM_NOT_STAY_ON_LA_OF_REGINOAL_PROVISIONAL_SERVICE
+}mm_rej_12_handle_enum;
+
+typedef enum
+{
+    MM_CUSTOM_UNKNOWN_PLMN_TYPE,
+    MM_CUSTOM_HPLMN,
+    MM_CUSTOM_R_E_PLMN
+}mm_custom_plmn_type;
+
+typedef enum
+{
+    MM_CUSTOM_MM,
+    MM_CUSTOM_GMM,
+}mm_custom_proc_type;
+
+typedef enum
+{
+    CUST_MM_MSG_LU_REJECT,
+    CUST_MM_MSG_CM_SERVICE_REJECT,
+    CUST_MM_MSG_ABORT,
+    CUST_GMM_MSG_ATTACH_ACCEPT,
+    CUST_GMM_MSG_ATTACH_REJECT,
+    CUST_GMM_MSG_RAU_ACCEPT,
+    CUST_GMM_MSG_RAU_REJECT,
+    CUST_GMM_MSG_DETACH_REQUEST,
+    CUST_GMM_MSG_SERVICE_REJECT
+}mm_custom_proc_msg;
+
+typedef enum
+{
+    /*MM Procedure types*/
+    CUST_NVRAM_MM_MSG_NONE                   = 0x0000,
+    CUST_NVRAM_MM_MSG_LU_REJECT              = 0x0001,
+    CUST_NVRAM_MM_MSG_CM_SERVICE_REJECT      = 0x0002,
+    CUST_NVRAM_MM_MSG_ABORT                  = 0x0004,
+    CUST_NVRAM_MM_MSG_MM_RESERVED1           = 0x0008,
+    CUST_NVRAM_MM_MSG_MM_RESERVED2           = 0x0010,
+    CUST_NVRAM_MM_MSG_MM_RESERVED3           = 0x0020,
+    CUST_NVRAM_MM_MSG_MM_RESERVED4           = 0x0040,
+    CUST_NVRAM_MM_MSG_MM_RESERVED5           = 0x0080,
+
+	/*GMM procedure types*/
+	CUST_NVRAM_GMM_MSG_ATTACH_ACCEPT         = 0x0100,
+    CUST_NVRAM_GMM_MSG_ATTACH_REJECT         = 0x0200,
+    CUST_NVRAM_GMM_MSG_RAU_ACCEPT            = 0x0400,
+    CUST_NVRAM_GMM_MSG_RAU_REJECT            = 0x0800,
+    CUST_NVRAM_GMM_MSG_DETACH_REQUEST        = 0x1000,
+    CUST_NVRAM_GMM_MSG_SERVICE_REJECT        = 0x2000,
+    CUST_NVRAM_GMM_MSG_RESERVED1             = 0x4000,
+    CUST_NVRAM_GMM_MSG_RESERVED2             = 0x8000
+}mm_custom_nvram_proc_msg;
+
+/*************************************************************************
+* Function
+*************************************************************************/
+extern kal_bool mm_custom_registration_related_setting(mm_setting_enum setting);
+
+extern mm_rej_12_handle_enum mm_custom_stay_on_la_of_regional_provisional_service(protocol_id_enum ps_id);
+
+/* MAUI_03014009 Russia Operator BeeLine request to use ECC with IMEI */
+extern kal_bool mm_custom_force_ecc_with_imei(void);
+
+#if 0
+/* under construction !*/
+#endif 
+
+extern kal_bool mm_custom_start_timer_for_mt_mm_conn(void);
+
+extern kal_uint32 mm_custom_get_erase_forbidden_la_list_timer_period(void);
+
+extern kal_bool mm_custom_enable_early_oos_ind(protocol_id_enum ps_id);
+
+extern kal_bool mm_custom_reattach_for_mt_gprs_detach_other_cause(protocol_id_enum ps_id);
+
+extern kal_bool mm_custom_imsi_detach_when_mm_conn_active(protocol_id_enum ps_id);
+extern kal_bool mm_custom_enable_dynamic_set_modem2_imei(kal_uint8 sim_index);
+
+extern kal_uint32 mm_custom_get_t3x11_period(protocol_id_enum ps_id);
+
+extern kal_bool mm_custom_report_reg_when_csfb_ecc_lu_delayed(mm_custom_plmn_type current_plmn_type);
+
+extern kal_uint8 mm_custom_get_customize_cause(protocol_id_enum ps_id,kal_uint8 cause, mm_custom_proc_type proc, kal_bool is_on_hplmn, kal_bool is_test, kal_bool convert_vplmn_ps_cause7to15, kal_bool is_aka_sim);
+extern kal_uint8 mm_custom_get_proc_cause_converter(kal_uint8 cause, mm_custom_proc_msg cust_proc, kal_bool is_on_hplmn, kal_bool is_test, protocol_id_enum protocol_id);
+#ifdef __TC7__CS__SUPPORT__
+extern kal_bool mm_custom_fake_lu_needed(void);
+#endif
+extern kal_uint32 mm_custom_get_T3311_timer_period_on_rsim_stack(protocol_id_enum ps_id);
+extern kal_uint32 mm_custom_get_T3311_timer_period_on_aka_stack(protocol_id_enum ps_id);
+extern kal_uint32 mm_custom_get_T3240_timer_value_for_specific_plmn(kal_uint8 *oplmn);
+
+extern kal_uint32 mm_custom_get_sync_rau_guard_timer_period(void);
+
+extern kal_bool mm_custom_skip_force_lu(protocol_id_enum ps_id);
+extern kal_uint8 mm_custom_get_csfb_rau_reject_cause_converter_for_specific_plmn(kal_uint8 *current_plmn, kal_uint8 original_cause, protocol_id_enum ps_id, kal_bool is_on_hplmn);
+extern kal_uint32 mm_custom_mt_csfb_mspm_guard_timer(void);
+extern kal_uint32 mm_custom_get_T3240_timer_value_for_cm_mm_wait_for_network_release(void);
+
+#endif /* _CUSTOM_MM_CONFIG_H */
+
diff --git a/mcu/custom/protocol/common/ps/custom_n3cf_config.c b/mcu/custom/protocol/common/ps/custom_n3cf_config.c
new file mode 100644
index 0000000..d32bbdb
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_n3cf_config.c
Binary files differ
diff --git a/mcu/custom/protocol/common/ps/custom_n3cf_config.h b/mcu/custom/protocol/common/ps/custom_n3cf_config.h
new file mode 100644
index 0000000..860f4be
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_n3cf_config.h
@@ -0,0 +1,96 @@
+// #include "kal_trace.h"           // For dhl_print()
+#include "kal_public_api.h"
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+
+#include "ps_public_enum.h"
+#include "l4_ps_api.h"
+#include "sim_ps_api.h"
+#include "nvram_editor_data_item.h"
+#include "nvram_interface.h"
+#include "mcf_if.h"
+// #include "n3cf_nvram_def.h"
+#include "iwlan_nvram_def.h"
+
+/* if added it, build error
+#include "n3cf_pri.h"
+*/
+
+#ifndef __CUSTOM_N3CF_CONFIG_H__
+#define __CUSTOM_N3CF_CONFIG_H__
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint32 sbp_id;
+    kal_uint8  mcc[4];
+    kal_uint8  mnc[4];
+} n3cf_dsbp_reconfigure_ind_struct;
+
+
+typedef struct {
+    mcf_ota_result_e default_ota_result;
+    mcf_ota_result_e op_ota_result;
+    kal_bool nvram_reault;
+} ota_result_t;
+
+
+typedef enum {
+    IDI_RFC822_ADDR = 0,
+    IDI_RFC822_ADDR_MAC,
+    IDI_RFC822_ADDR_MAC_EAP_NO_MAC,
+} wo_idi_format_t;
+
+typedef enum {
+    IDR_FQDN = 0,
+    IDR_KEY_ID,
+} wo_idr_format_t;
+
+typedef enum {
+    AUTH_EAP = 0,
+    AUTH_PSK,
+    AUTH_PUBKEY,
+} wo_auth_t;
+
+typedef enum {
+    EAP_AKA = 0,
+    EAP_SIM,
+    EAP_AKAP,
+} wo_eap_auth_t;
+
+typedef enum {
+    DNS_ADDR_V4 = 0,
+    DNS_ADDR_V6,
+    DNS_ADDR_V4V6,
+    DNS_ADDR_V6V4,
+} wo_dns_addr_type_t;
+
+typedef enum {
+    EMERG_EPDG_SELECT_NONE = 0,
+    EMERG_EPDG_SELECT,
+    EMERG_EPDG_SELECT_WITH_VISITED,
+} wo_emerg_epdg_select_t;
+
+typedef enum {
+    TRY_ALL_EPDG_IP = 0,
+    TRY_ONE_EPDG_IP,
+} wo_try_epdg_policy_t;
+
+typedef enum {
+    IMEI_BCD = 0,
+    IMEI_STRING,
+} wo_imei_format_t;
+
+typedef enum {
+    DEV_ID_IMEI = 0,
+    DEV_ID_IMEISV,
+} wo_device_identity_type_t;
+
+/**********************************/
+
+
+kal_bool n3cf_cfg_reset_default(n3cf_cust_cfg_t* cfg);
+void n3cf_cust_init(kal_uint32 op_id, protocol_id_enum ps_id, kal_char *sim_mcc, kal_char *sim_mnc, n3cf_cust_cfg_t* cfg);
+kal_bool n3cf_read_nvram(n3cf_cust_cfg_t* cfg, protocol_id_enum ps_id);
+
+
+#endif // __CUSTOM_N3CF_CONFIG_H__
diff --git a/mcu/custom/protocol/common/ps/custom_nras_config.c b/mcu/custom/protocol/common/ps/custom_nras_config.c
new file mode 100644
index 0000000..40b2213
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_nras_config.c
@@ -0,0 +1,366 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_nras_config.c
+ *
+ * Project:
+ * --------
+ *   MONZA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the NRAS configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#include "custom_nras_config.h"
+
+/* Feature: Background Search
+   [parameter setting] 5G Background Search interval interval:
+    > Any modification for these value should according to the defined range.
+    > Otherwise,MD will use the default value instead of setting value.
+    > Please noted that the maximum value should greater or equal to the initial value.
+    > NOTE: You may set the delta value to ZERO for fix interval.
+*/  
+kal_uint8 nr_bgsrch_intv_para[]={  5,   /* Initial value(minutes),range:(2..240),default value:5*/
+                                  200,  /* Maximum value(minutes),range:(2..240),default value:200*/
+                                   25,  /* Delta value(minutes),  range:(0..50)  ,default value:25*/
+                                   15,  /* Initial Sniffer interval(x times 640ms),  range:(5..50)  ,default value:15*/
+                                   1,   /* Sniffer interval Step size (x times 640ms),  range:(0..50)  ,default value:1 */
+                                   10,  /* Delay next Sniffer procedure (Seconds), range:(3..60)  ,default value: 10*/
+                                   1,   /* Delay next Sniffer procedure Step size (Seconds), range:(0..60)  ,default value: 1 */   
+                                  };
+
+/*******************************************************************************
+ * Table to set PLMN for NR band support spoofing feature
+ ******************************************************************************/
+const custom_nras_plmn_id_struct custom_band_support_spoofing_plmn_list[] =
+{ /* mcc1,mcc2,mcc3,mnc1,mnc2,mnc3 */
+    {   4,   5,   4,   0,   6, 0xf}, /* SmarTone HK */
+    {   4,   5,   4,   1,   5, 0xf}, /* SmarTone HK */
+    {   4,   5,   4,   1,   7, 0xf}, /* SmarTone HK */
+    {   4,   5,   5,   0,   0, 0xf}, /* SmarTone Macao */
+    {   4,   5,   5,   0,   6, 0xf}, /* SmarTone Macao */
+
+    {   4,   6,   6,   0,   1, 0xf}, /* FET, Taiwan */
+    {   4,   6,   6,   0,   2, 0xf}, /* FET, Taiwan */
+    {   4,   6,   6,   0,   3, 0xf}, /* FET, Taiwan */
+    {   4,   6,   6,   0,   6, 0xf}, /* FET, Taiwan */
+    {   4,   6,   6,   0,   7, 0xf}, /* FET, Taiwan */
+    {   4,   6,   6,   8,   8, 0xf}, /* FET, Taiwan */
+
+    {   2,   6,   0,   0,   1, 0xf}  /* Plus, Poland */
+};
+
+const kal_uint32 custom_band_support_spoofing_plmn_num = sizeof(custom_band_support_spoofing_plmn_list)/sizeof(custom_nras_plmn_id_struct);
+
+/*****************************************************************************
+* FUNCTION
+*   nras_custom_get_bgsrch_intv_para
+* DESCRIPTION
+*   The function gives 5G background search interval parameters.
+*
+* PARAMETERS
+*  The output value pointers
+* RETURNS
+*  void
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+void nras_custom_get_bgsrch_intv_para(kal_uint8 *a_intv_init_ptr,
+                                      kal_uint8 *a_intv_max_ptr,
+                                      kal_uint8 *a_intv_delta_ptr, 
+                                      kal_uint8 *a_sniff_interval_ptr, 
+                                      kal_uint8 *a_sniff_interval_delta_size_ptr, 
+                                      kal_uint8 *a_delay_next_sniff_procedure_ptr,
+                                      kal_uint8 *a_delay_next_sniff_procedure_delta_ptr )
+{
+    if (a_intv_init_ptr)
+    {
+        *a_intv_init_ptr  = nr_bgsrch_intv_para[0];
+    }
+    if (a_intv_max_ptr)
+    {
+        *a_intv_max_ptr   = nr_bgsrch_intv_para[1];
+    }
+    if (a_intv_delta_ptr)
+    {
+        *a_intv_delta_ptr = nr_bgsrch_intv_para[2];
+    }
+    if (a_sniff_interval_ptr)
+    {
+        *a_sniff_interval_ptr = nr_bgsrch_intv_para[3];
+    }
+    if (a_sniff_interval_delta_size_ptr)
+    {
+        *a_sniff_interval_delta_size_ptr = nr_bgsrch_intv_para[4];
+    }
+    if (a_delay_next_sniff_procedure_ptr)
+    {
+        *a_delay_next_sniff_procedure_ptr = nr_bgsrch_intv_para[5];
+    }
+    if (a_delay_next_sniff_procedure_delta_ptr)
+    {
+        *a_delay_next_sniff_procedure_delta_ptr = nr_bgsrch_intv_para[6];
+    }
+}  
+
+/* Feature: Background Search END */
+
+/* Feature: Background Search ping-pong custom threshold */
+#define CUSTOM_BGSRCH_PING_PONG_MIN_RSRP -424 /* the unit is QdB, the value should < 0 */
+#define CUSTOM_BGSRCH_PING_PONG_MIN_RSRQ 0 /* the unit is QdB, the value should < 0 */
+
+/*****************************************************************************
+* FUNCTION
+*   nras_custom_get_bgsrch_ping_pong_min_rsrp
+* DESCRIPTION
+*   The function can get background search ping-pong custom min-RSRP threshold
+* RETURNS
+*   kal_int16
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_int16 nras_custom_get_bgsrch_ping_pong_min_rsrp()
+{
+    return (kal_int16)CUSTOM_BGSRCH_PING_PONG_MIN_RSRP;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   nras_custom_get_bgsrch_ping_pong_min_rsrq
+* DESCRIPTION
+*   The function can get background search ping-pong custom min-RSRQ threshold
+* RETURNS
+*  kal_int16
+* GLOBALS AFFECTED
+* None
+*****************************************************************************/
+kal_int16 nras_custom_get_bgsrch_ping_pong_min_rsrq()
+{
+return (kal_int16)CUSTOM_BGSRCH_PING_PONG_MIN_RSRQ;
+}
+
+/* Feature: Background Search ping-pong custom threshold end */
+
+/* Feature: IRAT ping-poing custom threshold
+   [parameter setting] mininum RSRP for S-crit
+*/
+kal_bool nras_custom_irtonr_ping_pong_enh_enable = KAL_TRUE;
+#define CUSTOM_IRTONR_PING_PONG_ENF_MIN_RSRP    -460  /* the unit is QdB */
+
+/*****************************************************************************
+* FUNCTION
+*   nras_custom_irtonr_ping_pong_enh_enable
+* DESCRIPTION
+*   The function is check whether will use customize RSRP value for IR to NR 
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool nras_custom_get_irtonr_ping_pong_enh_enable()
+{
+    return nras_custom_irtonr_ping_pong_enh_enable;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   nras_custom_irtonr_ping_pong_enh_min_rsrp
+* DESCRIPTION
+*   The function can be set for IR to NR cell min-RSRP camping criteria
+* RETURNS
+*  kal_int16
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_int16 nras_custom_get_irtonr_ping_pong_enh_min_rsrp()
+{
+    return (kal_int16)CUSTOM_IRTONR_PING_PONG_ENF_MIN_RSRP;
+}  
+
+/* Feature: Elevator Mode END */
+
+/*******************************************************************************
+ * Allowed to customize NRAS partial supported band frequency by plmn
+ *
+ *       PLMN      band   number of frequency_range 1st DL min frequency (MHz)   1st DL max frequency (MHz)   1st UL min frequency (MHz)    1st UL max frequency (MHz)    2nd DL min frequency (MHz)   2nd DL max frequency (MHz)   2nd UL min frequency (MHz)    2nd UL max frequency (MHz), ... etc
+ * ex: {"00215F", {77,    {1,                       {3790,                          3980,                       0,                           0}                      ,     {0,                          0,                             0,                                0} ,                {...}}}},
+ *
+ * 1. PLMN can set mcc only or full plmn
+ * 2. if set min/max frequency to zero, it means no limited
+ ******************************************************************************/
+const nras_custom_partial_band_info_config CUSTOM_NRAS_PARTIAL_BAND_INFO_TBL[] = 
+{
+     /*PLMN, Band, number of frequency_range, (multiple){DL min frequency (MHz), DL max frequency (MHz), UL min frequency (MHz), UL max frequency (MHz)}*/
+#ifdef UNIT_TEST
+    {"00215F", {77, {1, {{3790, 3980,3800,3900}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    {"00216F", {80, {1, {{0, 0,1720,1760}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    {"00300F", {1,  {1, {{2140, 2160,0,0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    {"00217F", {78, {5, {{3790, 3980,3800,3900}, {0, 0,1720,1760}, {2140, 2160,0,0}, {3700, 3980, 0, 0}, {0, 0, 3800,3900}}}}},
+#endif
+
+    {"310FFF", {77, {2, {{3700, 3980, 0, 0}, {3450, 3550, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},  //FCC requirement
+    {"310FFF", {78, {1, {{3700, 3980, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    {"311FFF", {77, {2, {{3700, 3980, 0, 0}, {3450, 3550, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    {"311FFF", {78, {1, {{3700, 3980, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    {"312FFF", {77, {2, {{3700, 3980, 0, 0}, {3450, 3550, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    {"312FFF", {78, {1, {{3700, 3980, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    {"313FFF", {77, {2, {{3700, 3980, 0, 0}, {3450, 3550, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    {"313FFF", {78, {1, {{3700, 3980, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    {"314FFF", {77, {2, {{3700, 3980, 0, 0}, {3450, 3550, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    {"314FFF", {78, {1, {{3700, 3980, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    {"315FFF", {77, {2, {{3700, 3980, 0, 0}, {3450, 3550, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    {"315FFF", {78, {1, {{3700, 3980, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    {"316FFF", {77, {2, {{3700, 3980, 0, 0}, {3450, 3550, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    {"316FFF", {78, {1, {{3700, 3980, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    {"330FFF", {77, {2, {{3700, 3980, 0, 0}, {3450, 3550, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}}, 
+    {"330FFF", {78, {1, {{3700, 3980, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    
+    {"302FFF", {77, {2, {{3300, 3650, 0, 0}, {3700, 4200, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}}, //Canada RSS-197 requirement
+    {"302FFF", {78, {2, {{3300, 3650, 0, 0}, {3700, 3800, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}},
+    
+    {"FFFFFF", {255,{1, {{0,0,0,0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}}}   // END (don't touch and put your new entry above this line)
+};
+
+
+const kal_uint32 CUSTOM_NRAS_PARTIAL_BAND_INFO_NUM = sizeof(CUSTOM_NRAS_PARTIAL_BAND_INFO_TBL)/sizeof(nras_custom_partial_band_info_config);
+
+
+/* Feature: LTE to NR IRAT redirection failure criteria for N1 mode disabling
+ *  [parameter setting] 
+ *     1. 4g5_redir_failure_monitor_window
+ *     2. 4g5_redir_failure_threshold:
+ *   When NRRC detects LTE to NR redirection failure due to forbidden TA list for [4g5_redir_failure_threshold] times 
+ *   in [4g5_redir_failure_monitor_window] seconds, NRRC will notify NAS layer.
+ */
+ 
+#define NRAS_CUSTOM_4G5_REDIR_FAILURE_MONITOR_WINDOW 120  /* the unit is seconds */
+#define NRAS_CUSTOM_4G5_REDIR_FAILURE_THRESHOLD 4  /* threshold for failure count */
+
+kal_uint32  nras_custom_4g5_redir_fail_timestamp[NRAS_CUSTOM_4G5_REDIR_FAILURE_THRESHOLD]; /* to record the timestamp for 4g5 REDIR failure */
+
+/*****************************************************************************
+* FUNCTION
+*   nras_custom_4g5_redir_fail_timestamp_context_get
+* DESCRIPTION
+*   The function is used to get the nras_custom_4g5_redir_fail_timestamp context for further handling
+* RETURNS
+*   The correspoding context to caller
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint32* nras_custom_4g5_redir_fail_timestamp_context_get(void)
+{
+    return nras_custom_4g5_redir_fail_timestamp;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   nras_custom_4g5_redir_fail_monitor_window_get
+* DESCRIPTION
+*   The function is used to get the value of NRAS_CUSTOM_4G5_REDIR_FAILURE_MONITOR_WINDOW
+* RETURNS
+*   The value of NRAS_CUSTOM_4G5_REDIR_FAILURE_MONITOR_WINDOW
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint16 nras_custom_4g5_redir_fail_monitor_window_get(void)
+{
+    return (kal_uint16)NRAS_CUSTOM_4G5_REDIR_FAILURE_MONITOR_WINDOW;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   nras_custom_4g5_redir_fail_threshold_get
+* DESCRIPTION
+*   The function is used to get the value of NRAS_CUSTOM_4G5_REDIR_FAILURE_THRESHOLD
+* RETURNS
+*   The value of NRAS_CUSTOM_4G5_REDIR_FAILURE_THRESHOLD
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint16 nras_custom_4g5_redir_fail_threshold_get(void)
+{
+    return (kal_uint16)NRAS_CUSTOM_4G5_REDIR_FAILURE_THRESHOLD;
+}
diff --git a/mcu/custom/protocol/common/ps/custom_nras_config.h b/mcu/custom/protocol/common/ps/custom_nras_config.h
new file mode 100644
index 0000000..caa6edb
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_nras_config.h
@@ -0,0 +1,175 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_nras_config.c
+ *
+ * Project:
+ * --------
+ *   MONZA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the NRAS configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifndef _CUSTOM_NRAS_CONFIG_H
+#define _CUSTOM_NRAS_CONFIG_H
+
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "global_type.h"
+
+typedef struct
+{
+	kal_uint8 mcc1;
+	kal_uint8 mcc2;
+	kal_uint8 mcc3;
+	kal_uint8 mnc1;
+	kal_uint8 mnc2;
+	kal_uint8 mnc3;
+} custom_nras_plmn_id_struct;
+
+extern const custom_nras_plmn_id_struct custom_band_support_spoofing_plmn_list[];
+extern const kal_uint32 custom_band_support_spoofing_plmn_num;
+
+
+/*Define the end of all PLMN config lists in NRAS custom file*/
+#define MRS_NRAS_CUSTOM_PLMN_CFG_END "FFFFFF"
+
+/*Define the total frequency range number for a partial band*/
+#define MRS_NRAS_MAX_NR_PARTIAL_RANGES 5
+
+/*NRAS partial band information(frequency) setting*/
+typedef struct
+{
+    kal_uint32  dl_phy_freq_min;  /*MHz*/
+    kal_uint32  dl_phy_freq_max;  /*MHz*/
+    kal_uint32  ul_phy_freq_min;  /*MHz*/
+    kal_uint32  ul_phy_freq_max;  /*MHz*/
+}mrs_nras_partial_freq_range_struct;
+
+/*NRAS partial band information(frequency list) setting*/
+typedef struct
+{
+    kal_uint8 range_count;
+    mrs_nras_partial_freq_range_struct range_list[MRS_NRAS_MAX_NR_PARTIAL_RANGES];
+}mrs_nras_partial_freq_range_list_struct;
+
+/*NRAS partial band information setting*/
+typedef struct
+{
+    kal_uint16  band;
+    mrs_nras_partial_freq_range_list_struct freq_range_list;
+}nras_partial_band_list_struct;
+
+typedef struct
+{
+    kal_char  *plmnId;
+    nras_partial_band_list_struct nras_partial_band_info;
+}nras_custom_partial_band_info_config;
+extern const nras_custom_partial_band_info_config CUSTOM_NRAS_PARTIAL_BAND_INFO_TBL[];
+extern const kal_uint32 CUSTOM_NRAS_PARTIAL_BAND_INFO_NUM;
+
+
+/*************************************************************************
+* Function
+*************************************************************************/
+extern void nras_custom_get_bgsrch_intv_para(kal_uint8 *a_intv_init_ptr,
+                                     kal_uint8 *a_intv_max_ptr,
+                                     kal_uint8 *a_intv_delta_ptr, 
+                                     kal_uint8 *a_sniff_interval_ptr, 
+                                     kal_uint8 *a_sniff_interval_delta_ptr, 
+                                     kal_uint8 *a_delay_next_sniff_procedure_ptr,
+                                     kal_uint8 *a_delay_next_sniff_procedure_delta_ptr
+                                     );
+extern kal_int16 nras_custom_get_bgsrch_ping_pong_min_rsrp();
+extern kal_int16 nras_custom_get_bgsrch_ping_pong_min_rsrq();
+extern kal_bool nras_custom_get_irtonr_ping_pong_enh_enable();        
+extern kal_int16 nras_custom_get_irtonr_ping_pong_enh_min_rsrp();
+
+extern kal_uint32* nras_custom_4g5_redir_fail_timestamp_context_get(void);
+extern kal_uint16 nras_custom_4g5_redir_fail_monitor_window_get(void);
+extern kal_uint16 nras_custom_4g5_redir_fail_threshold_get(void);
+
+#endif /* _CUSTOM_NRAS_CONFIG_H */
diff --git a/mcu/custom/protocol/common/ps/custom_nvram_extra.c b/mcu/custom/protocol/common/ps/custom_nvram_extra.c
new file mode 100644
index 0000000..6c2ef22
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_nvram_extra.c
@@ -0,0 +1,17076 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * custom_nvram_extra.c
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *    This file is the implementation of the methods to manuplate the file object defined
+ *    in NVRAM data items.
+ *
+ * Author:
+ * -------
+ * -------
+ ****************************************************************************/
+
+/*****************************************************************************
+* Include
+*****************************************************************************/
+#if !defined(__MAUI_BASIC__)
+
+#include "custom_nvram_extra.h"
+#include "custom_nvram_sec.h"
+#include "customer_nvram_def.h"
+//#include "common_nvram_editor_data_item.h"
+#include "kal_general_types.h"
+//#include "kal_internal_api.h"
+#include "kal_public_api.h"
+//#include "nvram_editor_data_item.h"
+#include "nvram_data_items.h"
+#include "kal_trace.h"
+#include "sim_public_enum.h"
+#include "global_def.h"
+#include "ps_public_utility.h"
+#include "gmss_public.h" //for gmss_is_tdscdma_mode_activated()
+#include "sim_ps_struct.h"
+#include "sim_ps_enum.h"
+#include "cust_chl_interface.h"
+#include "nvram_interface.h"
+
+#include "custom_sml_trc.h"
+
+#if defined(__SAT_ADDITIONAL_LOCK__) || defined(__CMCC_V4__) || defined(__YUENAN_V4__)
+#include "che_api.h"
+
+#ifndef SIM_NOT_PRESENT
+#include "sim_trc.h"
+#endif
+#endif
+
+
+#ifndef L4_NOT_PRESENT
+#include "l4c_utility.h"
+#endif
+
+#include "rmmi_common_enum.h"
+#include "custom_sml_sec_verify.h"
+#include "che_ossl_api.h"
+
+#include "sml_public_def.h"
+#include "custom_sml.h"
+#include "smu_common_enums.h"
+#include "custom_l4_utility.h"
+
+/*****************************************************************************
+* Define of SMU
+*****************************************************************************/
+/*
+ *   BEGIN:PH add for smu_security_info_struct (NVRAM_EF_MS_SECURITY_LID)
+ * typedef struct
+ * {
+ *     kal_uint8                reg_ps_key[NVRAM_EDITOR_NUM_OF_BYTE_KEY];
+ *     kal_uint8                security_indication;
+ *     kal_uint8                auto_lock_item;
+ *     kal_uint8                np_code[NVRAM_EDITOR_NUM_OF_BYTE_NP * NVRAM_EDITOR_NUM_NP];
+ *     kal_uint8                np_key[NVRAM_EDITOR_NUM_OF_BYTE_KEY];
+ *     kal_uint8                nsp_code[NVRAM_EDITOR_NUM_OF_BYTE_NSP * NVRAM_EDITOR_NUM_NSP];
+ *     kal_uint8                nsp_key[NVRAM_EDITOR_NUM_OF_BYTE_KEY];
+ *     kal_uint8                np_of_sp[NVRAM_EDITOR_NUM_OF_BYTE_NP];
+ *     kal_uint8                np_of_cp[NVRAM_EDITOR_NUM_OF_BYTE_NP];
+ *     kal_uint8                gid1[NVRAM_EDITOR_NUM_GID];
+ *     kal_uint8                gid2[NVRAM_EDITOR_NUM_GID];
+ *     kal_uint8                sp_key[NVRAM_EDITOR_NUM_OF_BYTE_KEY];
+ *     kal_uint8                cp_key[NVRAM_EDITOR_NUM_OF_BYTE_KEY];
+ *     kal_uint8                imsi_code[NVRAM_EDITOR_NUM_OF_BYTE_IMSI];
+ *     kal_uint8                imsi_key[NVRAM_EDITOR_NUM_OF_BYTE_KEY];
+ *     kal_uint8                phone_key[NVRAM_EDITOR_NUM_OF_BYTE_KEY];
+ *     kal_uint8                last_imsi[NVRAM_EDITOR_NUM_OF_BYTE_IMSI];
+ *     kal_uint8                pin1[NVRAM_EDITOR_NUM_PIN1];
+ *     kal_uint8                pin1_valid;
+ *     kal_uint8                phone_lock_verified;
+ *  }smu_security_info_struct;
+ *
+ */
+
+/* Load a new data object */
+static kal_bool smu_load(void *, kal_uint8);   /* pobjFromlid */
+/* Update a the data object */
+static kal_bool smu_update(void *, kal_uint8); /* pobjTolid */
+/* Release the data object */
+static kal_bool smu_destory(kal_uint8);
+/* Query the value of the item in kal_uint8 */
+static kal_uint8 smu_query_u8(smu_item_enum, kal_uint8);    /* eItem */
+/* Query the value of the item in kal_uint8[] */
+static void smu_query_a(
+                /* eItem */ smu_item_enum,
+                /* pstrTo */ kal_uint8 *,
+                /* chlen */ kal_uint8, kal_uint8);
+/* Assign the value of the item in kal_uint8 */
+static void smu_assign_u8(
+                /* eItem */ smu_item_enum,
+                /* chValue */ kal_uint8, kal_uint8);
+static void smu_assign_a(
+                /* eItem */ smu_item_enum,
+                /* pstrValue */ kal_uint8 *,
+                /* chlen */ kal_uint8, kal_uint8);
+/* Compare the string with the data item */
+static kal_bool smu_match(
+                    /* eItem */ smu_item_enum,
+                    /* pstrValue */ kal_uint8 *,
+                    /* chlen */ kal_uint8, kal_uint8);
+
+static kal_bool smu_gblob_load(void *);   /* pobjFromlid */
+static kal_bool smu_gblob_update(void *); /* pobjTolid */
+static kal_uint8 smu_gblob_query_u8(smu_gblob_item_enum);   /* eItem */
+static void smu_gblob_query_a(
+                /* eItem */ smu_gblob_item_enum,
+                /* pstrTo */ kal_uint8 *,
+                /* chlen */ kal_uint8);
+static void smu_gblob_assign_u8(
+                /* eItem */ smu_gblob_item_enum,
+                /* chValue */ kal_uint8);
+static void smu_gblob_assign_a(
+                /* eItem */ smu_gblob_item_enum,
+                /* pstrValue */ kal_uint8 *,
+                /* chlen */ kal_uint8);
+static kal_bool smu_gblob_match(
+                    /* eItem */ smu_gblob_item_enum,
+                    /* pstrValue */ kal_uint8 *,
+                    /* chlen */ kal_uint8);
+
+sml_input_format_of_catkey_for_algo_enum custom_sml_input_format_of_catkey_for_algo(kal_uint8 algo);
+
+extern kal_bool custom_smu_is_write_protect2(nvram_lid_enum file_idx);
+extern void smu_nvram_write(nvram_lid_enum file_idx, kal_uint8 access_id, kal_bool is_write_protect2);
+kal_uint32 sml_GetDefaultRetryCount(sml_cat_enum cat, kal_uint32 max_retry_count);
+extern void srand(kal_uint32 seed);
+extern int  rand(void);
+
+
+#ifndef NVRAM_EF_SML_TMO_LID
+#define NVRAM_EF_SML_TMO_LID (NVRAM_EF_SIM_LOCK_LID)
+#endif /* NVRAM_EF_SML_TMO_LID */
+
+#ifndef NVRAM_EF_SML_ATT_LID
+#define NVRAM_EF_SML_ATT_LID (NVRAM_EF_L4_ATT_SIM_LOCK_LID)
+#endif /* NVRAM_EF_SML_ATT_LID */
+
+
+ typedef sml_category_meta_s_struct SML_CAT_META_STRUCT;
+ typedef sml_control_key_s_struct SML_CTRL_KEY_STRUCT;
+ #ifdef __SML_PUK__
+ typedef sml_puk_key_s_struct SML_PUK_KEY_STRUCT;
+ #endif
+ typedef sml_context_s_struct SML_CONTEXT_STRUCT;
+
+ /*****************************************************************************
+* Typedef of SMU
+*****************************************************************************/
+
+/*****************************************************************************
+* Local Variable of SMU
+*****************************************************************************/
+static nvram_ef_ms_security_struct nvram_ef_ms_security_obj_g[MAX_SIM_NUM];
+
+static nvram_ef_gblob_data_struct nvram_ef_gblob_data_obj_g;
+
+/*****************************************************************************
+* Local Variable of SMU object
+*****************************************************************************/
+static smu_security_info_struct smu_security_info_obj[MAX_SIM_NUM];
+
+static sml_gblob_s_context_struct sml_gblob_s_context_obj;
+
+/*****************************************************************************
+* Global Variable of SMU
+*****************************************************************************/
+
+nvram_ef_ms_security_struct *pSmuSecurityInfog = &nvram_ef_ms_security_obj_g[0];
+
+nvram_ef_gblob_data_struct  *pGblobData = &nvram_ef_gblob_data_obj_g;
+
+/*****************************************************************************
+* Global Function of SMU
+*****************************************************************************/
+void smu_init_ms_security_obj(kal_uint8 source)
+{
+    nvram_ef_ms_security_struct ms_security_obj = {
+        NULL,
+        smu_load,
+        smu_update,
+        smu_destory,
+        smu_query_u8,
+        smu_query_a,
+        smu_assign_u8,
+        smu_assign_a,
+        smu_match
+    };
+
+    smu_destory(source);
+    kal_mem_cpy(&nvram_ef_ms_security_obj_g[source], &ms_security_obj, sizeof(nvram_ef_ms_security_struct));
+}
+
+void sml_custom_context_selection(kal_uint8 sim_interface)
+{
+    pSmuSecurityInfog = &nvram_ef_ms_security_obj_g[sim_interface];
+}
+
+nvram_ef_ms_security_struct* smu_get_ms_security_ptr(kal_uint8 ps_id)
+{
+    return &(nvram_ef_ms_security_obj_g[ps_id]);
+}
+
+void smu_init_gblob_data_obj()
+{
+    nvram_ef_gblob_data_struct gblob_data_obj = {
+        NULL,
+        smu_gblob_load,
+        smu_gblob_update,
+        smu_gblob_query_u8,
+        smu_gblob_query_a,
+        smu_gblob_assign_u8,
+        smu_gblob_assign_a,
+        smu_gblob_match
+    };
+
+    kal_mem_cpy(&nvram_ef_gblob_data_obj_g, &gblob_data_obj, sizeof(nvram_ef_gblob_data_struct));
+}
+
+kal_bool sim_skip_terminal_profile_after_no_resp(kal_uint8 card_no_resp_count)
+{
+    /* To handle SIM card no support SAT issue */
+    // if resend terminal profile too much times. UICC still no response. skip TP.
+
+    if (card_no_resp_count >= 6)
+    {
+        // card_no_resp_count >= 6
+        // try 3 times with Rel-15 TP, 3 times with Rel-14 TP (old SIM card)
+
+        return KAL_TRUE;    // stop resend terminal profile
+    }
+
+    return KAL_FALSE;   // resend terminal profile if UICC no response
+}
+
+kal_uint8 sim_terminal_profile_length(uicc_card_type_enum card_type, kal_uint8 continuous_fails_count)
+{
+    kal_uint8 profile_len = MAX_SIM_PROFILE_LEN;
+
+    /* To support old SIM card, please use this value */
+    // profile_len = 9;
+
+    if (card_type == SIM_CARD_INSIDE)  // 2G SIM card (ICC)
+    {
+        profile_len = MAX_SIM_PROFILE_LEN;
+    }
+    else    // 3G(up) SIM card (UICC)
+    {
+        profile_len = MAX_SIM_PROFILE_LEN;
+
+        if (continuous_fails_count >= 3)
+        {
+            // error handling for SIM card doesn't support latest profile length
+            // Candidate Value:
+            //      35      Rel-14 SIM card maximum
+            profile_len = 35;
+        }
+    }
+
+
+    /* profile length check, please configure your length value above this */
+    if (profile_len > MAX_SIM_PROFILE_LEN)
+    {
+        profile_len = MAX_SIM_PROFILE_LEN;
+    }
+
+    return profile_len;
+}
+
+/*******************************************************************************
+ * FUNCTION  
+ *  custom_sat_profile_read_from_nvram
+ * DESCRIPTION
+ *  This method is to see if we should get sat profile from NVRAM or not
+ * PARAMETERS
+ *  void
+ * RETURN
+ *  KAL_TRUE: get sat profile from NVRAM
+ *  KAL_FALSE: get sat profile from hardcoded data
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+*******************************************************************************/
+kal_bool custom_sat_profile_read_from_nvram(void)
+{
+    return KAL_TRUE;
+}
+
+/* Virtual SIM File content
+   meta data (32 bytes) = FCP data length(1 byte) + FCP data (31 bytes)
+   FCP data is the response data of selecting this file.
+   Please refer to SIM spec , to check the format of response data of "SELECT" command */
+#ifdef __VSIM__
+/*35+256 = 291*/
+kal_uint8 DF_GSM_data[EF_META_SIZE+EF_DATA_SIZE] =
+{
+/* The first 32 is meta data : start*/
+0x16, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x93, 0x00,
+0x1c, 0x04, 0x00, 0x83, 0x8a, 0x83, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+/* The first 32 is meta data : end*/
+/* File content data : start*/
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+/* File content data : end*/
+};
+
+kal_uint8 EF_ICCID_data[EF_META_SIZE+EF_DATA_SIZE] =
+{
+/* The first 32 is meta data : start*/
+0x0F, 0x00, 0x00, 0x00, 0x0A, 0x2F, 0xE2, 0x04, 0x00, 0x04, 0x00, 0x44, 0x01, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+/* The first 32 is meta data : end*/
+/* File content data : start*/
+0x98, 0x88, 0x96, 0x07, 0x02, 0X05, 0x27, 0x01, 0x01, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+kal_uint8 EF_LP_data[EF_META_SIZE+EF_DATA_SIZE] =
+{
+/* The first 32 is meta data : start*/
+0x0F, 0x00, 0x00, 0x00, 0x04, 0x6F, 0x05, 0x04, 0x00, 0x01, 0x00, 0x55, 0x01, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+/* The first 32 is meta data : end*/
+/* File content data : start*/
+0x11, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+kal_uint8 EF_SST_data[EF_META_SIZE+EF_DATA_SIZE] =
+{
+/* The first 32 is meta data : start*/
+0x0F, 0x00, 0x00, 0x00, 0x0A, 0x6F, 0x38, 0x04, 0x00, 0x15, 0x00, 0x55, 0x01, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+/* The first 32 is meta data : end*/
+/* File content data : start*/
+0xFF, 0x3F, 0xFF, 0xFF, 0x00, 0x00, 0xFC, 0x33, 0x00, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+kal_uint8 EF_PHASE_data[EF_META_SIZE+EF_DATA_SIZE] =
+{
+/* The first 32 is meta data : start*/
+0x0F, 0x00, 0x00, 0x00, 0x01, 0x6F, 0xAE, 0x04, 0x00, 0x05, 0x00, 0x55, 0x01, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+/* The first 32 is meta data : end*/
+/* File content data : start*/
+0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+/*
+* Note: IMSI will store in NVRAM, the NVRAM FILE SIZE is NVRAM_VSIM_EF_DEFUALT_SIZE (128bytes)
+*/
+kal_uint8 EF_IMSI_data[EF_META_SIZE+EF_DATA_SIZE] =
+{
+/* The first 32 is meta data : start*/
+0x0F, 0x00, 0x00, 0x00, 0x09, 0x6F, 0x07, 0x04, 0x00, 0x15, 0x00, 0x15, 0x01, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+/* The first 32 is meta data : end*/
+/* File content data : start*/
+0x08, 0x09, 0x10, 0x10, 0x10, 0x32, 0x54, 0x06, 0x36, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+kal_uint8 EF_AD_data[EF_META_SIZE+EF_DATA_SIZE] =
+{
+/* The first 32 is meta data : start*/
+0x0F, 0x00, 0x00, 0x00, 0x03, 0x6F, 0xAD, 0x04, 0x00, 0x05, 0x00, 0x55, 0x01, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+/* The first 32 is meta data : end*/
+/* File content data : start*/
+0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+kal_uint8 EF_ACC_data[EF_META_SIZE+EF_DATA_SIZE] =
+{
+/* The first 32 is meta data : start*/
+0x0F, 0x00, 0x00, 0x00, 0x02, 0x6F, 0x78, 0x04, 0x00, 0x15, 0x00, 0x55, 0x01, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+/* The first 32 is meta data : end*/
+/* File content data : start*/
+0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+kal_uint8 EF_KC_data[EF_META_SIZE+EF_DATA_SIZE] =
+{
+/* The first 32 is meta data : start*/
+0x0F, 0x00, 0x00, 0x00, 0x09, 0x6F, 0x20, 0x04, 0x00, 0x11, 0x00, 0x55, 0x01, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+/* The first 32 is meta data : end*/
+/* File content data : start*/
+0xCD, 0xB4, 0x71, 0xF9, 0x09, 0x2F, 0x6C, 0x00, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+kal_uint8 EF_LOCI_data[EF_META_SIZE+EF_DATA_SIZE] =
+{
+/* The first 32 is meta data : start*/
+0x0F, 0x00, 0x00, 0x00, 0x0B, 0x6F, 0x7E, 0x04, 0x00, 0x11, 0x00, 0x15, 0x01, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+/* The first 32 is meta data : end*/
+/* File content data : start*/
+0x5B, 0x22, 0x8E, 0x1B, 0x64, 0xF6, 0x79, 0x2C, 0x27, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+kal_uint8 EF_HPPLMN_data[EF_META_SIZE+EF_DATA_SIZE] =
+{
+/* The first 32 is meta data : start*/
+0x0F, 0x00, 0x00, 0x00, 0x01, 0x6F, 0x31, 0x04, 0x00, 0x15, 0x00, 0x55, 0x01, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+/* The first 32 is meta data : end*/
+/* File content data : start*/
+0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+/*MoDIS doesn't have this file!*/
+kal_uint8 EF_BCCH_data[EF_META_SIZE+EF_DATA_SIZE] =
+{
+/* The first 32 is meta data : start*/
+0x0F, 0x00, 0x00, 0x00, 0x10, 0x6F, 0x74, 0x04, 0x00, 0x11, 0x00, 0x55, 0x01, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+/* The first 32 is meta data : end*/
+/* File content data : start*/
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+kal_uint8 EF_FPLMN_data[EF_META_SIZE+EF_DATA_SIZE] =
+{
+/* The first 32 is meta data : start*/
+0x0F, 0x00, 0x00, 0x00, 0x0C, 0x6F, 0x7B, 0x04, 0x00, 0x11, 0x00, 0x55, 0x01, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+/* The first 32 is meta data : end*/
+/* File content data : start*/
+0x64, 0xF6, 0x10, 0x64, 0xF6, 0x29, 0x64, 0xF6, 0x88, 0x44, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+kal_uint8 EF_AUTH_data[258] =
+{
+0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF
+};
+
+#if defined(__VSIM__) && defined(__TC01__) && defined(__FEATURE_TC01_SIMOFF_EXTENTION__) && defined(__MDVSIM__)
+kal_uint8 EF_SPN_data[EF_META_SIZE+EF_DATA_SIZE] =
+{
+    /* The first 32 is meta data : start*/
+    0x0F, 0x00, 0x00, 0x00, 0x11, 0x6F, 0x46, 0x04, 0x00, 0x04, 0xF0, 0x44, 0x01, 0x02, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    /* The first 32 is meta data : end*/
+    /* File content data : start*/
+    0x01, 0x56, 0x53, 0x49, 0x4D, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74, 0x53, 0x50, 0x4E, 0x2E,
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+    /* File content data : end*/
+};
+kal_uint8 EF_GID1_data[EF_META_SIZE+EF_DATA_SIZE] =
+{
+    /* The first 32 is meta data : start*/
+    0x0F, 0x00, 0x00, 0x00, 0x10, 0x6F, 0x3E, 0x04, 0x00, 0x14, 0xF0, 0x44, 0x01, 0x02, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    /* The first 32 is meta data : end*/
+    /* File content data : start*/
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+    /* File content data : end*/
+};
+#endif
+
+#ifndef __MDVSIM__
+const kal_uint8 ADF_USIM_data[EF_U_META_SIZE + EF_U_DATA_SIZE] =
+{
+/* the first 64 bytes is meta data:start*/
+0x3F, 0x62, 0x42, 0x82, 0x02, 0x78, 0x21, 0x84, 0x10, 0xA0, 0x00, 0x00, 0x00, 0x87, 0x10, 0x02,
+0xFF, 0x33, 0xFF, 0xFF, 0x89, 0x01, 0x01, 0x01, 0x00, 0xA5, 0x11, 0x80, 0x01, 0x71, 0x81, 0x03,
+0x01, 0x0A, 0x32, 0x82, 0x01, 0x0A, 0x83, 0x04, 0x00, 0x00, 0xF2, 0xD5, 0x8A, 0x01, 0x05, 0x8B,
+0x03, 0x2F, 0x06, 0x02, 0xC6, 0x09, 0x90, 0x01, 0x40, 0x83, 0x01, 0x01, 0x83, 0x01, 0x81, 0x00,
+
+/* File content data: start */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+};
+
+const kal_uint8 EF_U_ELP_data[EF_U_META_SIZE + EF_U_DATA_SIZE] =
+{
+/* the first 64 byes is meta data: start */
+0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x2F, 0x05, 0xA5, 0x06, 0x80, 0x01, 0x71,
+0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x06, 0x81,
+0x02, 0x00, 0x14, 0x88, 0x01, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+/* File content data: start */
+0x98, 0x88, 0x96, 0x07, 0x02, 0X05, 0x27, 0x01, 0x01, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data:end */
+};
+
+const kal_uint8 EF_U_ICCID_data[EF_U_META_SIZE + EF_U_DATA_SIZE] =
+{
+/* the first 64 bytes is meta data:start */
+0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x2F, 0xE2, 0xA5, 0x06, 0x80, 0x01, 0x71,
+0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0A, 0x81,
+0x02, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+/* File content data:start */
+0x98, 0x88, 0x96, 0x02, 0x55, 0X06, 0x00, 0x48, 0x53, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data:end*/
+};
+
+const kal_uint8 EF_U_PSLOCI_data[EF_U_META_SIZE + EF_U_DATA_SIZE] =
+{
+/* the first 64 bytes is meta data:start */
+0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x73, 0xA5, 0x06, 0x80, 0x01, 0x71,
+0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0E, 0x81,
+0x02, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+/* File content data:start */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF1, 0x10, 0xFF, 0xFE, 0xFF, 0x02, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data:end*/
+};
+
+const kal_uint8 EF_U_ACC_data[EF_U_META_SIZE + EF_U_DATA_SIZE] =
+{
+/* the first 64 bytes is meta data:start */
+0x1E, 0x62, 0x1C, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0x78, 0xA5, 0x03, 0x80, 0x01, 0x71,
+0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x07, 0x80, 0x02, 0x00, 0x02, 0x88, 0x01, 0x30, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+/* File content data: start */
+0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data: end*/
+};
+
+const kal_uint8 EF_U_LOCI_data[EF_U_META_SIZE + EF_U_DATA_SIZE] =
+{
+/* the first 64 bytes is meta data: start */
+0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x7E, 0xA5, 0x06, 0x80, 0x01, 0x71,
+0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0B, 0x81,
+0x02, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+/* File content data: start */
+0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF1, 0x10, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data: end */
+};
+
+const kal_uint8 EF_U_AD_data[EF_U_META_SIZE + EF_U_DATA_SIZE] =
+{
+/* the first 64 bytes is meta data:start */
+0x1E, 0x62, 0x1C, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0xAD, 0xA5, 0x03, 0x80, 0x01, 0x71,
+0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x0A, 0x80, 0x02, 0x00, 0x04, 0x88, 0x01, 0x18, 0x00,
+0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+/* File content data : start*/
+0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+const kal_uint8 EF_U_IMSI_data[EF_U_META_SIZE + EF_U_DATA_SIZE] =
+{
+/* the first 64 bytes is meta data:start */
+0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x07, 0xA5, 0x06, 0x80, 0x01, 0x71,
+0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x09, 0x81,
+0x02, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+/* File content data: start */
+0x08, 0x09, 0x10, 0x10, 0x32, 0x54, 0x76, 0x98, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data: end*/
+};
+
+const kal_uint8 EF_U_HPPLMN_data[EF_U_META_SIZE + EF_U_DATA_SIZE] =
+{
+/* the first 64 bytes is meta data:start */
+0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x31, 0xA5, 0x06, 0x80, 0x01, 0x71,
+0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x01, 0x81,
+0x02, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+/*File content data:start */
+0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+const kal_uint8 EF_U_UST_data[EF_U_META_SIZE + EF_U_DATA_SIZE] =
+{
+/* the first 64 bytes is meta data:start */
+0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x38, 0xA5, 0x06, 0x80, 0x01, 0x71,
+0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0B, 0x81,
+0x02, 0x00, 0x15, 0x88, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+/* File content data : start*/
+0x2E, 0xFA, 0x9B, 0x9D, 0x67, 0xC6, 0x03, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+const kal_uint8 EF_U_EST_data[EF_U_META_SIZE + EF_U_DATA_SIZE] =
+{
+/*the first 64 bytes is meta data:start */
+0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x56, 0xA5, 0x06, 0x80, 0x01, 0x71,
+0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x02, 0x81,
+0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+/* File content data : start*/
+0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+const kal_uint8 EF_U_PLMNWACT_data[EF_U_META_SIZE + EF_U_DATA_SIZE] =
+{
+/* the first 64 bytes is meta data:start */
+0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x60, 0xA5, 0x06, 0x80, 0x01, 0x71,
+0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x05, 0x80, 0x02, 0x00, 0x0F, 0x81,
+0x02, 0x00, 0x1D, 0x88, 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+/* File content data : start*/
+0x64, 0xF6, 0x10, 0x80, 0x80, 0x64, 0xF6, 0x88, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+const kal_uint8 EF_U_OPLMNWACT_data[EF_U_META_SIZE + EF_U_DATA_SIZE] =
+{
+/* the first 64 bytes is meta data:start */
+0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x61, 0xA5, 0x06, 0x80, 0x01, 0x71,
+0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0F, 0x81,
+0x02, 0x00, 0x1D, 0x88, 0x01, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+/* File content data : start*/
+0x64, 0xF6, 0x10, 0x80, 0x80, 0x64, 0xF6, 0x88, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+const kal_uint8 EF_U_HPLMNWACT_data[EF_U_META_SIZE + EF_U_DATA_SIZE] =
+{
+/* the first 64 bytes is meta data: start */
+0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x62, 0xA5, 0x06, 0x80, 0x01, 0x71,
+0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0A, 0x81,
+0x02, 0x00, 0x18, 0x88, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+/* File content data : start*/
+0x64, 0xF6, 0x10, 0x80, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+/* File content data : end*/
+};
+
+#else
+/*
+ * File id: 7FFF
+ */
+kal_uint8 ADF_USIM_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE] =
+{
+    {
+        /* 1st: The first 96 is meta data : start*/
+        0x44, 0x62, 0x42, 0x82, 0x02, 0x78, 0x21, 0x84, 0x10, 0xA0, 0x00, 0x00, 0x00, 0x87, 0x10, 0x02,
+        0xFF, 0x33, 0xFF, 0xFF, 0x89, 0x01, 0x01, 0x01, 0x00, 0xA5, 0x11, 0x80, 0x01, 0x71, 0x81, 0x03,
+        0x01, 0x0A, 0x32, 0x82, 0x01, 0x0A, 0x83, 0x04, 0x00, 0x00, 0xF2, 0xD5, 0x8A, 0x01, 0x05, 0x8B,
+        0x03, 0x2F, 0x06, 0x02, 0xC6, 0x09, 0x90, 0x01, 0x40, 0x83, 0x01, 0x01, 0x83, 0x01, 0x81, 0x81,
+        0x04, 0x00, 0x00, 0x0E, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x44, 0x62, 0x42, 0x82, 0x02, 0x78, 0x21, 0x84, 0x10, 0xA0, 0x00, 0x00, 0x00, 0x87, 0x10, 0x02,
+        0xFF, 0x33, 0xFF, 0xFF, 0x89, 0x01, 0x01, 0x01, 0x00, 0xA5, 0x11, 0x80, 0x01, 0x71, 0x81, 0x03,
+        0x01, 0x0A, 0x32, 0x82, 0x01, 0x0A, 0x83, 0x04, 0x00, 0x00, 0xF2, 0xD5, 0x8A, 0x01, 0x05, 0x8B,
+        0x03, 0x2F, 0x06, 0x02, 0xC6, 0x09, 0x90, 0x01, 0x40, 0x83, 0x01, 0x01, 0x83, 0x01, 0x81, 0x81,
+        0x04, 0x00, 0x00, 0x0E, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x44, 0x62, 0x42, 0x82, 0x02, 0x78, 0x21, 0x84, 0x10, 0xA0, 0x00, 0x00, 0x00, 0x87, 0x10, 0x02,
+        0xFF, 0x33, 0xFF, 0xFF, 0x89, 0x01, 0x01, 0x01, 0x00, 0xA5, 0x11, 0x80, 0x01, 0x71, 0x81, 0x03,
+        0x01, 0x0A, 0x32, 0x82, 0x01, 0x0A, 0x83, 0x04, 0x00, 0x00, 0xF2, 0xD5, 0x8A, 0x01, 0x05, 0x8B,
+        0x03, 0x2F, 0x06, 0x02, 0xC6, 0x09, 0x90, 0x01, 0x40, 0x83, 0x01, 0x01, 0x83, 0x01, 0x81, 0x81,
+        0x04, 0x00, 0x00, 0x0E, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x44, 0x62, 0x42, 0x82, 0x02, 0x78, 0x21, 0x84, 0x10, 0xA0, 0x00, 0x00, 0x00, 0x87, 0x10, 0x02,
+        0xFF, 0x33, 0xFF, 0xFF, 0x89, 0x01, 0x01, 0x01, 0x00, 0xA5, 0x11, 0x80, 0x01, 0x71, 0x81, 0x03,
+        0x01, 0x0A, 0x32, 0x82, 0x01, 0x0A, 0x83, 0x04, 0x00, 0x00, 0xF2, 0xD5, 0x8A, 0x01, 0x05, 0x8B,
+        0x03, 0x2F, 0x06, 0x02, 0xC6, 0x09, 0x90, 0x01, 0x40, 0x83, 0x01, 0x01, 0x83, 0x01, 0x81, 0x81,
+        0x04, 0x00, 0x00, 0x0E, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x44, 0x62, 0x42, 0x82, 0x02, 0x78, 0x21, 0x84, 0x10, 0xA0, 0x00, 0x00, 0x00, 0x87, 0x10, 0x02,
+        0xFF, 0x33, 0xFF, 0xFF, 0x89, 0x01, 0x01, 0x01, 0x00, 0xA5, 0x11, 0x80, 0x01, 0x71, 0x81, 0x03,
+        0x01, 0x0A, 0x32, 0x82, 0x01, 0x0A, 0x83, 0x04, 0x00, 0x00, 0xF2, 0xD5, 0x8A, 0x01, 0x05, 0x8B,
+        0x03, 0x2F, 0x06, 0x02, 0xC6, 0x09, 0x90, 0x01, 0x40, 0x83, 0x01, 0x01, 0x83, 0x01, 0x81, 0x81,
+        0x04, 0x00, 0x00, 0x0E, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+
+};
+
+/*
+ * File id: 2F00
+ */
+kal_uint8 EF_U_DIR_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE] =
+{
+    {
+        /* The first 96 is meta data : start*/
+        0x28, 0x62, 0x26, 0x82, 0x05, 0x02, 0x21, 0x00, 0x14, 0x01, 0x83, 0x02, 0x2F, 0x00, 0xA5, 0x06,
+        0x80, 0x01, 0x71, 0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x01, 0x80, 0x02,
+        0x00, 0x26, 0x81, 0x02, 0x00, 0x5A, 0x88, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x61, 0x12, 0x4F, 0x10, 0xA0, 0x00, 0x00, 0x00, 0x87, 0x10, 0x02, 0xFF, 0x33, 0xFF, 0xFF, 0x89,
+        0x01, 0x01, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x28, 0x62, 0x26, 0x82, 0x05, 0x02, 0x21, 0x00, 0x14, 0x01, 0x83, 0x02, 0x2F, 0x00, 0xA5, 0x06,
+        0x80, 0x01, 0x71, 0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x01, 0x80, 0x02,
+        0x00, 0x26, 0x81, 0x02, 0x00, 0x5A, 0x88, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x61, 0x12, 0x4F, 0x10, 0xA0, 0x00, 0x00, 0x00, 0x87, 0x10, 0x02, 0xFF, 0x33, 0xFF, 0xFF, 0x89,
+        0x01, 0x01, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x28, 0x62, 0x26, 0x82, 0x05, 0x02, 0x21, 0x00, 0x14, 0x01, 0x83, 0x02, 0x2F, 0x00, 0xA5, 0x06,
+        0x80, 0x01, 0x71, 0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x01, 0x80, 0x02,
+        0x00, 0x26, 0x81, 0x02, 0x00, 0x5A, 0x88, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x61, 0x12, 0x4F, 0x10, 0xA0, 0x00, 0x00, 0x00, 0x87, 0x10, 0x02, 0xFF, 0x33, 0xFF, 0xFF, 0x89,
+        0x01, 0x01, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x28, 0x62, 0x26, 0x82, 0x05, 0x02, 0x21, 0x00, 0x14, 0x01, 0x83, 0x02, 0x2F, 0x00, 0xA5, 0x06,
+        0x80, 0x01, 0x71, 0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x01, 0x80, 0x02,
+        0x00, 0x26, 0x81, 0x02, 0x00, 0x5A, 0x88, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x61, 0x12, 0x4F, 0x10, 0xA0, 0x00, 0x00, 0x00, 0x87, 0x10, 0x02, 0xFF, 0x33, 0xFF, 0xFF, 0x89,
+        0x01, 0x01, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x28, 0x62, 0x26, 0x82, 0x05, 0x02, 0x21, 0x00, 0x14, 0x01, 0x83, 0x02, 0x2F, 0x00, 0xA5, 0x06,
+        0x80, 0x01, 0x71, 0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x01, 0x80, 0x02,
+        0x00, 0x26, 0x81, 0x02, 0x00, 0x5A, 0x88, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x61, 0x12, 0x4F, 0x10, 0xA0, 0x00, 0x00, 0x00, 0x87, 0x10, 0x02, 0xFF, 0x33, 0xFF, 0xFF, 0x89,
+        0x01, 0x01, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+
+};
+
+/*
+ * File id: 2F05
+ */
+kal_uint8 EF_U_ELP_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE] =
+{
+    {
+        /* The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x2F, 0x05, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x06, 0x81,
+        0x02, 0x00, 0x14, 0x88, 0x01, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x98, 0x88, 0x96, 0x07, 0x02, 0X05, 0x27, 0x01, 0x01, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x2F, 0x05, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x06, 0x81,
+        0x02, 0x00, 0x14, 0x88, 0x01, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x98, 0x88, 0x96, 0x07, 0x02, 0X05, 0x27, 0x01, 0x01, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x2F, 0x05, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x06, 0x81,
+        0x02, 0x00, 0x14, 0x88, 0x01, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x98, 0x88, 0x96, 0x07, 0x02, 0X05, 0x27, 0x01, 0x01, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x2F, 0x05, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x06, 0x81,
+        0x02, 0x00, 0x14, 0x88, 0x01, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x98, 0x88, 0x96, 0x07, 0x02, 0X05, 0x27, 0x01, 0x01, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x2F, 0x05, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x06, 0x81,
+        0x02, 0x00, 0x14, 0x88, 0x01, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x98, 0x88, 0x96, 0x07, 0x02, 0X05, 0x27, 0x01, 0x01, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+
+};
+
+/*
+  * File id: 2FE2
+  */
+kal_uint8 EF_U_ICCID_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE] =
+{
+    {
+        /* The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x2F, 0xE2, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0A, 0x81,
+        0x02, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x98, 0x88, 0x96, 0x02, 0x55, 0X06, 0x00, 0x48, 0x53, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x2F, 0xE2, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0A, 0x81,
+        0x02, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x98, 0x88, 0x96, 0x02, 0x55, 0X06, 0x00, 0x48, 0x53, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x2F, 0xE2, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0A, 0x81,
+        0x02, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x98, 0x88, 0x96, 0x02, 0x55, 0X06, 0x00, 0x48, 0x53, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x2F, 0xE2, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0A, 0x81,
+        0x02, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x98, 0x88, 0x96, 0x02, 0x55, 0X06, 0x00, 0x48, 0x53, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x2F, 0xE2, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0A, 0x81,
+        0x02, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x98, 0x88, 0x96, 0x02, 0x55, 0X06, 0x00, 0x48, 0x53, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+
+};
+
+/*
+  * File id: 6F73
+  */
+kal_uint8 EF_U_PSLOCI_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE] =
+{
+    {
+        /* The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x73, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0E, 0x81,
+        0x02, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xEA, 0x25, 0xF3, 0x03, 0x92, 0x75, 0xF6, 0x64, 0xF6, 0x10, 0x24, 0xC2, 0x01, 0x00, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x73, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0E, 0x81,
+        0x02, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xEA, 0x25, 0xF3, 0x03, 0x92, 0x75, 0xF6, 0x64, 0xF6, 0x10, 0x24, 0xC2, 0x01, 0x00, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x73, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0E, 0x81,
+        0x02, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xEA, 0x25, 0xF3, 0x03, 0x92, 0x75, 0xF6, 0x64, 0xF6, 0x10, 0x24, 0xC2, 0x01, 0x00, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x73, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0E, 0x81,
+        0x02, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xEA, 0x25, 0xF3, 0x03, 0x92, 0x75, 0xF6, 0x64, 0xF6, 0x10, 0x24, 0xC2, 0x01, 0x00, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x73, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0E, 0x81,
+        0x02, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xEA, 0x25, 0xF3, 0x03, 0x92, 0x75, 0xF6, 0x64, 0xF6, 0x10, 0x24, 0xC2, 0x01, 0x00, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+
+};
+
+/*
+  * File id: 6F78
+  */
+kal_uint8 EF_U_ACC_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE] =
+{
+    {
+        /* The first 96 is meta data : start*/
+        0x1E, 0x62, 0x1C, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0x78, 0xA5, 0x03, 0x80, 0x01, 0x71,
+        0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x07, 0x80, 0x02, 0x00, 0x02, 0x88, 0x01, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x1E, 0x62, 0x1C, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0x78, 0xA5, 0x03, 0x80, 0x01, 0x71,
+        0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x07, 0x80, 0x02, 0x00, 0x02, 0x88, 0x01, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x1E, 0x62, 0x1C, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0x78, 0xA5, 0x03, 0x80, 0x01, 0x71,
+        0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x07, 0x80, 0x02, 0x00, 0x02, 0x88, 0x01, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x1E, 0x62, 0x1C, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0x78, 0xA5, 0x03, 0x80, 0x01, 0x71,
+        0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x07, 0x80, 0x02, 0x00, 0x02, 0x88, 0x01, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x1E, 0x62, 0x1C, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0x78, 0xA5, 0x03, 0x80, 0x01, 0x71,
+        0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x07, 0x80, 0x02, 0x00, 0x02, 0x88, 0x01, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+
+};
+
+/*
+  * File id: 6F7E
+  */
+kal_uint8 EF_U_LOCI_data[VSIM_PROFILE_ENTRY][128] =
+{
+    {
+        /* The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x7E, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0B, 0x81,
+        0x02, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x8E, 0x00, 0x2D, 0xD4, 0x64, 0xF6, 0x10, 0x24, 0x00, 0x00, 0xC2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x7E, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0B, 0x81,
+        0x02, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x8E, 0x00, 0x2D, 0xD4, 0x64, 0xF6, 0x10, 0x24, 0x00, 0x00, 0xC2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x7E, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0B, 0x81,
+        0x02, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x8E, 0x00, 0x2D, 0xD4, 0x64, 0xF6, 0x10, 0x24, 0x00, 0x00, 0xC2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x7E, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0B, 0x81,
+        0x02, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x8E, 0x00, 0x2D, 0xD4, 0x64, 0xF6, 0x10, 0x24, 0x00, 0x00, 0xC2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x7E, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x0B, 0x81,
+        0x02, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x8E, 0x00, 0x2D, 0xD4, 0x64, 0xF6, 0x10, 0x24, 0x00, 0x00, 0xC2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+
+};
+
+/*
+  * File id: 6FAD
+  */
+kal_uint8 EF_U_AD_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE] =
+{
+    {
+        /* The first 96 is meta data : start*/
+        0x1E, 0x62, 0x1C, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0xAD, 0xA5, 0x03, 0x80, 0x01, 0x71,
+        0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x0A, 0x80, 0x02, 0x00, 0x04, 0x88, 0x01, 0x18, 0x00,
+        0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x2E, 0xFA, 0x9B, 0x9D, 0x7F, 0xC6, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x1E, 0x62, 0x1C, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0xAD, 0xA5, 0x03, 0x80, 0x01, 0x71,
+        0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x0A, 0x80, 0x02, 0x00, 0x04, 0x88, 0x01, 0x18, 0x00,
+        0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x2E, 0xFA, 0x9B, 0x9D, 0x7F, 0xC6, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x1E, 0x62, 0x1C, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0xAD, 0xA5, 0x03, 0x80, 0x01, 0x71,
+        0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x0A, 0x80, 0x02, 0x00, 0x04, 0x88, 0x01, 0x18, 0x00,
+        0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x2E, 0xFA, 0x9B, 0x9D, 0x7F, 0xC6, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x1E, 0x62, 0x1C, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0xAD, 0xA5, 0x03, 0x80, 0x01, 0x71,
+        0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x0A, 0x80, 0x02, 0x00, 0x04, 0x88, 0x01, 0x18, 0x00,
+        0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x2E, 0xFA, 0x9B, 0x9D, 0x7F, 0xC6, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x1E, 0x62, 0x1C, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0xAD, 0xA5, 0x03, 0x80, 0x01, 0x71,
+        0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x0A, 0x80, 0x02, 0x00, 0x04, 0x88, 0x01, 0x18, 0x00,
+        0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x2E, 0xFA, 0x9B, 0x9D, 0x7F, 0xC6, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+};
+
+/*
+  * File id: 6F07
+  * Note: IMSI will store in NVRAM, the NVRAM FILE SIZE is NVRAM_VSIM_EF_U_DEFUALT_SIZE (128bytes)
+  */
+kal_uint8 EF_U_IMSI_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE] =
+{
+    {
+        /* The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x07, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x09, 0x81,
+        0x02, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x08, 0x09, 0x10, 0x10, 0x10, 0x32, 0x54, 0x06, 0x36, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x07, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x09, 0x81,
+        0x02, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x08, 0x09, 0x10, 0x10, 0x10, 0x32, 0x54, 0x06, 0x36, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x07, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x09, 0x81,
+        0x02, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x08, 0x09, 0x10, 0x10, 0x10, 0x32, 0x54, 0x06, 0x36, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x07, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x09, 0x81,
+        0x02, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x08, 0x09, 0x10, 0x10, 0x10, 0x32, 0x54, 0x06, 0x36, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x07, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x09, 0x81,
+        0x02, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x08, 0x09, 0x10, 0x10, 0x10, 0x32, 0x54, 0x06, 0x36, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+};
+/*
+  * File id: 6F31
+  */
+kal_uint8 EF_U_HPPLMN_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE] =
+{
+    {
+        /* The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x31, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x01, 0x81,
+        0x02, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x31, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x01, 0x81,
+        0x02, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x31, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x01, 0x81,
+        0x02, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x31, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x01, 0x81,
+        0x02, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x31, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x01, 0x81,
+        0x02, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+
+};
+
+/*
+  * File id: 6F38
+  */
+kal_uint8 EF_U_UST_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE] =
+{
+    {
+        /* The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x38, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0B, 0x81,
+        0x02, 0x00, 0x15, 0x88, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x2E, 0xFA, 0x9B, 0x9D, 0x67, 0xC6, 0x03, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x38, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0B, 0x81,
+        0x02, 0x00, 0x15, 0x88, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x2E, 0xFA, 0x9B, 0x9D, 0x67, 0xC6, 0x03, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x38, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0B, 0x81,
+        0x02, 0x00, 0x15, 0x88, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x2E, 0xFA, 0x9B, 0x9D, 0x67, 0xC6, 0x03, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x38, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0B, 0x81,
+        0x02, 0x00, 0x15, 0x88, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x2E, 0xFA, 0x9B, 0x9D, 0x67, 0xC6, 0x03, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x38, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0B, 0x81,
+        0x02, 0x00, 0x15, 0x88, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x2E, 0xFA, 0x9B, 0x9D, 0x67, 0xC6, 0x03, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+
+};
+
+/*
+  * File id: 6F56
+  */
+kal_uint8 EF_U_EST_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE] =
+{
+    {
+        /* The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x56, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x02, 0x81,
+        0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x56, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x02, 0x81,
+        0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x56, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x02, 0x81,
+        0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x56, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x02, 0x81,
+        0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x22, 0x62, 0x20, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x56, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x2F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x02, 0x81,
+        0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+
+};
+
+/*
+  * File id: 6F60
+  */
+kal_uint8 EF_U_PLMNWACT_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE] =
+{
+    {
+        /* The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x60, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x05, 0x80, 0x02, 0x00, 0x0F, 0x81,
+        0x02, 0x00, 0x1D, 0x88, 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x64, 0xF6, 0x10, 0x80, 0x80, 0x64, 0xF6, 0x88, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x60, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x05, 0x80, 0x02, 0x00, 0x0F, 0x81,
+        0x02, 0x00, 0x1D, 0x88, 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x64, 0xF6, 0x10, 0x80, 0x80, 0x64, 0xF6, 0x88, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x60, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x05, 0x80, 0x02, 0x00, 0x0F, 0x81,
+        0x02, 0x00, 0x1D, 0x88, 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x64, 0xF6, 0x10, 0x80, 0x80, 0x64, 0xF6, 0x88, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x60, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x05, 0x80, 0x02, 0x00, 0x0F, 0x81,
+        0x02, 0x00, 0x1D, 0x88, 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x64, 0xF6, 0x10, 0x80, 0x80, 0x64, 0xF6, 0x88, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x60, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x05, 0x80, 0x02, 0x00, 0x0F, 0x81,
+        0x02, 0x00, 0x1D, 0x88, 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x64, 0xF6, 0x10, 0x80, 0x80, 0x64, 0xF6, 0x88, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+
+};
+
+/*
+  * File id: 6F61
+  */
+kal_uint8 EF_U_OPLMNWACT_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE] =
+{
+
+
+    {
+        /* The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x61, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0F, 0x81,
+        0x02, 0x00, 0x1D, 0x88, 0x01, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x64, 0xF6, 0x10, 0x80, 0x80, 0x64, 0xF6, 0x88, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x61, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0F, 0x81,
+        0x02, 0x00, 0x1D, 0x88, 0x01, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x64, 0xF6, 0x10, 0x80, 0x80, 0x64, 0xF6, 0x88, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x61, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0F, 0x81,
+        0x02, 0x00, 0x1D, 0x88, 0x01, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x64, 0xF6, 0x10, 0x80, 0x80, 0x64, 0xF6, 0x88, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x61, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0F, 0x81,
+        0x02, 0x00, 0x1D, 0x88, 0x01, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x64, 0xF6, 0x10, 0x80, 0x80, 0x64, 0xF6, 0x88, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x61, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0F, 0x81,
+        0x02, 0x00, 0x1D, 0x88, 0x01, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x64, 0xF6, 0x10, 0x80, 0x80, 0x64, 0xF6, 0x88, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+
+};
+
+/*
+  * File id: 6F62
+  */
+kal_uint8 EF_U_HPLMNWACT_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE] =
+{
+    {
+        /* The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x62, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0A, 0x81,
+        0x02, 0x00, 0x18, 0x88, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x64, 0xF6, 0x10, 0x80, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x62, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0A, 0x81,
+        0x02, 0x00, 0x18, 0x88, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x64, 0xF6, 0x10, 0x80, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x62, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0A, 0x81,
+        0x02, 0x00, 0x18, 0x88, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x64, 0xF6, 0x10, 0x80, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x62, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0A, 0x81,
+        0x02, 0x00, 0x18, 0x88, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x64, 0xF6, 0x10, 0x80, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x25, 0x62, 0x23, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x62, 0xA5, 0x06, 0x80, 0x01, 0x71,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x03, 0x80, 0x02, 0x00, 0x0A, 0x81,
+        0x02, 0x00, 0x18, 0x88, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0x64, 0xF6, 0x10, 0x80, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+
+};
+
+#if defined(__VSIM__) && defined(__TC01__) && defined(__FEATURE_TC01_SIMOFF_EXTENTION__) && defined(__MDVSIM__)
+kal_uint8 EF_U_SPN_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE] =
+{
+    {
+        /* The first 96 is meta data : start*/
+        0x24, 0x62, 0x22, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x46, 0xA5, 0x06, 0x80, 0x01, 0x31,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x0C, 0x80, 0x02, 0x00, 0x11, 0x81,
+        0x02, 0x00, 0x1F, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xFD, 0x56, 0x53, 0x49, 0x4D, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74, 0x53, 0x50, 0x4E, 0x2E,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x24, 0x62, 0x22, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x46, 0xA5, 0x06, 0x80, 0x01, 0x31,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x0C, 0x80, 0x02, 0x00, 0x11, 0x81,
+        0x02, 0x00, 0x1F, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xFD, 0x56, 0x53, 0x49, 0x4D, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74, 0x53, 0x50, 0x4E, 0x2E,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x24, 0x62, 0x22, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x46, 0xA5, 0x06, 0x80, 0x01, 0x31,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x0C, 0x80, 0x02, 0x00, 0x11, 0x81,
+        0x02, 0x00, 0x1F, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xFD, 0x56, 0x53, 0x49, 0x4D, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74, 0x53, 0x50, 0x4E, 0x2E,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x24, 0x62, 0x22, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x46, 0xA5, 0x06, 0x80, 0x01, 0x31,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x0C, 0x80, 0x02, 0x00, 0x11, 0x81,
+        0x02, 0x00, 0x1F, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xFD, 0x56, 0x53, 0x49, 0x4D, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74, 0x53, 0x50, 0x4E, 0x2E,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x24, 0x62, 0x22, 0x82, 0x02, 0x01, 0x21, 0x83, 0x02, 0x6F, 0x46, 0xA5, 0x06, 0x80, 0x01, 0x31,
+        0xC0, 0x01, 0x00, 0x8A, 0x01, 0x05, 0x8B, 0x03, 0x6F, 0x06, 0x0C, 0x80, 0x02, 0x00, 0x11, 0x81,
+        0x02, 0x00, 0x1F, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xFD, 0x56, 0x53, 0x49, 0x4D, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74, 0x53, 0x50, 0x4E, 0x2E,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+};
+
+kal_uint8 EF_U_GID1_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE] =
+{
+    {
+        /* The first 96 is meta data : start*/
+        0x18, 0x62, 0x16, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0x3E, 0x8A, 0x01, 0x05, 0x8B, 0x03,
+        0x6F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x10, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 2nd: The first 96 is meta data : start*/
+        0x18, 0x62, 0x16, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0x3E, 0x8A, 0x01, 0x05, 0x8B, 0x03,
+        0x6F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x10, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 3rd: The first 96 is meta data : start*/
+        0x18, 0x62, 0x16, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0x3E, 0x8A, 0x01, 0x05, 0x8B, 0x03,
+        0x6F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x10, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 4th: The first 96 is meta data : start*/
+        0x18, 0x62, 0x16, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0x3E, 0x8A, 0x01, 0x05, 0x8B, 0x03,
+        0x6F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x10, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    },
+    {
+        /* 5th: The first 96 is meta data : start*/
+        0x18, 0x62, 0x16, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x6F, 0x3E, 0x8A, 0x01, 0x05, 0x8B, 0x03,
+        0x6F, 0x06, 0x06, 0x80, 0x02, 0x00, 0x10, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        /* The first 96 is meta data : end*/
+        /* File content data : start*/
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+        /* File content data : end*/
+    }
+};
+#endif/*#if defined(__VSIM__) && defined(__TC01__) && defined(__FEATURE_TC01_SIMOFF_EXTENTION__) && defined(__MDVSIM__)*/
+#endif /* __MDVSIM__ */
+#endif /* __VSIM__ */
+
+
+/* This is SAT terminal profile content.
+ * NOTE: Please do NOT MODIFY it by yourself !!!
+ * If you want to customize SAT terminal profile content, please consult with MTK first. */
+kal_uint8 sim_nvram_profile[MAX_SIM_NUM][MAX_SIM_PROFILE_LEN] = {0};
+// Remember to update sim_term_profile in sim_nvram_def.c for NVRAM copy
+kal_uint8 sim_profile[MAX_SIM_PROFILE_LEN] =
+{           /* develope value */
+    #ifdef __DATA_CARD_ONLY__
+    0x37    /* 1st */
+    #else
+    0xF7    
+    #endif
+    #if !defined(__MODEM_CARD__) && !defined(__SAT_AP_NOT_SUPPORT__)
+    | 0x08      /*MENU SELECTION*/
+    #endif
+    ,
+
+    #ifdef __DATA_CARD_ONLY__
+    0x01    /* 2nd */
+    #else
+    0x17
+    #endif
+    #ifndef __DISABLE_SMS_CONTROLLED_BY_SIM__
+    | 0x08    //MO short message control support
+    #endif
+    #if !defined(__MODEM_CARD__) && !defined(__SAT_AP_NOT_SUPPORT__)
+    | 0xE0
+    #endif
+    ,
+
+    0xE8       /* 3rd */
+    #if !defined(__MODEM_CARD__) && !defined(__SAT_AP_NOT_SUPPORT__)
+    | 0x17
+    #endif
+    ,
+
+    #ifdef __DATA_CARD_ONLY__
+    0x82        /* 4th */   // Send SS and Send USSD disabled for DATA CARD
+    #else
+    0x8E       
+    #endif
+    #if !defined(__SAT_LOWCOST_NW_DISABLE__)
+    | 0x40      // 0x40: PROVIDE LOCAL INFORMATION (MCC, MNC, LAV, Cell ID, IMEI)
+    #endif
+    #if !defined(__MODEM_CARD__) && !defined(__SAT_AP_NOT_SUPPORT__)
+    | 0x21
+    #ifndef __DISABLE_CSCALL__
+    | 0x10  // 0x10: Proactive SIM: SET UP CALL
+    #endif
+    #endif
+    ,
+
+    0x01    /*5th*/  //Proactive UICC: SET UP EVENT LIST
+    #if !defined(__MODEM_CARD__) && !defined(__SAT_AP_NOT_SUPPORT__)
+    #ifndef __SAT_LOWCOST_UI_DISABLE__
+    | 0x60  // 0x20: Event: User activity
+            // 0x40: Event: Idle screen available
+    #endif
+    #ifndef __DATA_CARD_ONLY__
+    #ifndef __SAT_LOWCOST_NW_DISABLE__
+    | 0x0E  // 0x02: Event: MT call
+            // 0x04: Event: Call connected
+            // 0x08: Event: Call disconnected
+    #endif
+    #endif
+    #endif
+    #ifndef __SAT_LOWCOST_NW_DISABLE__
+    | 0x10  // 0x10: Event: Location status
+    #endif
+    ,
+
+    0x90    /* 6th */  //0x10:  Event: Access Technology Change
+    #if !defined(__MODEM_CARD__) && !defined(__SAT_AP_NOT_SUPPORT__)
+    #if !defined(__SAT_LOWCOST_UI_DISABLE__)
+    | 0x01  // Event: Language selection
+    #endif
+   #ifndef __TC10__
+    #if defined(__SATCC__)
+    | 0x02  // Event: Browser Termination
+    #endif
+   #endif
+    #endif /* __MODEM_CARD */
+    #if defined(__SATCE__)
+    | 0x0C  // 0x04: Event: Data available
+            // 0x08: Event: Channel status
+    #endif
+    ,
+
+    0x00,   /* 7th */
+    0x87    /* 8th */
+    #if !defined(__MODEM_CARD__) && !defined(__SAT_AP_NOT_SUPPORT__)
+    | 0x58
+    #endif
+    #ifdef __SATCB__
+    | 0x20      // RUN AT COMMAND (i.e. class "b" is supported)
+    #endif
+    ,
+
+    0x04        /* 9th */  // 0x04: PROVIDE LOCAL INFORMATION (NMR)
+    #if !defined(__MODEM_CARD__) && !defined(__SAT_AP_NOT_SUPPORT__)
+    #ifdef __DATA_CARD_ONLY__
+    | 0x01
+    #else
+    | 0x03      // 0x01: Sustained DISPLAY TEXT
+                // 0x02: SEND DTMF
+    #endif
+    #ifndef __DATA_CARD_ONLY__ 
+    #if !defined(__SAT_LOWCOST_NW_DISABLE__)
+    | 0x08      // 0x08: PROVIDE LOCAL INFORMATION (language)
+    #endif
+    #endif
+    #if !defined(__SAT_LOWCOST_UI_DISABLE__)
+    | 0x20      // 0x20: LANGUAGE NOTIFICATION
+    #endif
+    #if defined(__SATCC__)
+    | 0x40      // 0x40: LAUNCH BROWSER
+    #endif
+    #endif /* __MODEM_CARD */
+    #if !defined(__SAT_LOWCOST_NW_DISABLE__)
+    | 0x10      // 0x10: PROVIDE LOCAL INFORMATION (Timing Advance)
+    #endif
+    #if !defined(__SAT_LOWCOST_NW_DISABLE__)
+    | 0x80      // 0x80: PROVIDE LOCAL INFORMATION (Access Technology)
+    #endif
+    ,
+
+    0x00,   /* 10th *//* No other Softkeys supported */
+    0x00,   /* 11th */
+
+    0x00    /* 12th */
+    #ifdef __SATCE__
+    | 0x1F
+    #endif
+    ,
+    #ifdef __TC10__
+    0x22
+    #else
+    0x01    /* 13th */  // 0x01 CSD supported by ME
+    #ifdef __SATCE__
+    #ifdef __SIM_BIP_TP_DISABLE_HSDPA_GPRS__
+    | 0xE0
+    #else
+    | 0xE2
+    #endif
+    #endif
+    #endif
+    ,
+
+    0x00    /* 14th */
+    #if !defined(__MODEM_CARD__) && !defined(__SAT_AP_NOT_SUPPORT__)
+    | 0x08
+    #else
+    | 0x60
+    #endif
+    ,
+
+    0x00    /* 15th */
+    #if !defined(__MODEM_CARD__) && !defined(__SAT_AP_NOT_SUPPORT__)
+    | 0x11
+    #endif
+    ,
+
+    0x00   /* 16th */
+    #if !defined(__MODEM_CARD__) && !defined(__SAT_AP_NOT_SUPPORT__)
+    | 0x06
+    #endif
+    ,
+
+    #ifdef __SIM_BIP_TP_DISABLE_HSDPA_GPRS__
+    0x00
+    #else
+    0x80    /* 17th */
+    #endif
+    #ifdef __LTE_RAT__
+    | 0x40          //0x40: E-UTRAN (i.e. if class "e" is supported)
+    #endif   
+   #ifdef __TC10__
+    #ifdef __SATCE__    
+    | 0x03
+    #endif
+   #else   
+    #ifdef __SATCE__
+    #ifdef __DATA_CARD_ONLY__
+    | 0x03
+    #else
+    | 0x07
+    #endif
+   #endif
+   #endif
+    ,
+#ifdef __TC10__
+    0xEB     /* 18th */ /*DISPLAY text , GET INKEY variable timeout support */
+#else
+    0xC0    /* 18th */ /* MAUI_02883701 GET INKEY HELP */
+#endif
+#if defined(__REL7__) || defined(__SATCL__) || defined(__SATCM__) || defined(__SATCR__) || defined(__SATCZ__) || defined(__SATCAA__)
+        ,
+    0x00,   /* 19th */
+    0x00,   /* 20th */
+    0x00,   /* 21th */
+    0x00,   /* 22th */
+    0x40,   /* 23th */
+    0x00,   /* 24th */
+
+    0x00    /* 25th */
+#ifndef __DATA_CARD_ONLY__   
+#ifndef __TC10__
+#if !defined(__MODEM_CARD__) && !defined(__SAT_AP_NOT_SUPPORT__) && defined(__SATCC__)
+    | 0x01          // 0x01: Event browsing status
+#endif
+#endif
+#endif
+    | 0x10          // 0x10: Event Network Rejection
+#ifdef __LTE_RAT__
+    | 0x40          // 0x40: Event: E-UTRAN support in Event Network Rejection
+#endif
+#if defined(__SATCM__)
+    | 0x20          // 0x20: HCI connectivity event (if class "m" is supported)
+#endif
+    ,
+
+    0x00    /* 26th */
+#if defined(__SATCR__)
+    | 0x02 /* Event: Contactless state request */
+#endif
+    ,
+
+    0x00,   /* 27th */
+    0x00,   /* 28th */
+    0x00,   /* 29th */
+
+    0x00    /* 30th */
+#if defined(__REL7__)
+    | 0x08 /* Steering of Roaming" REFRESH support */
+#endif
+#if defined(__SATCL__)
+    | 0x10 /* Proactive UICC: ACTIVATE (i.e class "l" is supported) */
+#endif
+    ,
+
+    0x00    /* 31th */
+#if defined(__SATCR__)
+    | 0x01  /* Proactive UICC: Contactless State Changed */
+#endif
+#if defined(__IMS_SUPPORT__)
+//  | 0x20  /* Incoming IMS Data event */
+//  | 0x40  /* IMS Registration event */
+#endif
+    ,
+
+    0x00    /* 32th */
+#if defined(__IMS_SUPPORT__)
+//  | 0x01  /* IMS support*/
+#endif
+//  | 0x02  /* Support of PROVIDE LOCATION INFORMATION, H(e)NB IP address */
+//  | 0x04  /* Support of PROVIDE LOCATION INFORMATION, H(e)NB surrounding macrocells */
+//  | 0x08  /* Launch parameters supported for OPEN CHANNEL in Terminal Server Mode */
+//  | 0x10  /* Direct communication channel supported for OPEN CHANNEL in Terminal Server Mode */
+//  | 0x20  /* Proactive UICC: Security for Profile Container, Envelope Container, COMMAND CONTAINER and ENCAPSULATED SESSION CONTROL */
+//  | 0x40  /* CAT service list for eCAT client */
+    | 0x80  /* Support of refresh enforcement policy */
+    ,
+
+    0x00    /* 33th */
+#if defined(__SATCE__) && defined(__SATCAA__)
+    | 0x01  /* Support of DNS server address request for OPEN CHANNEL related to packet data service bearer */
+#endif
+#if defined(__SATCE__) && defined(__SATCZ__)
+    | 0x02  /* Support of Network Access Name reuse indication for CLOSE CHANNEL related to packet data service bearer */
+#endif
+//  | 0x04  /* Event: Poll Interval Negotiation */
+//  | 0x08  /* ProSe usage information reporting */
+//  | 0x10  /* Proactive UICC: PROVIDE LOCAL INFORMATION (Supported Radio Access Technologies) */
+//  | 0x20  /* Event: WLAN Access status (if class "e" is supported) */
+//  | 0x40  /* WLAN bearer support (if class "e" is supported) */
+//  | 0x80  /* Proactive UICC: PROVIDE LOCAL INFORMATION (WLAN identifier of the current WLAN connection) */
+    ,
+
+    0x00    /* 34th */
+//  | 0x01  /* URI support for SEND SHORT MESSAGE */
+#if defined(__IMS_SUPPORT__)
+    | 0x02  /* IMS URI supported for SET UP CALL */
+#endif
+//  | 0x04  /* Media Type "Voice" supported for SET UP CALL and Call Control by USIM */
+//  | 0x08  /* Media Type "Video" supported for SET UP CALL and Call Control by USIM */
+//  | 0x10  /* Proactive UICC: PROVIDE LOCAL INFORMATION (E-UTRAN Timing Advance Information) */
+//  | 0x20  /* REFRESH with "eUICC Profile State Change" mode */
+//  | 0x40  /* Extended Rejection Cause Code in Event: Network Rejection for E-UTRAN */
+//  | 0x80  /* Proactive UICC: eUICC OPERATION */
+    ,
+
+    0x00    /* 35th */
+//  | 0x01  /* Proactive UICC: GET INPUT (Variable Time out) */
+    | 0x02  /* Data Connection Status Change Event support - PDP Connection */
+    | 0x04  /* Data Connection Status Change Event support - PDN Connection */
+//  | 0x08  /* REFRESH with "Application Update" mode (i.e. class "af" is supported) */
+//  | 0x10  /* RFU */
+//  | 0x20  /* RFU */
+//  | 0x40  /* RFU */
+//  | 0x80  /* RFU */
+    ,
+
+    0x00    /* 36th */
+    | 0x01  /* Data Connection Status Change Event support - PDU Connection */
+    | 0x02  /* Event: Network Rejection for NG-RAN */
+//  | 0x04  /* Non-IP Data Delivery support (if class "e" and class "ai" are supported) */
+//  | 0x08  /* RFU */
+//  | 0x10  /* RFU */
+//  | 0x20  /* RFU */
+//  | 0x40  /* RFU */
+//  | 0x80  /* RFU */
+    ,
+#endif
+};
+
+#ifdef __CDMA2000_RAT__
+/* RUIM profile */
+kal_uint8 uim_profile[MAX_SIM_PROFILE_LEN]={
+    0x3B,  /* 1th */
+    0x61,  /* 2th */
+    0xFF,  /* 3th */
+    0x73,  /* 4th */
+    0xFF,  /* 5th */
+    0xFF,  /* 6th */
+    0x00,  /* 7th */
+    0x4D,  /* 8th */
+    0x89,  /* 9th */
+    0x00,  /* 10th */
+    0x02,  /* 11th */
+    0x1F,  /* 12th */
+    0xE0,  /* 13th */
+    0x05,  /* 14th */
+    0x07,  /* 15th */
+    0xE4,  /* 16th */
+    0x07,  /* 17th */
+    0x03,  /* 18th */
+    0x00,  /* 19th */
+    0x03,  /* 20th */
+    0x00,  /* 21th */
+    0x00,  /* 22th */
+    0x00,  /* 23th */
+    0x00,  /* 24th */
+    0x00,  /* 25th */
+    0x00,  /* 26th */
+    0x00,  /* 27th */
+    0x00,  /* 28th */
+    0x00,  /* 29th */
+    0x00,  /* 30th */
+    0x00,  /* 31th */
+    0x00,  /* 32th */
+    0x00,  /* 33th */
+    0x00,  /* 34th */
+    0x00,  /* 35th */
+    0x00,  /* 36th */
+};
+
+/* CSIM profile is from MD3's suggestion */
+kal_uint8 csim_nvram_profile[MAX_SIM_NUM][MAX_SIM_PROFILE_LEN] = {0};
+kal_uint8 csim_profile[MAX_SIM_PROFILE_LEN] = {
+    0x00    /* 1st (Download) */
+    | 0x01  /* Profile download */
+    | 0x02  /* SMS-PP data download */
+    | 0x04  /* Cell Broadcast data download */
+    | 0x08  /* Menu selection */
+    | 0x10  /* SMS-PP data download */
+    | 0x20  /* Timer expiration */
+#ifndef __DATA_CARD_ONLY__
+    | 0x40  /* USSD string data object support in Call Control by USIM */
+    | 0x80  /* Call Control by NAA */
+#endif
+    ,
+
+    0x00    /* 2nd (Other) */
+    | 0x01  /* Command result */
+#ifndef __DATA_CARD_ONLY__
+    | 0x02  /* Call Control by NAA */
+    | 0x04  /* Call Control by NAA */
+#endif
+    | 0x08  /* MO short message control support */
+#ifndef __DATA_CARD_ONLY__
+    | 0x10  /* Call Control by NAA */
+#endif
+    | 0x20  /* UCS2 Entry supported */
+    | 0x40  /* UCS2 Display supported */
+    | 0x80  /* Display Text */
+    ,
+
+    0x00    /* 3rd (Proactive UICC) */
+    | 0x01  /* Proactive UICC: DISPLAY TEXT */
+    | 0x02  /* Proactive UICC: GET INKEY */
+    | 0x04  /* Proactive UICC: GET INPUT */
+    | 0x08  /* Proactive UICC: MORE TIME */
+    | 0x10  /* Proactive UICC: PLAY TONE */
+    | 0x20  /* Proactive UICC: POLL INTERVAL */
+    | 0x40  /* Proactive UICC: POLLING OFF */
+    | 0x80  /* Proactive UICC: REFRESH */
+    ,
+
+    0x00    /* 4th (Proactive UICC) */
+    | 0x01  /* Proactive UICC: SELECT ITEM */
+    | 0x02  /* Proactive UICC: SEND SHORT MESSAGE with 3GPP-SMS-TPDU */
+#ifndef __DATA_CARD_ONLY__
+    | 0x04  /* Proactive UICC: SEND SS */
+    | 0x08  /* Proactive UICC: SEND USSD */
+#endif
+    | 0x10  /* Proactive UICC: SET UP CALL */
+    | 0x20  /* Proactive UICC: SET UP MENU */
+    | 0x40  /* Proactive UICC: PROVIDE LOCAL INFORMATION (MCC, MNC, LAC, Cell ID & IMEI) */
+    | 0x80  /* Proactive UICC: PROVIDE LOCAL INFORMATION (NMR) */
+    ,
+
+    0x00    /*5th (Event driven information) */
+    | 0x01  /* Proactive UICC: SET UP EVENT LIST */
+#ifndef __DATA_CARD_ONLY__
+    | 0x02  /* Event: MT call */
+    | 0x04  /* Event: Call connected */
+    | 0x08  /* Event: Call disconnected */
+#endif
+    | 0x10  /* Event: Location status */
+    | 0x20  /* Event: User activity */
+    | 0x40  /* Event: Idle screen available */
+//  | 0x80  /* Event: Card reader status */
+    ,
+
+    0x00    /* 6th (Event driven information extensions) */
+    | 0x01  /* Event: Language selection */
+    | 0x02  /* Event: Browser Termination */
+    | 0x04  /* Event: Data available */
+    | 0x08  /* Event: Channel status */
+    | 0x10  /* Event: Access Technology Change */
+//  | 0x20  /* Event: Display parameters changed */
+//  | 0x40  /* Event: Local Connection */
+    | 0x80  /* Event: Network Search Mode Change */
+    ,
+
+    0x00    /* 7th (Multiple card proactive commands) for class "a" */
+//  | 0x01  /* Proactive UICC: POWER ON CARD */
+//  | 0x02  /* Proactive UICC: POWER OFF CARD */
+//  | 0x04  /* Proactive UICC: PERFORM CARD APDU */
+//  | 0x08  /* Proactive UICC: GET READER STATUS (Card reader status) */
+//  | 0x10  /* Proactive UICC: GET READER STATUS (Card reader identifier) */
+//  | 0x20  /* RFU, bit = 0 */
+//  | 0x40  /* RFU, bit = 0 */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 8th (Proactive UICC) */
+    | 0x01  /* Proactive UICC: TIMER MANAGEMENT (start, stop) */
+    | 0x02  /* Proactive UICC: TIMER MANAGEMENT (get current value) */
+    | 0x04  /* Proactive UICC: PROVIDE LOCAL INFORMATION (date, time and time zone) */
+    | 0x08  /* GET INKEY */
+    | 0x10  /* SET UP IDLE MODE TEXT */
+//  | 0x20  /* RUN AT COMMAND */
+    | 0x40  /* SETUP CALL */
+    | 0x80  /* Call Control by NAA */
+    ,
+
+    0x00    /* 9th */
+    | 0x01  /* DISPLAY TEXT */
+#ifndef __DATA_CARD_ONLY__
+    | 0x02  /* SEND DTMF command */
+#endif
+    | 0x04  /* Proactive UICC: PROVIDE LOCAL INFORMATION (NMR) */
+#ifndef __DATA_CARD_ONLY__
+    | 0x08  /* Proactive UICC: PROVIDE LOCAL INFORMATION (language) */
+#endif
+    | 0x10  /* Proactive UICC: PROVIDE LOCAL INFORMATION, Timing Advance */
+    | 0x20  /* Proactive UICC: LANGUAGE NOTIFICATION */
+    | 0x40  /* Proactive UICC: LAUNCH BROWSER */
+    | 0x80  /* Proactive UICC: PROVIDE LOCAL INFORMATION (Access Technology) */
+    ,
+
+    0x00    /* 10th (Soft keys support) for class "d" */
+//  | 0x01  /* Soft keys support for SELECT ITEM */
+//  | 0x02  /* Soft Keys support for SET UP MENU */
+//  | 0x04  /* RFU, bit = 0 */
+//  | 0x08  /* RFU, bit = 0 */
+//  | 0x10  /* RFU, bit = 0 */
+//  | 0x20  /* RFU, bit = 0 */
+//  | 0x40  /* RFU, bit = 0 */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 11th (Soft keys information) */
+//  | 0x01  /* Maximum number of soft keys available 'FF' value is reserved for future use */
+//  | 0x02  /* Maximum number of soft keys available 'FF' value is reserved for future use */
+//  | 0x04  /* Maximum number of soft keys available 'FF' value is reserved for future use */
+//  | 0x08  /* Maximum number of soft keys available 'FF' value is reserved for future use */
+//  | 0x10  /* Maximum number of soft keys available 'FF' value is reserved for future use */
+//  | 0x20  /* Maximum number of soft keys available 'FF' value is reserved for future use */
+//  | 0x40  /* Maximum number of soft keys available 'FF' value is reserved for future use */
+//  | 0x80  /* Maximum number of soft keys available 'FF' value is reserved for future use */
+    ,
+
+    0x00    /* 12th (Bearer Independent protocol proactive commands, class "e") */
+#if defined(__SATCE__)
+    | 0x01  /* Proactive UICC: OPEN CHANNEL */
+    | 0x02  /* Proactive UICC: CLOSE CHANNEL */
+    | 0x04  /* Proactive UICC: RECEIVE DATA */
+    | 0x08  /* Proactive UICC: SEND DATA */
+    | 0x10  /* Proactive UICC: GET CHANNEL STATUS */
+#endif
+//  | 0x20  /* Proactive UICC: SERVICE SEARCH */
+//  | 0x40  /* Proactive UICC: GET SERVICE INFORMATION */
+//  | 0x80  /* Proactive UICC: DECLARE SERVICE */
+    ,
+
+    0x00    /* 13th (Bearer Independent protocol supported bearers, class "e") */
+#if defined(__SATCE__)
+//  | 0x01  /* CSD */
+    | 0x02  /* GPRS */
+//  | 0x04  /* Bluetooth */
+//  | 0x08  /* IrDA */
+//  | 0x10  /* RS232 */
+    | 0x20  /* Number of channels supported by terminal */
+    | 0x40  /* Number of channels supported by terminal */
+    | 0x80  /* Number of channels supported by terminal */
+#endif
+    ,
+
+    0x00    /* 14th (Screen height) */
+//  | 0x01  /* Number of characters supported down the terminal display */
+//  | 0x02  /* Number of characters supported down the terminal display */
+//  | 0x04  /* Number of characters supported down the terminal display */
+    | 0x08  /* Number of characters supported down the terminal display */
+//  | 0x10  /* Number of characters supported down the terminal display */
+//  | 0x20  /* No display capability */
+//  | 0x40  /* No keypad available */
+//  | 0x80  /* Screen Sizing Parameters supported */
+    ,
+
+    0x00    /* 15th (Screen width) */
+    | 0x01  /* Number of characters supported across the terminal display */
+//  | 0x02  /* Number of characters supported across the terminal display */
+//  | 0x04  /* Number of characters supported across the terminal display */
+//  | 0x08  /* Number of characters supported across the terminal display */
+    | 0x10  /* Number of characters supported across the terminal display */
+//  | 0x20  /* Number of characters supported across the terminal display */
+//  | 0x40  /* Number of characters supported across the terminal display */
+//  | 0x80  /* Variable size fonts */
+    ,
+
+    0x00    /* 16th (Screen effects) */
+//  | 0x01  /* Display can be resized */
+    | 0x02  /* Text Wrapping supported */
+    | 0x04  /* Text Scrolling supported */
+//  | 0x08  /* Text Attributes supported*/
+//  | 0x10  /* RFU, bit = 0 */
+//  | 0x20  /* Width reduction when in a menu */
+//  | 0x40  /* Width reduction when in a menu */
+//  | 0x80  /* Width reduction when in a menu */
+    ,
+
+    0x00    /* 17th (Bearer independent protocol supported transport interface/bearers, class "e") */
+    | 0x01  /* TCP, UICC in client mode, remote connection */
+    | 0x02  /* UDP, UICC in client mode, remote connection */
+#ifndef __DATA_CARD_ONLY__
+    | 0x04  /* TCP, UICC in server mode */
+#endif
+//  | 0x08  /* TCP, UICC in client mode, local connection*/
+//  | 0x10  /* UDP, UICC in client mode, local connection*/
+//  | 0x20  /* Direct communication channel */
+    | 0x40  /* E-UTRAN */
+    | 0x80  /* HSDPA */
+    ,
+
+    0x00    /* 18th */
+//  | 0x01  /* Proactive UICC: DISPLAY TEXT (Variable Time out) */
+//  | 0x02  /* Proactive UICC: GET INKEY (help is supported while waiting for immediate response or variable timeout) */
+//  | 0x04  /* USB (Bearer Independent protocol supported bearers,class "e") */
+//  | 0x08  /* Proactive UICC: GET INKEY (Variable Timeout) */
+    | 0x10  /* Proactive UICC: PROVIDE LOCAL INFORMATION (ESN) */
+//  | 0x20  /* Call control on GPRS */
+    | 0x40  /* Proactive UICC: PROVIDE LOCAL INFORMATION (IMEISV) */
+    | 0x80  /* Proactive UICC: PROVIDE LOCAL INFORMATION (Search Mode change) */
+    ,
+
+    0x00   /* 19th reserved for TIA/EIA-136-C facilities */
+//  | 0x01  /* Reserved by TIA/EIA-136, bit = 0 */
+//  | 0x02  /* Reserved by TIA/EIA-136, bit = 0 */
+//  | 0x04  /* Reserved by TIA/EIA-136, bit = 0 */
+//  | 0x08  /* Reserved by TIA/EIA-136, bit = 0 */
+//  | 0x10  /* RFU, bit = 0 */
+//  | 0x20  /* RFU, bit = 0 */
+//  | 0x40  /* RFU, bit = 0 */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 20th (reserved for 3GPP2 C.S0035-B CCAT) */
+    | 0x01  /* send cdma sms*/
+    | 0x02  /* cdma sms-pp data download */
+    | 0x04  /* BROADCAST SMS data download */
+//  | 0x08  /* Reserved by TIA/EIA/IS-820, bit = 0 */
+//  | 0x10  /* Reserved by TIA/EIA/IS-820, bit = 0 */
+//  | 0x20  /* Reserved by TIA/EIA/IS-820, bit = 0 */
+//  | 0x40  /* Reserved by TIA/EIA/IS-820, bit = 0 */
+//  | 0x80  /* Reserved by TIA/EIA/IS-820, bit = 0 */
+    ,
+
+    0x00    /* 21th (Extended Launch Browser Capability) for class "ac" */
+//  | 0x01  /* WML */
+//  | 0x02  /* XHTML */
+//  | 0x04  /* HTML */
+//  | 0x08  /* CHTML */
+//  | 0x10  /* RFU, bit = 0 */
+//  | 0x20  /* RFU, bit = 0 */
+//  | 0x40  /* RFU, bit = 0 */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 22th */
+//  | 0x01  /* Support of UTRAN PS with extended parameters */
+//  | 0x02  /* Proactive UICC: PROVIDE LOCAL INFORMATION(battery state) */
+//  | 0x04  /* Proactive UICC: PLAY TONE (Melody tones and Themed tones supported) */
+//  | 0x08  /* Multi-media Calls in SET UP CALL */
+//  | 0x10  /* Toolkit-initiated GBA */
+//  | 0x20  /* Proactive UICC: RETRIEVE MULTIMEDIA MESSAGE */
+//  | 0x40  /* Proactive UICC: SUBMIT MULTIMEDIA MESSAGE */
+//  | 0x80  /* Proactive UICC: DISPLAY MULTIMEDIA MESSAGE */
+    ,
+
+    0x00   /* 23th */
+//  | 0x01  /* Proactive UICC: SET FRAMES */
+//  | 0x02  /* Proactive UICC: GET FRAMES STATUS */
+//  | 0x04  /* MMS notification download */
+//  | 0x08  /* Alpha Identifier in REFRESH command supported by terminal */
+//  | 0x10  /* Geographical Location Reporting*/
+    | 0x20  /* Proactive UICC: PROVIDE LOCAL INFORMATION (MEID) */
+    | 0x40  /* Proactive UICC: PROVIDE LOCAL INFORMATION (NMR(UTRAN/E-UTRAN)) */
+//  | 0x80  /* USSD Data download and application mode */
+    ,
+
+    0x00    /* 24th for class "i" */
+//  | 0x01  /* Maximum number of frames supported (including frames created in existing frames) */
+//  | 0x02  /* Maximum number of frames supported (including frames created in existing frames) */
+//  | 0x04  /* Maximum number of frames supported (including frames created in existing frames) */
+//  | 0x08  /* Maximum number of frames supported (including frames created in existing frames) */
+//  | 0x10  /* RFU, bit = 0 */
+//  | 0x20  /* RFU, bit = 0 */
+//  | 0x40  /* RFU, bit = 0 */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 25th (Event driven information extensions) */
+#ifndef __DATA_CARD_ONLY__
+    | 0x01  /* Event browsing status */
+#endif
+//  | 0x02  /* Event: MMS Transfer status */
+//  | 0x04  /* Event: Frame Information changed */
+//  | 0x08  /* Event: I-WLAN Access status*/
+    | 0x10  /* Event Network Rejection */
+    | 0x20  /* Event: HCI connectivity event (if class "m" is supported) */
+    | 0x40  /* E-UTRAN support in Event Network Rejection */
+//  | 0x80  /* Multiple access technologies supported in Event Access Technology Change and PROVIDE LOCAL INFORMATION */
+    ,
+
+    0x00    /* 26th (Event driven information extensions) */
+//  | 0x01  /* Event : CSG Cell Selection */
+//  | 0x02  /* Event: Contactless state request */
+//  | 0x04  /* RFU, bit = 0 */
+//  | 0x08  /* RFU, bit = 0 */
+//  | 0x10  /* RFU, bit = 0 */
+//  | 0x20  /* RFU, bit = 0 */
+//  | 0x40  /* RFU, bit = 0 */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 27th (Event driven information extensions) */
+//  | 0x01  /* RFU, bit = 0 */
+//  | 0x02  /* RFU, bit = 0 */
+//  | 0x04  /* RFU, bit = 0 */
+//  | 0x08  /* RFU, bit = 0 */
+//  | 0x10  /* RFU, bit = 0 */
+//  | 0x20  /* RFU, bit = 0 */
+//  | 0x40  /* RFU, bit = 0 */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 28th (Text attributes) */
+//  | 0x01  /* Alignment left supported by Terminal */
+//  | 0x02  /* Alignment centre supported by Terminal */
+//  | 0x04  /* Alignment right supported by Terminal */
+//  | 0x08  /* Font size normal supported by Terminal */
+//  | 0x10  /* Font size large supported by Terminal */
+//  | 0x20  /* Font size small supported by Terminal */
+//  | 0x40  /* RFU, bit = 0 */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 29th (Text attributes) */
+//  | 0x01  /* Style normal supported by Terminal */
+//  | 0x02  /* Style bold supported by Terminal */
+//  | 0x04  /* Style italic supported by Terminal */
+//  | 0x08  /* Style underlined supported by Terminal */
+//  | 0x10  /* Style strikethrough supported by Terminal */
+//  | 0x20  /* Style text foreground colour supported by Terminal */
+//  | 0x40  /* Style text background colour supported by Terminal */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 30th */
+//  | 0x01  /* I-WLAN bearer support */
+//  | 0x02  /* Proactive UICC: PROVIDE LOCAL INFORMATION (WSID of the current I-WLAN connection) */
+//  | 0x04  /* TERMINAL APPLICATIONS */
+    | 0x08  /* Steering of Roaming" REFRESH support */
+    | 0x10  /* Proactive UICC: ACTIVATE (i.e class "l" is supported) */
+//  | 0x20  /* Proactive UICC: GEOGRAPHICAL LOCATION REQUEST */
+//  | 0x40  /* Proactive UICC: PROVIDE LOCAL INFORMATION(Broadcast Network Information) */
+    | 0x80  /* Steering of Roaming for I-WLAN REFRESH support */
+    ,
+
+    0x00    /* 31th */
+//  | 0x01  /* Proactive UICC: Contactless State Changed */
+//  | 0x02  /* Support of CSG cell discovery */
+//  | 0x04  /* Confirmation parameters supported for OPEN CHANNEL in Terminal Server Mode */
+//  | 0x08  /* Communication Control for IMS */
+//  | 0x10  /* Support of CAT over the modem interface */
+    | 0x20  /* Support for Incoming IMS Data event */
+    | 0x40  /* Support for IMS Registration event */
+//  | 0x80  /* Proactive UICC: Profile Container, Envelope Container, COMMAND CONTAINER and ENCAPSULATED SESSION CONTROL */
+    ,
+
+    0x00    /* 32th */
+    | 0x01  /* Support of IMS as a bearer for BIP */
+//  | 0x02  /* Support of PROVIDE LOCATION INFORMATION, H(e)NB IP address */
+//  | 0x04  /* Support of PROVIDE LOCATION INFORMATION, H(e)NB surrounding macrocells */
+//  | 0x08  /* Launch parameters supported for OPEN CHANNEL in Terminal Server Mode */
+//  | 0x10  /* Direct communication channel supported for OPEN CHANNEL in Terminal Server Mode */
+//  | 0x20  /* Proactive UICC: Security for Profile Container, Envelope Container, COMMAND CONTAINER and ENCAPSULATED SESSION CONTROL */
+//  | 0x40  /* CAT service list for eCAT client */
+    | 0x80  /* Support of refresh enforcement policy */
+    ,
+
+    0x00    /* 33th */
+#if defined(__SATCE__) && defined(__SATCAA__)
+    | 0x01  /* Support of DNS server address request for OPEN CHANNEL related to packet data service bearer */
+#endif
+#if defined(__SATCE__) && defined(__SATCZ__)
+    | 0x02  /* Support of Network Access Name reuse indication for CLOSE CHANNEL related to packet data service bearer */
+#endif
+//  | 0x04  /* Event: Poll Interval Negotiation */
+//  | 0x08  /* ProSe usage information reporting */
+//  | 0x10  /* Proactive UICC: PROVIDE LOCAL INFORMATION (Supported Radio Access Technologies) */
+//  | 0x20  /* Event: WLAN Access status (if class "e" is supported) */
+//  | 0x40  /* WLAN bearer support (if class "e" is supported) */
+//  | 0x80  /* Proactive UICC: PROVIDE LOCAL INFORMATION (WLAN identifier of the current WLAN connection) */
+    ,
+
+    0x00    /* 34th */
+//  | 0x01  /* URI support for SEND SHORT MESSAGE */
+//  | 0x02  /* IMS URI supported for SET UP CALL */
+//  | 0x04  /* Media Type "Voice" supported for SET UP CALL and Call Control by USIM */
+//  | 0x08  /* Media Type "Video" supported for SET UP CALL and Call Control by USIM */
+//  | 0x10  /* Proactive UICC: PROVIDE LOCAL INFORMATION (E-UTRAN Timing Advance Information) */
+//  | 0x20  /* REFRESH with "eUICC Profile State Change" mode */
+//  | 0x40  /* Extended Rejection Cause Code in Event: Network Rejection for E-UTRAN */
+//  | 0x80  /* Proactive UICC: eUICC OPERATION */
+    ,
+
+    0x00    /* 35th */
+//  | 0x01  /* Proactive UICC: GET INPUT (Variable Time out) */
+//  | 0x02  /* Data Connection Status Change Event support - PDP Connection */
+//  | 0x04  /* Data Connection Status Change Event support - PDN Connection */
+//  | 0x08  /* REFRESH with "Application Update" mode (i.e. class "af" is supported) */
+//  | 0x10  /* RFU */
+//  | 0x20  /* RFU */
+//  | 0x40  /* RFU */
+//  | 0x80  /* RFU */
+    ,
+
+    0x00    /* 36th */
+//  | 0x01  /* Data Connection Status Change Event support - PDU Connection */
+//  | 0x02  /* Event: Network Rejection for NG-RAN */
+//  | 0x04  /* Non-IP Data Delivery support (if class "e" and class "ai" are supported) */
+//  | 0x08  /* RFU */
+//  | 0x10  /* RFU */
+//  | 0x20  /* RFU */
+//  | 0x40  /* RFU */
+//  | 0x80  /* RFU */
+    ,
+
+};
+
+#if defined(__TC10__) && defined(__TC10_IPC_CDMA_SUPPORT__)
+kal_uint8 ctc_sat_profile[MAX_SIM_PROFILE_LEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+                                                  0xff, 0xff, 0xff, 0xff }; /* 20 bytes of 0xFF, with other bytes of 0x00 */
+kal_uint8 ctc_om_sat_profile[MAX_SIM_PROFILE_LEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+                                                     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+                                                     0xff, 0xff, 0xff, 0xff};
+#endif
+
+#endif /* __CDMA2000_RAT__ */
+
+
+/* Customized Operator ICCID/EHPLMN/IMSI list table */
+
+/* CT */
+/* Maximum Issuer ID number is 7 characters, 2 chars in 1 bytes
+   1st byte is Major industry ID, i.e. 89 for telecomm purpose
+   2nd ~ 4th byte are Country Code(1 ~ 3 digits) + Issuer ID number(MNC) */
+kal_uint8 sim_CT_iccid_list_table[][SIM_OP_MAX_ICCID_IIN_LEN] = {
+    {0x98, 0x68, 0x11, 0xFF},  //89-86-11
+    {0x98, 0x68, 0x30, 0xFF},  //89-86-03
+    {0x98, 0x58, 0x50, 0xFF},  //89-850-5 ?
+    {0x98, 0x58, 0x03, 0xFF},  //89-853-0  Macao
+    {0x98, 0x58, 0x03, 0xF3},  //89-853-03 Macao
+    {0x98, 0x58, 0x03, 0xF1},  //89-853-01 Macao
+    {0x98, 0x58, 0x03, 0xF4},  //89-853-04 Macao
+    {0x98, 0x58, 0x03, 0xF0},  //89-853-00 Macao
+    {0x98, 0x58, 0x03, 0xF2},  //89-853-02 Macao CT
+    {0x98, 0x58, 0x03, 0xF7},  //89-853-07 Macao CT
+    {0x98, 0x58, 0x32, 0xF1},  //89-852-31 CTEXCEL
+    SIM_OP_ICCID_TABLE_END     //Ending pattern
+};
+
+kal_uint8 sim_CT_ehplmn_list_table[][SIM_OP_MAX_MCC_MNC_LEN+1] = {
+    {"46003"},
+    {"46005"},
+    {"46011"},
+    {"46012"},
+    {"45400"},  //CT HK GC or GG card
+    {"45502"},  /* Macao CT Card */
+    {"45431"},  /* HK CT Card */
+    {"45507"},  /* Macao CT Card */
+    {SIM_OP_EHPLMN_TABLE_END}
+};
+
+kal_uint8 sim_CT_imsi_list_table[][SIM_OP_MAX_MCC_MNC_LEN+1] = {
+    {"46003"},
+    {"46005"},
+    {"46011"},
+    {"46012"},
+    {"45400"},  //CT HK GC or GG card
+    {"45502"},  /* Macao CT Card */
+    {"45431"},  /* HK CT Card */
+    {"45507"},  /* Macao CT Card */
+    {SIM_OP_IMSI_TABLE_END}
+};
+
+/* CMCC */
+/* Maximum Issuer ID number is 7 characters, 2 chars in 1 bytes
+   1st byte is Major industry ID, i.e. 89 for telecomm purpose
+   2nd ~ 4th byte are Country Code(1 ~ 3 digits) + Issuer ID number (MNC) */
+kal_uint8 sim_CMCC_iccid_list_table[][SIM_OP_MAX_ICCID_IIN_LEN] = {
+    {0x98, 0x68, 0x00, 0xFF},  //89-86-00
+    {0x98, 0x68, 0x20, 0xFF},  //89-86-02
+    {0x98, 0x68, 0x40, 0xFF},  //89-86-04
+    {0x98, 0x68, 0x70, 0xFF},  //89-86-07
+    {0x98, 0x68, 0x80, 0xFF},  //89-86-08
+    SIM_OP_ICCID_TABLE_END   //Ending pattern
+};
+
+kal_uint8 sim_CMCC_imsi_list_table[][SIM_OP_MAX_MCC_MNC_LEN+1] = {
+    {"46000"},
+    {"46002"},
+    {"46004"},
+    {"46007"},
+    {"46008"},
+    {SIM_OP_IMSI_TABLE_END}
+};
+
+/* CU */
+/* Maximum Issuer ID number is 7 characters, 2 chars in 1 bytes
+   1st byte is Major industry ID, i.e. 89 for telecomm purpose
+   2nd ~ 4th byte are Country Code(1 ~ 3 digits) + Issuer ID number (MNC) */
+kal_uint8 sim_CU_iccid_list_table[][SIM_OP_MAX_ICCID_IIN_LEN] = {
+    {0x98, 0x68, 0x10, 0xFF},  //89-86-01
+    {0x98, 0x68, 0x60, 0xFF},  //89-86-06
+    SIM_OP_ICCID_TABLE_END   //Ending pattern
+};
+
+/* VZW */
+kal_uint8 sim_VZW_ehplmn_list_table[][SIM_OP_MAX_MCC_MNC_LEN+1] = {
+    {"311480"},
+    {"310028"},
+    {"311390"},
+    {SIM_OP_EHPLMN_TABLE_END}
+};
+
+/* SPRINT */
+kal_uint8 sim_SPRINT_ehplmn_list_table[][SIM_OP_MAX_MCC_MNC_LEN+1] = {
+    {"310120"},
+    {"311490"},
+    {"312530"},
+    {SIM_OP_EHPLMN_TABLE_END}
+};
+
+/* DT */
+kal_uint8 sim_DT_imsi_list_table[][SIM_OP_MAX_MCC_MNC_LEN+1] = {
+    {"20201"},
+    {"21901"},
+    {"23203"},
+    {"26201"},
+    {"22603"},
+    {"22606"},
+    {"21920"},
+    {SIM_OP_IMSI_TABLE_END}
+};
+
+
+/* Define which table should be reffered to for each operator
+   {iccic_table, ehlpmn_table, imsi_table}
+*/
+kal_uint8 *sim_operator_query_table[][3] = {
+    {NULL, NULL, NULL}, // SIM_CARD_OPERATOR_UNKNOWN
+    // Add below here
+    {&sim_CT_iccid_list_table[0][0], &sim_CT_ehplmn_list_table[0][0], &sim_CT_imsi_list_table[0][0]}, // SIM_CARD_OPERATOR_CT
+    {&sim_CMCC_iccid_list_table[0][0], NULL, &sim_CMCC_imsi_list_table[0][0]}, // SIM_CARD_OPERATOR_CMCC
+    {&sim_CU_iccid_list_table[0][0], NULL, NULL}, // SIM_CARD_OPERATOR_CU
+    {NULL, &sim_VZW_ehplmn_list_table[0][0], NULL}, // SIM_CARD_OPERATOR_VZW
+    {NULL, &sim_SPRINT_ehplmn_list_table[0][0], NULL}, // SIM_CARD_OPERATOR_SPRINT
+    {NULL, NULL, &sim_DT_imsi_list_table[0][0]}, // SIM_CARD_OPERATOR_DT
+    // Add above here
+};
+
+kal_uint8 *custom_get_sim_operator_query_table(sim_operator_type_enum operator_type, sim_operator_check_method_enum query_type)
+{
+    if (query_type >= SIM_CARD_OPERATOR_CHECK_MAX)
+    {
+        return NULL;
+    }
+
+    if (operator_type == SIM_CARD_OPERATOR_UNKNOWN || operator_type >= SIM_CARD_OPERATOR_MAX)
+    {
+        return NULL;
+    }
+
+    return sim_operator_query_table[operator_type][query_type];
+}
+
+
+/* This is USAT terminal profile content.
+ * NOTE: Please do NOT MODIFY it by yourself !!!
+ * If you want to customize USAT terminal profile content, please consult with MTK first. */
+kal_uint8 usim_te_profile[MAX_SIM_PROFILE_LEN] = {0};
+kal_uint8 usim_mt_profile[MAX_SIM_PROFILE_LEN] = {0};
+kal_uint8 usim_conflict_profile[MAX_SIM_PROFILE_LEN] = {0};
+/* usim_mt_only_profile, defined in 102.223 Annex T & 31.111 Annex Q */
+kal_uint8 usim_mt_only_profile[MAX_SIM_PROFILE_LEN] =
+{
+    0xc0,   /* 1st */
+            // b7: Call Control by NAA (USSD string data object support in Call Control by USIM)
+            // b8: Call Control by NAA (Envelope call control always sent to the SIM during automatic redial mode)
+
+    0x1e,   /* 2nd */
+            // b2: Call Control by NAA
+            // b3: Call Control by NAA (Cell identity included in call control)
+            // b4: MO short message control support
+            // b5: Call Control by NAA (Handling of alpha ID according to spec 11.14)
+
+    0x60,   /* 3rd */
+            // b6: POLL INTERVAL
+            // b7: POLLING OFF
+
+    0xc0,   /* 4th */
+            // b7: PROVIDE LOCAL INFORMATION (MCC, MNC, LAC, Cell ID & IMEI)
+            // b8: PROVIDE LOCAL INFORMATION (NMR)
+
+    0x1e,   /* 5th */
+            // b2: Event: MT call
+            // b3: Event: Call connected
+            // b4: Event: Call disconnected
+            // b5: Event: Location status
+
+    0x90,   /* 6th */
+            // b5: Event: Access Technology Change
+            // b8: Event: Network Search Mode Change
+
+    0x00,   /* 7th */
+    0x80,   /* 8th */
+            // b8: Call Control by NAA (2nd capability configuration parameter)
+
+    0x04,   /* 9th */
+            // b3: PROVIDE LOCAL INFORMATION (NMR)
+
+    0x00,   /* 10th */
+    0x00,   /* 11th */
+    0x00,   /* 12th */
+    0x00,   /* 13th */
+    0x00,   /* 14th */
+    0x00,   /* 15th */
+    0x00,   /* 16th */
+    0x00,   /* 17th */
+    0xf0,   /* 18th */
+            // b5: PROVIDE LOCAL INFORMATION (ESN)
+            // b6: Call Control by NAA (Call control on GPRS)
+            // b7: PROVIDE LOCAL INFORMATION (IMEISV)
+            // b8: PROVIDE LOCAL INFORMATION (Search Mode Change)
+
+#if defined(__REL7__) || defined(__SATCL__) || defined(__SATCM__) || defined(__SATCR__) || defined(__SATCZ__) || defined(__SATCAA__)
+    0x00,   /* 19th */
+    0x00,   /* 20th */
+    0x00,   /* 21th */
+    0x00,   /* 22th */
+    0x40,   /* 23th */
+            // b7: PROVIDE LOCAL INFORMATION (NMR(UTRAN/E-UTRAN))
+
+    0x00,   /* 24th */
+    0x00,   /* 25th */
+    0x00,   /* 26th */
+    0x00,   /* 27th */
+    0x00,   /* 28th */
+    0x00,   /* 29th */
+    0x80,   /* 30th */
+            // b8: Steering of Roaming for I-WLAN REFRESH support
+
+    0x00,   /* 31th */
+    0x00,   /* 32th */
+    0x10,   /* 33th */
+            // b5: PROVIDE LOCAL INFORMATION (Supported Radio Access Technologies)
+
+    0x0c,   /* 34th */
+            // b3: Media Type "Voice" supported for SET UP CALL and Call Control by USIM
+            // b4: Media Type "Video" supported for SET UP CALL and Call Control by USIM
+
+    0x00,   /* 35th */
+    0x00,   /* 36th */
+#endif
+};
+
+kal_uint8 usim_mt_default_profile[MAX_SIM_PROFILE_LEN] =
+{
+    0x00    /* 1st (Download) */
+    | 0x01  /* Profile download */
+    | 0x02  /* SMS-PP data download */
+    | 0x04  /* Cell Broadcast data download */
+//  | 0x08  /* Menu selection */
+    | 0x10  /* SMS-PP data download */
+    | 0x20  /* Timer expiration */
+#ifndef __DATA_CARD_ONLY__
+    | 0x40  /* USSD string data object support in Call Control by USIM */
+    | 0x80  /* Call Control by NAA */
+#endif
+    ,
+
+    0x00    /* 2nd (Other) */
+    | 0x01  /* Command result */
+    #ifndef __DATA_CARD_ONLY__
+    | 0x02  /* Call Control by NAA */
+    | 0x04  /* Call Control by NAA */
+    #endif
+    #ifndef __DISABLE_SMS_CONTROLLED_BY_SIM__
+    | 0x08  /* MO short message control support */
+    #endif
+    #ifndef __DATA_CARD_ONLY__
+    | 0x10  /* Call Control by NAA */
+    #endif
+//  | 0x20  /* UCS2 Entry supported */
+//  | 0x40  /* UCS2 Display supported */
+//  | 0x80  /* Display Text */
+    ,
+
+    0x00    /* 3rd (Proactive UICC) */
+//  | 0x01  /* Proactive UICC: DISPLAY TEXT */
+//  | 0x02  /* Proactive UICC: GET INKEY */
+//  | 0x04  /* Proactive UICC: GET INPUT */
+    | 0x08  /* Proactive UICC: MORE TIME */
+//  | 0x10  /* Proactive UICC: PLAY TONE */
+#ifdef __DATA_CARD_ONLY__
+    | 0x20
+#else
+//  | 0x20  /* Proactive UICC: POLL INTERVAL */
+#endif
+    | 0x40  /* Proactive UICC: POLLING OFF */
+    | 0x80  /* Proactive UICC: REFRESH */
+    ,
+
+    0x00    /* 4th (Proactive UICC) */
+//  | 0x01  /* Proactive UICC: SELECT ITEM */
+    | 0x02  /* Proactive UICC: SEND SHORT MESSAGE with 3GPP-SMS-TPDU */
+#ifndef __DATA_CARD_ONLY__
+    | 0x04  /* Proactive UICC: SEND SS */
+    | 0x08  /* Proactive UICC: SEND USSD */
+#endif
+//  | 0x10  /* Proactive UICC: SET UP CALL */
+//  | 0x20  /* Proactive UICC: SET UP MENU */
+    #if !defined(__SAT_LOWCOST_NW_DISABLE__)
+    | 0x40  /* Proactive UICC: PROVIDE LOCAL INFORMATION (MCC, MNC, LAC, Cell ID & IMEI) */
+    #endif
+    | 0x80  /* Proactive UICC: PROVIDE LOCAL INFORMATION (NMR) */
+    ,
+
+    0x00    /*5th (Event driven information) */
+    | 0x01  /* Proactive UICC: SET UP EVENT LIST */
+    #ifndef __SAT_LOWCOST_NW_DISABLE__
+    #ifndef __DATA_CARD_ONLY__
+    | 0x02  /* Event: MT call */
+    | 0x04  /* Event: Call connected */
+    | 0x08  /* Event: Call disconnected */
+    #endif
+    | 0x10  /* Event: Location status */
+    #endif
+//  | 0x20  /* Event: User activity */
+//  | 0x40  /* Event: Idle screen available */
+//  | 0x80  /* Event: Card reader status */
+    ,
+
+    0x00    /* 6th (Event driven information extensions) */
+//  | 0x01  /* Event: Language selection */
+    #if defined(__SATCC__)
+    | 0x02  /* Event: Browser Termination */
+    #endif
+    #if defined(__SATCE__)
+    | 0x04  /* Event: Data available */
+    | 0x08  /* Event: Channel status */
+    #endif
+    | 0x10  /* Event: Access Technology Change */
+//  | 0x20  /* Event: Display parameters changed */
+//  | 0x40  /* Event: Local Connection */
+    | 0x80  /* Event: Network Search Mode Change */
+    ,
+
+    0x00    /* 7th (Multiple card proactive commands) for class "a" */
+//  | 0x01  /* Proactive UICC: POWER ON CARD */
+//  | 0x02  /* Proactive UICC: POWER OFF CARD */
+//  | 0x04  /* Proactive UICC: PERFORM CARD APDU */
+//  | 0x08  /* Proactive UICC: GET READER STATUS (Card reader status) */
+//  | 0x10  /* Proactive UICC: GET READER STATUS (Card reader identifier) */
+//  | 0x20  /* RFU, bit = 0 */
+//  | 0x40  /* RFU, bit = 0 */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 8th (Proactive UICC) */
+    | 0x01  /* Proactive UICC: TIMER MANAGEMENT (start, stop) */
+    | 0x02  /* Proactive UICC: TIMER MANAGEMENT (get current value) */
+    | 0x04  /* Proactive UICC: PROVIDE LOCAL INFORMATION (date, time and time zone) */
+//  | 0x08  /* GET INKEY */
+//  | 0x10  /* SET UP IDLE MODE TEXT */
+    #ifdef __SATCB__
+    | 0x20  /* RUN AT COMMAND */
+    #endif
+//  | 0x40  /* SETUP CALL */
+    | 0x80  /* Call Control by NAA */
+    ,
+
+    0x00    /* 9th */
+//  | 0x01  /* DISPLAY TEXT */
+    #ifndef __DATA_CARD_ONLY__ 
+    | 0x02  /* SEND DTMF command */
+    #endif
+    | 0x04  /* Proactive UICC: PROVIDE LOCAL INFORMATION (NMR) */
+    #ifndef __DATA_CARD_ONLY__ 
+    #if !defined(__SAT_LOWCOST_NW_DISABLE__)
+    | 0x08  /* Proactive UICC: PROVIDE LOCAL INFORMATION (language) */
+    #endif
+    #endif
+    #if !defined(__SAT_LOWCOST_NW_DISABLE__)
+    | 0x10  /* Proactive UICC: PROVIDE LOCAL INFORMATION, Timing Advance */
+    #endif
+//  | 0x20  /* Proactive UICC: LANGUAGE NOTIFICATION */
+    #if defined(__SATCC__)
+    | 0x40  /* Proactive UICC: LAUNCH BROWSER */
+    #endif
+    #if !defined(__SAT_LOWCOST_NW_DISABLE__)
+    | 0x80  /* Proactive UICC: PROVIDE LOCAL INFORMATION (Access Technology) */
+    #endif
+    ,
+
+    0x00    /* 10th (Soft keys support) for class "d" */
+//  | 0x01  /* Soft keys support for SELECT ITEM */
+//  | 0x02  /* Soft Keys support for SET UP MENU */
+//  | 0x04  /* RFU, bit = 0 */
+//  | 0x08  /* RFU, bit = 0 */
+//  | 0x10  /* RFU, bit = 0 */
+//  | 0x20  /* RFU, bit = 0 */
+//  | 0x40  /* RFU, bit = 0 */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 11th (Soft keys information) */
+//  | 0x01  /* Maximum number of soft keys available 'FF' value is reserved for future use */
+//  | 0x02  /* Maximum number of soft keys available 'FF' value is reserved for future use */
+//  | 0x04  /* Maximum number of soft keys available 'FF' value is reserved for future use */
+//  | 0x08  /* Maximum number of soft keys available 'FF' value is reserved for future use */
+//  | 0x10  /* Maximum number of soft keys available 'FF' value is reserved for future use */
+//  | 0x20  /* Maximum number of soft keys available 'FF' value is reserved for future use */
+//  | 0x40  /* Maximum number of soft keys available 'FF' value is reserved for future use */
+//  | 0x80  /* Maximum number of soft keys available 'FF' value is reserved for future use */
+    ,
+
+    0x00    /* 12th (Bearer Independent protocol proactive commands, class "e") */
+    #ifdef __SATCE__
+    | 0x01  /* Proactive UICC: OPEN CHANNEL */
+    | 0x02  /* Proactive UICC: CLOSE CHANNEL */
+    | 0x04  /* Proactive UICC: RECEIVE DATA */
+    | 0x08  /* Proactive UICC: SEND DATA */
+    | 0x10  /* Proactive UICC: GET CHANNEL STATUS */
+    #endif
+//  | 0x20  /* Proactive UICC: SERVICE SEARCH */
+//  | 0x40  /* Proactive UICC: GET SERVICE INFORMATION */
+//  | 0x80  /* Proactive UICC: DECLARE SERVICE */
+    ,
+
+    0x00    /* 13th (Bearer Independent protocol supported bearers, class "e") */
+    #ifdef __SATCE__
+    | 0x02  /* GPRS */
+    #endif
+//  | 0x04  /* Bluetooth */
+//  | 0x08  /* IrDA */
+//  | 0x10  /* RS232 */
+    #ifdef __SATCE__
+    | 0x20  /* Number of channels supported by terminal */
+    | 0x40  /* Number of channels supported by terminal */
+    | 0x80  /* Number of channels supported by terminal */
+    #endif
+    ,
+
+    0x00    /* 14th (Screen height) */
+//  | 0x01  /* Number of characters supported down the terminal display */
+//  | 0x02  /* Number of characters supported down the terminal display */
+//  | 0x04  /* Number of characters supported down the terminal display */
+//  | 0x08  /* Number of characters supported down the terminal display */
+//  | 0x10  /* Number of characters supported down the terminal display */
+    | 0x20  /* No display capability */
+    | 0x40  /* No keypad available */
+//  | 0x80  /* Screen Sizing Parameters supported */
+    ,
+
+    0x00    /* 15th (Screen width) */
+//  | 0x01  /* Number of characters supported across the terminal display */
+//  | 0x02  /* Number of characters supported across the terminal display */
+//  | 0x04  /* Number of characters supported across the terminal display */
+//  | 0x08  /* Number of characters supported across the terminal display */
+//  | 0x10  /* Number of characters supported across the terminal display */
+//  | 0x20  /* Number of characters supported across the terminal display */
+//  | 0x40  /* Number of characters supported across the terminal display */
+//  | 0x80  /* Variable size fonts */
+    ,
+
+    0x00    /* 16th (Screen effects) */
+//  | 0x01  /* Display can be resized */
+//  | 0x02  /* Text Wrapping supported */
+//  | 0x04  /* Text Scrolling supported */
+//  | 0x08  /* Text Attributes supported*/
+//  | 0x10  /* RFU, bit = 0 */
+//  | 0x20  /* Width reduction when in a menu */
+//  | 0x40  /* Width reduction when in a menu */
+//  | 0x80  /* Width reduction when in a menu */
+    ,
+
+    0x00    /* 17th (Bearer independent protocol supported transport interface/bearers, class "e") */
+    #ifdef __SATCE__
+    | 0x01  /* TCP, UICC in client mode, remote connection */
+    | 0x02  /* UDP, UICC in client mode, remote connection */
+    #ifndef __DATA_CARD_ONLY__ 
+    | 0x04  /* TCP, UICC in server mode */
+    #endif
+    #endif
+//  | 0x08  /* TCP, UICC in client mode, local connection*/
+//  | 0x10  /* UDP, UICC in client mode, local connection*/
+//  | 0x20  /* Direct communication channel */
+    #ifdef __LTE_RAT__
+    | 0x40  /* E-UTRAN */
+    #endif
+    | 0x80  /* HSDPA */
+    ,
+
+    0x00    /* 18th */ /* MAUI_02883701 GET INKEY HELP */
+//  | 0x01  /* Proactive UICC: DISPLAY TEXT (Variable Time out) */
+//  | 0x02  /* Proactive UICC: GET INKEY (help is supported while waiting for immediate response or variable timeout) */
+//  | 0x04  /* USB (Bearer Independent protocol supported bearers,class "e") */
+//  | 0x08  /* Proactive UICC: GET INKEY (Variable Timeout) */
+//  | 0x10  /* Proactive UICC: PROVIDE LOCAL INFORMATION (ESN) */
+//  | 0x20  /* Call control on GPRS */
+    | 0x40  /* Proactive UICC: PROVIDE LOCAL INFORMATION (IMEISV) */
+    | 0x80  /* Proactive UICC: PROVIDE LOCAL INFORMATION (Search Mode change) */
+
+#if defined(__REL7__) || defined(__SATCL__) || defined(__SATCM__) || defined(__SATCR__) || defined(__SATCZ__) || defined(__SATCAA__)
+    ,
+    0x00   /* 19th reserved for TIA/EIA-136-C facilities */
+//  | 0x01  /* Reserved by TIA/EIA-136, bit = 0 */
+//  | 0x02  /* Reserved by TIA/EIA-136, bit = 0 */
+//  | 0x04  /* Reserved by TIA/EIA-136, bit = 0 */
+//  | 0x08  /* Reserved by TIA/EIA-136, bit = 0 */
+//  | 0x10  /* RFU, bit = 0 */
+//  | 0x20  /* RFU, bit = 0 */
+//  | 0x40  /* RFU, bit = 0 */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 20th (reserved for 3GPP2 C.S0035-B CCAT) */
+//  | 0x01  /* Reserved by CCAT, bit = 0 */
+//  | 0x02  /* Reserved by CCAT, bit = 0 */
+//  | 0x04  /* Reserved by CCAT, bit = 0 */
+//  | 0x08  /* Reserved by CCAT, bit = 0 */
+//  | 0x10  /* Reserved by CCAT, bit = 0 */
+//  | 0x20  /* Reserved by CCAT, bit = 0 */
+//  | 0x40  /* Reserved by CCAT, bit = 0 */
+//  | 0x80  /* Reserved by CCAT, bit = 0 */
+    ,
+
+    0x00    /* 21th (Extended Launch Browser Capability) for class "ac" */
+//  | 0x01  /* WML */
+//  | 0x02  /* XHTML */
+//  | 0x04  /* HTML */
+//  | 0x08  /* CHTML */
+//  | 0x10  /* RFU, bit = 0 */
+//  | 0x20  /* RFU, bit = 0 */
+//  | 0x40  /* RFU, bit = 0 */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 22th */
+//  | 0x01  /* Support of UTRAN PS with extended parameters */
+//  | 0x02  /* Proactive UICC: PROVIDE LOCAL INFORMATION(battery state) */
+//  | 0x04  /* Proactive UICC: PLAY TONE (Melody tones and Themed tones supported) */
+//  | 0x08  /* Multi-media Calls in SET UP CALL */
+//  | 0x10  /* Toolkit-initiated GBA */
+//  | 0x20  /* Proactive UICC: RETRIEVE MULTIMEDIA MESSAGE */
+//  | 0x40  /* Proactive UICC: SUBMIT MULTIMEDIA MESSAGE */
+//  | 0x80  /* Proactive UICC: DISPLAY MULTIMEDIA MESSAGE */
+    ,
+
+    0x00   /* 23th */
+//  | 0x01  /* Proactive UICC: SET FRAMES */
+//  | 0x02  /* Proactive UICC: GET FRAMES STATUS */
+//  | 0x04  /* MMS notification download */
+//  | 0x08  /* Alpha Identifier in REFRESH command supported by terminal */
+//  | 0x10  /* Geographical Location Reporting*/
+//  | 0x20  /* Proactive UICC: PROVIDE LOCAL INFORMATION (MEID) */
+    | 0x40  /* Proactive UICC: PROVIDE LOCAL INFORMATION (NMR(UTRAN/E-UTRAN)) */
+//  | 0x80  /* USSD Data download and application mode */
+    ,
+
+    0x00    /* 24th for class "i" */
+//  | 0x01  /* Maximum number of frames supported (including frames created in existing frames) */
+//  | 0x02  /* Maximum number of frames supported (including frames created in existing frames) */
+//  | 0x04  /* Maximum number of frames supported (including frames created in existing frames) */
+//  | 0x08  /* Maximum number of frames supported (including frames created in existing frames) */
+//  | 0x10  /* RFU, bit = 0 */
+//  | 0x20  /* RFU, bit = 0 */
+//  | 0x40  /* RFU, bit = 0 */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 25th (Event driven information extensions) */
+#ifndef __DATA_CARD_ONLY__
+    | 0x01  /* Event browsing status */
+#endif
+//  | 0x02  /* Event: MMS Transfer status */
+//  | 0x04  /* Event: Frame Information changed */
+//  | 0x08  /* Event: I-WLAN Access status*/
+    | 0x10  /* Event Network Rejection */
+#if defined(__SATCM__)
+    | 0x20  /* Event: HCI connectivity event (if class "m" is supported) */
+#endif
+#ifdef __LTE_RAT__
+    | 0x40  /* E-UTRAN support in Event Network Rejection */
+#endif
+//  | 0x80  /* Multiple access technologies supported in Event Access Technology Change and PROVIDE LOCAL INFORMATION */
+    ,
+
+    0x00    /* 26th (Event driven information extensions) */
+//  | 0x01  /* Event : CSG Cell Selection */
+#if defined(__SATCR__)
+    | 0x02 /* Event: Contactless state request */
+#endif
+//  | 0x04  /* RFU, bit = 0 */
+//  | 0x08  /* RFU, bit = 0 */
+//  | 0x10  /* RFU, bit = 0 */
+//  | 0x20  /* RFU, bit = 0 */
+//  | 0x40  /* RFU, bit = 0 */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 27th (Event driven information extensions) */
+//  | 0x01  /* RFU, bit = 0 */
+//  | 0x02  /* RFU, bit = 0 */
+//  | 0x04  /* RFU, bit = 0 */
+//  | 0x08  /* RFU, bit = 0 */
+//  | 0x10  /* RFU, bit = 0 */
+//  | 0x20  /* RFU, bit = 0 */
+//  | 0x40  /* RFU, bit = 0 */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 28th (Text attributes) */
+//  | 0x01  /* Alignment left supported by Terminal */
+//  | 0x02  /* Alignment centre supported by Terminal */
+//  | 0x04  /* Alignment right supported by Terminal */
+//  | 0x08  /* Font size normal supported by Terminal */
+//  | 0x10  /* Font size large supported by Terminal */
+//  | 0x20  /* Font size small supported by Terminal */
+//  | 0x40  /* RFU, bit = 0 */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 29th (Text attributes) */
+//  | 0x01  /* Style normal supported by Terminal */
+//  | 0x02  /* Style bold supported by Terminal */
+//  | 0x04  /* Style italic supported by Terminal */
+//  | 0x08  /* Style underlined supported by Terminal */
+//  | 0x10  /* Style strikethrough supported by Terminal */
+//  | 0x20  /* Style text foreground colour supported by Terminal */
+//  | 0x40  /* Style text background colour supported by Terminal */
+//  | 0x80  /* RFU, bit = 0 */
+    ,
+
+    0x00    /* 30th */
+//  | 0x01  /* I-WLAN bearer support */
+//  | 0x02  /* Proactive UICC: PROVIDE LOCAL INFORMATION (WSID of the current I-WLAN connection) */
+//  | 0x04  /* TERMINAL APPLICATIONS */
+#if defined(__REL7__)
+    | 0x08  /* Steering of Roaming" REFRESH support */
+#endif
+#if defined(__SATCL__)
+    | 0x10  /* Proactive UICC: ACTIVATE (i.e class "l" is supported) */
+#endif
+//  | 0x20  /* Proactive UICC: GEOGRAPHICAL LOCATION REQUEST */
+//  | 0x40  /* Proactive UICC: PROVIDE LOCAL INFORMATION(Broadcast Network Information) */
+//  | 0x80  /* Steering of Roaming for I-WLAN REFRESH support */
+    ,
+
+    0x00    /* 31th */
+#if defined(__SATCR__)
+    | 0x01  /* Proactive UICC: Contactless State Changed */
+#endif
+//  | 0x02  /* Support of CSG cell discovery */
+//  | 0x04  /* Confirmation parameters supported for OPEN CHANNEL in Terminal Server Mode */
+//  | 0x08  /* Communication Control for IMS */
+//  | 0x10  /* Support of CAT over the modem interface */
+//  | 0x20  /* Support for Incoming IMS Data event */
+//  | 0x40  /* Support for IMS Registration event */
+//  | 0x80  /* Proactive UICC: Profile Container, Envelope Container, COMMAND CONTAINER and ENCAPSULATED SESSION CONTROL */
+    ,
+
+    0x00    /* 32th */
+//  | 0x01  /* Support of IMS as a bearer for BIP */
+//  | 0x02  /* Support of PROVIDE LOCATION INFORMATION, H(e)NB IP address */
+//  | 0x04  /* Support of PROVIDE LOCATION INFORMATION, H(e)NB surrounding macrocells */
+//  | 0x08  /* Launch parameters supported for OPEN CHANNEL in Terminal Server Mode */
+//  | 0x10  /* Direct communication channel supported for OPEN CHANNEL in Terminal Server Mode */
+//  | 0x20  /* Proactive UICC: Security for Profile Container, Envelope Container, COMMAND CONTAINER and ENCAPSULATED SESSION CONTROL */
+//  | 0x40  /* CAT service list for eCAT client */
+    | 0x80  /* Support of refresh enforcement policy */
+    ,
+
+    0x00    /* 33th */
+#if defined(__SATCE__) && defined(__SATCAA__)
+    | 0x01  /* Support of DNS server address request for OPEN CHANNEL related to packet data service bearer */
+#endif
+#if defined(__SATCE__) && defined(__SATCZ__)
+    | 0x02  /* Support of Network Access Name reuse indication for CLOSE CHANNEL related to packet data service bearer */
+#endif
+//  | 0x04  /* Event: Poll Interval Negotiation */
+//  | 0x08  /* ProSe usage information reporting */
+//  | 0x10  /* Proactive UICC: PROVIDE LOCAL INFORMATION (Supported Radio Access Technologies) */
+//  | 0x20  /* Event: WLAN Access status (if class "e" is supported) */
+//  | 0x40  /* WLAN bearer support (if class "e" is supported) */
+//  | 0x80  /* Proactive UICC: PROVIDE LOCAL INFORMATION (WLAN identifier of the current WLAN connection) */
+    ,
+
+    0x00    /* 34th */
+//  | 0x01  /* URI support for SEND SHORT MESSAGE */
+#if defined(__IMS_SUPPORT__)
+    | 0x02  /* IMS URI supported for SET UP CALL */
+#endif
+//  | 0x04  /* Media Type "Voice" supported for SET UP CALL and Call Control by USIM */
+//  | 0x08  /* Media Type "Video" supported for SET UP CALL and Call Control by USIM */
+//  | 0x10  /* Proactive UICC: PROVIDE LOCAL INFORMATION (E-UTRAN Timing Advance Information) */
+//  | 0x20  /* REFRESH with "eUICC Profile State Change" mode */
+//  | 0x40  /* Extended Rejection Cause Code in Event: Network Rejection for E-UTRAN */
+//  | 0x80  /* Proactive UICC: eUICC OPERATION */
+    ,
+
+    0x00    /* 35th */
+//  | 0x01  /* Proactive UICC: GET INPUT (Variable Time out) */
+//  | 0x02  /* Data Connection Status Change Event support - PDP Connection */
+//  | 0x04  /* Data Connection Status Change Event support - PDN Connection */
+//  | 0x08  /* REFRESH with "Application Update" mode (i.e. class "af" is supported) */
+//  | 0x10  /* RFU */
+//  | 0x20  /* RFU */
+//  | 0x40  /* RFU */
+//  | 0x80  /* RFU */
+    ,
+
+    0x00    /* 36th */
+//  | 0x01  /* Data Connection Status Change Event support - PDU Connection */
+    | 0x02  /* Event: Network Rejection for NG-RAN */
+//  | 0x04  /* Non-IP Data Delivery support (if class "e" and class "ai" are supported) */
+//  | 0x08  /* RFU */
+//  | 0x10  /* RFU */
+//  | 0x20  /* RFU */
+//  | 0x40  /* RFU */
+//  | 0x80  /* RFU */
+    ,
+#endif
+};
+
+/* AT&T V5.6 [MAUI_02356244] make EF_Terminal_support_table customized */
+ const kal_uint8 terminal_support_table[16] =
+{
+    0x01, /* Byte1: scan control application */
+
+    0x01, /* Byte2: network selection menu control application */
+
+    0x01, /* Byte3: acting HPLMN feature */
+
+#ifdef __UMTS_RAT__
+    0x01, /* Byte4: 3G Access */
+#else
+    0x00,
+#endif
+
+    0x00, /* Byte5: RAT Balancing is Not supported. set as 0x00 */
+
+    0x00, /* Byte6: According to the AT&T spec. V5.6, we should always set this byte to 0 even if we support BIP*/
+
+/* Byte7: LTE/NR Support flag */
+#if defined(__NR_RAT__) && defined(__NR_SA__) && defined(__DEFAULT_ENABLE_SA__)
+    #if defined(__GSM_RAT__) || defined(__UMTS_RAT__)
+        #ifdef __VOLTE_SUPPORT__
+            0x09, /* If NR SA Data and Voice using IMS and CSFB then set 0x09 */
+        #else
+            0x08, /* If NR SA Data and Voice using CSFB only then set 0x08 */
+        #endif
+    #else
+        0x07,     /* If NR SA Data only then set value 0x07 */
+    #endif
+
+#elif __NR_RAT__
+    #if defined(__GSM_RAT__) || defined(__UMTS_RAT__)
+        #ifdef __VOLTE_SUPPORT__
+            0x06, /* If NR NSA Data and Voice using IMS and CSFB then set 0x06 */
+        #else
+            0x05, /* If NR NSA Data and Voice using CSFB only then set 0x05 */
+        #endif
+    #else
+        0x04,     /* If NR NSA Data only then set value 0x04 */
+    #endif
+
+#elif __LTE_RAT__
+    #if defined(__GSM_RAT__) || defined(__UMTS_RAT__)
+        #ifdef __VOLTE_SUPPORT__
+            0x03, /* Byte7: If LTE Data and Voice using IMS and CSFB then set 0x03 */
+        #else
+            0x02, /* If LTE Data and Voice using CSFB only then set 0x02 */
+        #endif
+    #else
+        0x01,     /* If LTE Data only then set value 0x01 */
+    #endif
+#else
+    0x00,
+#endif
+
+#ifdef __CSG_SUPPORT__
+#if defined(__LTE_RAT__)
+    0x01, /* Byte8: 3G CSG functionality */
+    0x01, /* Byte9: 4G CSG functionality */
+#else
+    0x01, /* Byte8: 3G CSG functionality */
+    0x00, /* Byte9: 4G CSG functionality */
+#endif
+#else
+    0x00, /* Byte8: 3G CSG functionality */
+    0x00, /* Byte9: 4G CSG functionality */
+#endif
+
+    0x00, /* Byte10: MTC Device Category */
+    0x00  /* Byte11: MTC Supported Flag */
+//  | 0x01  /* NAS Signaling Priority support */
+//  | 0x02  /* Minimum Periodic Search Timer support */
+//  | 0x04  /* Extended Access Barring support */
+//  | 0x08  /* Timer T3245 support */
+//  | 0x10  /* Override NAS Signaling Low Priority support */
+//  | 0x20  /* Override Extended Access Barring support */
+//  | 0x40  /* SM-Retry Wait Time support */
+//  | 0x80  /* Delay Tolerant Access support */
+    ,
+    0x00  /* Byte12: MTC Supported Flag */
+//  | 0x01  /* Power Saving Mode (PSM) support */
+//  | 0x02  /* Coverage Enhancement Mode A (CEModeA) support */
+//  | 0x04  /* Coverage Enhancement Mode b (CEModeB) support */
+//  | 0x08  /* Idle Mode Extended Discontinuous Reception (eDRx-IM) support */
+//  | 0x10  /* Connected Mode Extended Discontinuous Reception (eDRx-CM) support */
+//  | 0x20  /* Device Based Positioning support */
+//  | 0x40  /* Single Cell - Point to Multipoint Transmission (SC-PTM) support */
+//  | 0x80  /* RFU */
+    ,
+    0x00  /* Byte13: MTC Supported Flag */
+//  | 0x01  /* RFU */
+//  | 0x02  /* RFU */
+//  | 0x04  /* RFU */
+//  | 0x08  /* RFU */
+//  | 0x10  /* RFU */
+//  | 0x20  /* RFU */
+//  | 0x40  /* RFU */
+//  | 0x80  /* RFU */
+    ,
+    0x00, /* Byte14: RFU */
+    0x00, /* Byte15: RFU */
+    0x00  /* Byte16: RFU */
+};
+
+kal_uint8 sim_ef_sst_default[MAX_SST_LEN] = 
+{
+    0xDF,
+    0xFF,
+    0xFF,
+    0xFF,
+    0xFF,
+    0xFF,
+    0xFF,
+    0xCF,
+    0xFF,
+    0xFF,
+    0xFF,
+    0xFF,
+    0xFF,
+    0xFF,
+    0xFF,
+    0xFF,
+    0xFF
+};
+
+/* AT&T RPM Version data, to update EF_RPM_VERSION_IMPLEMENTED(FILE_RPM_VERSION_IDX / FILE_U_RPM_VERSION_IDX) */
+const kal_uint8 rpm_version_data = 0;
+// Value Definition
+//   0x00          - No Version Information (i.e. not support)
+//   0x01 ~ 0xFF   - Version Number
+
+
+static kal_uint8 sat_startup_config = 0;  // Default setting (SAT auto start)
+#ifdef __SIM_RECOVERY_SWITCH__
+static kal_bool sim_recovery_switch = KAL_TRUE; //Default sim recovery is on.
+#endif
+#if defined (__SAT_ADDITIONAL_LOCK__) || defined(__CMCC_V4__) || defined(__YUENAN_V4__)
+STCHE che_str_mh;
+extern void che_init(STCHE *che_context, kal_uint32 type);
+extern void che_deinit(STCHE *che_context);
+#endif
+
+#if defined(__CMCC_V4__) || defined(__YUENAN_V4__) || defined(__SAT_ADDITIONAL_LOCK__)
+ /*Che encrypt process*/
+void custom_sat_me_encrypt(kal_uint8 *rand, kal_uint8 rand_len, kal_uint8 *key, kal_uint8 key_len, kal_uint8 *code)
+{
+     kal_bool che_result = KAL_FALSE;
+     kal_uint8 i;
+
+     che_init(&che_str_mh, CHE_3DES);
+     che_key_action(&che_str_mh, CHE_SET_KEY, key, key_len);
+     che_result = che_process(&che_str_mh, CHE_3DES, CHE_ECB, CHE_ENC, rand, code, rand_len, KAL_TRUE);
+     che_deinit(&che_str_mh);
+
+     kal_prompt_trace(MOD_SIM, "che_result = %d,rand_len = %d", che_result,rand_len);
+
+     for (i = 0; i < rand_len/16; i++)
+     {
+         SIM_TRACE(TRACE_INFO,
+                   INFO_SIM_ENCYPTED_CODE,
+                   i,
+                   code[i * 16 + 0],code[i * 16 + 1],code[i * 16 + 2],code[i * 16 + 3],
+                   code[i * 16 + 4],code[i * 16 + 5],code[i * 16 + 6],code[i * 16 + 7],
+                   code[i * 16 + 8],code[i * 16 + 9],code[i * 16 + 10],code[i * 16 + 11],
+                   code[i * 16 + 12],code[i * 16 + 13],code[i * 16 + 14],code[i * 16 + 15]);
+     }
+}
+#endif  /* All Addition Lock */
+
+#if defined(__CMCC_V4__) || defined(__YUENAN_V4__)
+ /*Decentralization process*/
+void custom_sat_v4_decen_process(kal_uint8 *X, kal_uint8 *Km, kal_uint8 *Kc)
+{
+    kal_uint8 i;
+    kal_uint8 Kcl[16];  //8+8 for che_process
+    kal_uint8 Kcr[16];  //8+8 for che_process
+
+    kal_prompt_trace(MOD_SIM, "[V4]V4DecenProcess");
+
+    SIM_TRACE(TRACE_INFO, INFO_V4_SIM_X8, X[0],X[1],X[2],X[3],X[4],X[5],X[6],X[7]);
+
+    custom_sat_me_encrypt(X, 8, Km, 24, Kcl);
+
+    kal_mem_set(Kc, 0x00, 24);
+    kal_mem_cpy(Kc, Kcl, 8);
+    kal_mem_cpy(Kc+16, Kcl, 8);
+
+    for(i = 0; i < 8; i++)
+    {
+        X[i] = ~X[i];
+    }
+
+    SIM_TRACE(TRACE_INFO, INFO_V4_SIM_X8, X[0],X[1],X[2],X[3],X[4],X[5],X[6],X[7]);
+
+    custom_sat_me_encrypt(X, 8, Km, 24, Kcr);
+
+    kal_mem_cpy(Kc + 8, Kcr, 8);
+
+    SIM_TRACE(TRACE_INFO,
+              INFO_V4_SIM_KC,
+              Kc[0], Kc[1],Kc[2], Kc[3],
+              Kc[4], Kc[5],Kc[6], Kc[7],
+              Kc[8], Kc[9], Kc[10], Kc[11],
+              Kc[12], Kc[13], Kc[14], Kc[15],
+              Kc[16], Kc[17], Kc[18], Kc[19],
+              Kc[20], Kc[21], Kc[22], Kc[23]);
+}
+#endif
+
+#ifdef __SAT_ADDITIONAL_LOCK__
+kal_uint8 Factory_CODE = 0x04;
+
+kal_uint8 me_RND[8] = {0};
+kal_uint8 sim_RND[8] = {0};
+kal_uint8 sim_CODE1[8] = {0};
+kal_uint8 me_CODE[8] = {0};
+kal_uint8 me_key_group[16][16] = {0};
+
+kal_uint8 update_terminal_profile(kal_uint8 *profile_ptr)
+{
+    kal_uint8 i;
+
+    for (i = 0; i < 8; i++)
+    {
+        me_RND[i] = rand();
+    }
+
+    profile_ptr[MAX_SIM_PROFILE_LEN] = Factory_CODE;
+    kal_mem_cpy(&profile_ptr[MAX_SIM_PROFILE_LEN + 1], &me_RND[0], 8);
+}
+
+void custom_sat_get_key_from_rand(kal_uint8 *rand, kal_uint8 *key)
+{
+    kal_uint8 i;
+    kal_uint8 keyIndex;
+    keyIndex = (rand[0]&0xF0) >> 4;
+    kal_prompt_trace(MOD_SIM, "[JS]keyIndex=%d, rand[0]= %x", keyIndex, rand[0]);
+
+    memcpy(key, me_key_group[keyIndex], 8);
+    memcpy(key + 8, me_key_group[keyIndex]+8, 8);
+    memcpy(key + 16, me_key_group[keyIndex], 8);
+
+    SIM_TRACE(TRACE_INFO,
+              INFO_JS_SIM_KEY,
+              key[0], key[1], key[2], key[3],
+              key[4], key[5], key[6], key[7],
+              key[8], key[9], key[10], key[11],
+              key[12], key[13], key[14], key[15],
+              key[16], key[17], key[18], key[19],
+              key[20], key[21], key[22], key[23]);
+}
+
+kal_bool custom_sat_me_verify_process( )
+{
+    kal_uint8 me_Key[24];
+    kal_uint8 me_Code1[8+8];    //According to che_process, the length of dest should be 8 bytes bigger than sourc_length
+
+    kal_uint8 sim_Key[24];
+    kal_uint8 me_Code2[8+8];
+    kal_uint8 i;
+
+    memset(me_Key, 0x00, 24);
+    memset(me_Code1, 0x00, 16);
+    memset(sim_Key, 0x00, 24);
+    memset(me_Code2, 0x00, 16);
+
+    custom_sat_get_key_from_rand(me_RND, me_Key);
+    custom_sat_me_encrypt(me_RND, 8, me_Key, 24, me_Code1);
+
+    if (!kal_mem_cmp(me_Code1, sim_CODE1, 8))
+    {
+         kal_prompt_trace(MOD_SIM, "[JS]Forward_veri_success");
+         custom_sat_get_key_from_rand(sim_RND, sim_Key);
+         custom_sat_me_encrypt(sim_RND, 8, sim_Key, 24, me_Code2);
+         kal_mem_cpy(me_CODE,me_Code2,8);
+
+         return KAL_TRUE;
+    }
+    else
+    {
+         kal_prompt_trace(MOD_SIM, "[JS]Foward_vefi_fail");
+
+         return KAL_FALSE;
+    }
+}
+
+kal_bool  custom_sat_additional_lock_switch()
+{
+    return KAL_TRUE;
+}
+#endif  /* __SAT_ADDITIONAL_LOCK__ */
+
+#ifdef __CMCC_V4__
+  /*You should change vendor_code, key_ver and des_key_group to the right one related with your encryption card*/
+kal_uint8 sim_RND[20] = {0};
+kal_uint8 cm[24] = {0};
+const kal_uint8 vendor_code = 0x02;
+const kal_uint8 key_ver = 0x01;
+const kal_uint8 des_key_group[5][16]=
+{
+    {0xC9,0x4E,0x13,0x6B,0xAB,0xE9,0xD0,0xEF,0x2F,0x6C,0x27,0xB1,0x22,0x96,0x37,0x76},
+    {0xEC,0x06,0x52,0x7E,0x58,0x8B,0xC4,0xB0,0x59,0xD0,0x83,0xDF,0x4C,0x47,0x1C,0xFD},
+    {0x59,0x4F,0xBC,0x28,0xCB,0xA8,0xB8,0x02,0x24,0xA3,0x08,0xE3,0x24,0x16,0x91,0xDA},
+    {0x8F,0x7F,0xB1,0x34,0xF7,0x61,0xB7,0xEA,0xFD,0x7E,0x37,0xBB,0x8E,0x00,0xC3,0x3F},
+    {0xEA,0x0D,0x04,0x8C,0xB5,0xA2,0xD9,0xBD,0x10,0xB7,0xD0,0xF2,0x5F,0x37,0xC7,0x8F}
+};
+kal_bool  custom_sat_cmcc_v4_lock_switch()
+{
+    return KAL_TRUE;
+}
+
+ /*Get Km form RND1*/
+void custom_sat_v4_get_km_from_rand(kal_uint8 *rand, kal_uint8 *Km)
+{
+    kal_uint8 i;
+    kal_uint8 key_index;
+
+    key_index = (rand[3] & 0X07) % 5;
+    kal_prompt_trace(MOD_SIM, "[CMCCV4]key_index=%d", key_index);
+
+    kal_mem_set(Km, 0x00, 24);
+    kal_mem_cpy(Km, des_key_group[key_index], 16);
+    kal_mem_cpy(Km+16, des_key_group[key_index], 8);    //for 3DES algthm, we should transform key to ABA style
+
+    SIM_TRACE(TRACE_INFO,
+              INFO_V4_SIM_KM,
+              Km[0], Km[1], Km[2], Km[3],
+              Km[4], Km[5], Km[6], Km[7],
+              Km[8], Km[9], Km[10], Km[11],
+              Km[12], Km[13], Km[14], Km[15],
+              Km[16], Km[17], Km[18], Km[19],
+              Km[20], Km[21], Km[22], Km[23]);
+
+}
+ /*Main encode flow*/
+void custom_sat_cmcc_v4_key_encode(kal_uint8 *sim_iccid )
+{
+    kal_uint8 RND1[4];
+    kal_uint8 RND2[16];
+    kal_uint8 Km[24];
+    kal_uint8 Kc[24];
+    kal_uint8 Kc_temp[24];
+    kal_uint8 X[8];
+    kal_uint8 i;
+
+    kal_prompt_trace(MOD_SIM, "[CMCCV4]V4KeyEncode");
+
+    kal_mem_set(RND1, 0x00, sizeof(RND1));
+    kal_mem_cpy(RND1, &sim_RND[0], 4);
+
+    kal_mem_set(RND2, 0x00, sizeof(RND2));
+    kal_mem_cpy(RND2, &sim_RND[4], 16);
+
+    /*Get Km with RND1 through spec*/
+    custom_sat_v4_get_km_from_rand(RND1, Km);
+
+    /*level-1 decentralization*/
+    kal_mem_set(X, 0x20, 8);            //Through spec, if the length of X is less than 8 byte, we should pad with 0x20
+    kal_mem_cpy(X, &sim_iccid[2], 8);
+    kal_mem_set(Kc_temp,0x00,24);
+    custom_sat_v4_decen_process(X, Km, Kc_temp);
+
+    /*level-2 decentralization*/
+    kal_mem_set(X, 0x20, 8);
+    kal_mem_cpy(X, &RND1[0], 4);
+    custom_sat_v4_decen_process(X, Kc_temp, Kc);
+
+    kal_mem_set(cm, 0x00, 24);
+    custom_sat_me_encrypt(RND2, 16, Kc, 24, cm);
+
+}
+/*Terminal response to sim after encoding*/
+#endif  /* __CMCC_V4__ */
+
+#ifdef __YUENAN_V4__
+kal_uint8 sim_RND[16] = {0};
+kal_uint8 cm[24] = {0};
+const kal_uint8 vendor_code = 0x09;
+const kal_uint8 key_ver = 0x01;
+const kal_uint8 des_key_group[16]=
+{
+   0x52,0x09,0x1F,0x76,0x2E,0x65,0x22,0xDF,
+   0xD3,0xFE,0xE6,0x3D,0x6A,0xBA,0x2C,0x88,
+};
+
+const kal_uint8 defaultText[24]=        //UCS2 "VNPHONE RAND"
+{0x00,0x56,0x00,0x4e,0x00,0x50,0x00,0x48,
+ 0x00,0x4f,0x00,0x4e,0x00,0x45,0x00,0x20,
+ 0x00,0x52,0x00,0x41,0x00,0x4e,0x00,0x44
+};
+
+kal_bool custom_sat_yuenan_v4_lock_switch()
+{
+    return KAL_FALSE;
+}
+
+void custom_sat_yuenan_v4_key_encode(kal_uint8 *sim_iccid)
+{
+    kal_uint8 Km[24];
+    kal_uint8 X[8];
+    kal_uint8 Kc[24];
+
+    kal_mem_set(Km, 0x00, 24);
+    kal_mem_cpy(Km, des_key_group, 16);
+    kal_mem_cpy(Km+16, des_key_group, 8);    //for 3DES algthm, we should transform key to ABA style
+
+    kal_mem_set(X, 0x20, 8);         //Through spec, if the length of X is less than 8 byte, we should pad with 0x20
+    kal_mem_cpy(X, sim_iccid+2, 8);
+
+    custom_sat_v4_decen_process(X, Km, Kc);
+
+    kal_mem_set(cm, 0x00, 24);
+    custom_sat_me_encrypt(sim_RND, 16, Kc, 24, cm);
+}
+#endif  /* __YUENAN_V4__ */
+
+ /*****************************************************************************
+ * FUNCTION
+ *  sim_ens_terminal_support_flag
+ * DESCRIPTION
+ *  make EF_Terminal_support_table customized
+ * PARAMETERS
+ *  pProfile        [?]
+ * RETURNS
+ *  void
+ * GLOBALS AFFECTED
+ *  void
+ *****************************************************************************/
+void sim_ens_terminal_support_flag(kal_uint8 *table_ptr, kal_uint8 len, kal_uint8 ps_id)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+
+    if (NULL != table_ptr)
+    {
+        if(len > sizeof(terminal_support_table))
+        {
+            kal_sys_trace("Exceed terminal_support_table size");
+            len = sizeof(terminal_support_table);
+        }
+
+        kal_mem_cpy(table_ptr, terminal_support_table, len);
+
+        if (sbp_query_md_feature_by_ps(SBP_ENS_RAT_BALANCING, ps_id) == KAL_TRUE)
+        {
+#if ((RAT_NEED_DISABLE & 2) == 2) /* disable 3G */
+			table_ptr[3] = 0x00;
+#else
+			table_ptr[3] = 0x01;
+#endif
+			table_ptr[4] = 0x01;
+        }
+        
+        #ifdef __TC10__
+        if (sbp_query_md_feature_by_ps(SBP_3G_CSG, ps_id) == KAL_FALSE)
+        {
+            table_ptr[7] = 0x00;
+        }
+        if (sbp_query_md_feature_by_ps(SBP_DISABLE_4G_CSG, ps_id) == KAL_TRUE)
+        {
+            table_ptr[8] = 0x00;
+        }
+        #endif
+    }
+}
+
+
+ /*****************************************************************************
+ * FUNCTION
+ *  custom_sim_reset_method
+ * DESCRIPTION
+ *  Determine the SIM card reset method to detch the card is USIM or SIM.
+ *      SIM_RESET_SMART_DETECTION : judge the card is USIM or SIM according to ATR.
+ *      SIM_RESET_USIM_PREFER : always try USIM first. Try SIM if trying USIM failed.
+ *      SIM_RESET_SIM_PREFER : always try SIM first. Try USIM if trying SIM failed.
+ * PARAMETERS
+ *  none
+ * RETURNS
+ *  sim_reset_method_enum
+ *****************************************************************************/
+sim_reset_method_enum custom_sim_reset_method(void) //mtk02514_reset
+{
+    return SIM_RESET_USIM_PREFER;
+}
+
+ /*****************************************************************************
+ * FUNCTION
+ *  custom_sat_provide_cell_in_sim
+ * DESCRIPTION
+ *  Let PROVIDE LOCAL INFORMATION - location stauts
+ *   return cell ID instead of E-Cell ID when using SIM
+ * PARAMETERS
+ *  none
+ * RETURNS
+ *  KAL_FALSE or KAL_TRUE
+ * NOTE:
+ *      Based on SAT spec 102.221 or 51.014, we should NOT provide eCell ID in SIM.
+ *      Only USAT should carry eCell ID in LOCATION INFO field in USIM
+ *****************************************************************************/
+kal_bool custom_sat_provide_cell_in_sim(void)
+{
+#if 1
+    return KAL_TRUE;
+#else
+    #ifdef __SAT_PROVIDE_CELL_IN_SIM__
+/* under construction !*/
+    #else
+/* under construction !*/
+    #endif
+#endif
+}
+
+ /*****************************************************************************
+ * FUNCTION
+ *  custom_sat_full_nr_location_info_in_non_5g_sim
+ * DESCRIPTION
+ *  To use the full NR location information (length = 11) in non-5G-UICC or not
+ *    KAL_TRUE:  Use 11 bytes NR location information even with non-5G-UICC
+ *    KAL_FALSE: Use only 9 bytes of NR location information with non-5G-UICC
+ * PARAMETERS
+ *  none
+ * RETURNS
+ *  KAL_FALSE or KAL_TRUE
+ *****************************************************************************/
+kal_bool custom_sat_full_nr_location_info_in_non_5g_sim(void)
+{
+    return KAL_FALSE;
+}
+
+
+void custom_sat_set_startup_config(kal_uint8 setting)
+{
+    sat_startup_config = setting;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_sat_startup_config
+* DESCRIPTION
+*  If USAT is halt due to at+cusatd=1, this function can control the USAT start timing.
+*  USAT can either start normally and sends BUSY for TE commands while TE is still not ready,
+*                      or start after TE notify it's ready by AT+CUSATA=1.
+*
+* PARAMETERS
+*  none
+* RETURNS
+*  KAL_FALSE or KAL_TRUE
+*****************************************************************************/
+kal_uint8 custom_sat_startup_config(void)
+{
+    /*
+        *   0: default setting (SAT auto startup)
+        *   1: enable SAT only triggered by AT+STKPCI
+        *   2: default setting but enable SAT by AT+CUSATA=1 while in AT+CUSATD=1
+        */
+    return sat_startup_config;
+}
+
+
+/*****************************************************************************
+* The determination of Test SIM has two ways:
+* CondA is MCC/MNC = 001/01,  CondB is EF_AD's ms_operation 0x80, 0x81, 0x02, 0x04
+*
+*      If (CondA || CondB), then return 0
+*      If (CondA && CondB), then return 1
+*
+*      The default value returns 0
+ *****************************************************************************/
+kal_uint8 test_SIM_relation(const kal_char *mcc_mnc_str)
+{
+    /* [MAUI_03181345] mtk81143: set test sim relation default OR for TD project*/
+#ifdef __TC10_6M_PR_NA__
+    kal_sys_trace("TestSIM_AND");
+    return 1;
+#else
+#ifdef __SUPPORT_TEST_SIM_RELATION_BY_PLMN__
+	/* To replace the string with your desired PLMN */
+	const kal_char *op_list[] = {
+										"26201"
+								};
+		
+	kal_uint8 op_list_count = sizeof(op_list)/sizeof(op_list[0]);
+	kal_uint8 index = 0;
+	kal_uint8 length = strlen(mcc_mnc_str);
+		
+	for (index = 0; index < op_list_count; index++)
+	{
+		if(length == strlen(op_list[index]))
+		{
+			if ((0 == (strncmp(op_list[index], mcc_mnc_str, length))))
+			{
+				kal_sys_trace("TestSIM_AND");
+				return 1;
+			}
+		}
+	}
+#endif
+
+	(void)(mcc_mnc_str);
+	kal_sys_trace("TestSIM_OR");
+    return 0;
+#endif
+}
+
+/***************************************************************************
+* This function configs how many times fast sim recovery trial could be performed
+* before MMI notify user that SIM card is lost.
+***************************************************************************/
+kal_uint8 custom_num_fast_recovery(void)
+{
+    return 3;
+}
+
+/***************************************************************************
+* After user is notifed SIM lost, ME will try to recover the SIM card at frequent intervals.
+* This function configs the time interval for each recovery trial.
+***************************************************************************/
+kal_uint8 custom_recovery_time_interval(void)
+{
+    return 30;
+    // The time unit is second.
+    // 30: the time interval for a SIM recovery trial is 30 seconds.
+}
+
+/***************************************************************************
+* After user is notifed SIM lost, ME will try to recover the SIM card at frequent intervals.
+* This function configs the maximum count of recovery trial.
+***************************************************************************/
+kal_uint16 custom_max_recovery_count(void)
+{
+    return 0xFFFF;
+    // 0: no recovery trial after MMI is notified SIM lost.
+    // 100: there will be at most 100 recovery tial after MMI is notified SIM lost.
+    // 0xFFFF: there is no limit of SIM recovery trial.
+}
+
+/***************************************************************************
+* After user is notifed SIM ACCESS ERROR(card existed but detect fail),
+* ME will try to recover the SIM card at frequent intervals.
+* This function configs the function is enabled or disalbed.
+***************************************************************************/
+kal_uint8 custom_retry_sim_when_card_detect_fail()
+{
+#if (defined(__RETRY_SIM_WHEN_CARD_DETECT_FAIL__) || defined(__SIM_EXTEND_RECOVERY_PATTERN__)) && !defined (__MODEM_COMMON_PACKAGE_LOW_POWER_FEATURE__)
+    return KAL_TRUE;
+#else
+    return KAL_FALSE;
+#endif
+}
+#if (defined(__RETRY_SIM_WHEN_CARD_DETECT_FAIL__) && defined(__RETRY_SIM_DETECT_CUSTOM_SUPPORT__)) || defined(__SIM_EXTEND_RECOVERY_PATTERN__)
+/* *************************************************************************
+*ME will try to recover the card in frequent intervals as given by the function
+***************************************************************************/
+kal_uint16 custom_max_retry_detect_card_count(void)
+{
+#ifdef CUSTOM_MAX_RETRY_DETECT_CARD_COUNT
+    kal_sys_trace("custom retry detect card count");
+    return CUSTOM_MAX_RETRY_DETECT_CARD_COUNT;
+#else
+  #ifdef __TC10__
+    return 1;
+  #else
+    //return 0xFFFF;
+    return 3;
+  #endif
+#endif
+}
+
+/**************************************************************************
+*This function configures the time interval for each card retry detect trial
+**************************************************************************/
+kal_uint8 custom_retry_detect_card_time_interval(void)
+{
+    return 30;
+}
+#endif
+
+/**************************************************************************
+*This function configs the maximum count of recovery trial when sim is not detected during bootup
+**************************************************************************/
+kal_uint16 custom_max_recovery_count_when_no_sim(void)
+{
+    #ifdef __SIM_RETRY_WHEN_CARD_DETECT_FAIL_DURING_BOOTUP__
+        return 20;
+	#else
+	    return custom_max_recovery_count();
+	#endif
+}
+
+#ifdef __MAX_RECOVERY_COUNT_TILL_SIM_READY__
+/***************************************************************************
+* After user is notifed SIM lost before usim/sim initialization is completed, ME will try to recover the SIM card at frequent intervals.
+* This function configs the maximum count of recovery trial to 100.
+***************************************************************************/
+kal_uint16 custom_max_recovery_count_till_sim_ready(void)
+{
+    return 100;  // Recomended to keep min size greater than 10. 
+}
+#endif
+
+
+#ifdef __SIM_EXTEND_RECOVERY_PATTERN__
+/*****************************************************************************
+*
+* Custom varables for SIM_EXTEND_RECOVERY_PATTERN
+*
+ *****************************************************************************/
+const kal_uint16 extern_recovery_pattern[] =
+{
+    10, 20, 40, 80, 160
+};
+
+/*****************************************************************************
+*
+* Custom functions for SIM_EXTEND_RECOVERY_PATTERN
+*
+ *****************************************************************************/
+/**************************************************************************
+*This function configs the retry timer pattern when detecting as card drop
+**************************************************************************/
+sim_recovery_timer_pattern_enum custom_sim_extend_recovery_pattern_card_drop(void)
+{
+    // SIM_RECOVERY_TIMER_CONSTANT: Constant timer (ex: 30s)
+    // SIM_RECOVERY_TIMER_LADDER: Ladder-type timer (ex: 2s, 4s, 8s, 16s, ...)
+    // SIM_RECOVERY_TIMER_CUSTOM: Customized timer (ex: 10s, 20s, 40s, ...)
+
+    return SIM_RECOVERY_TIMER_LADDER;
+}
+
+/**************************************************************************
+*This function configs the max retry count when detecting as card drop
+**************************************************************************/
+kal_uint16 custom_sim_extend_recovery_max_count_card_drop(void)
+{
+    if (SIM_RECOVERY_TIMER_CUSTOM == custom_sim_extend_recovery_pattern_card_drop())
+    {
+        return (sizeof(extern_recovery_pattern) / sizeof(extern_recovery_pattern[0]));
+    }
+
+    return 10;
+}
+
+/**************************************************************************
+*This function configs the retry timer factor when detecting as card drop
+**************************************************************************/
+kal_uint8 custom_sim_extend_recovery_timer_factor_card_drop(void)
+{
+    // Factor depending on recovery pattern
+    // SIM_RECOVERY_TIMER_CONSTANT: Constant timer (ex: 30s)
+    // SIM_RECOVERY_TIMER_LADDER: Ladder-type timer (ex: 2s, 4s, 8s, 16s, ...)
+    return 2;
+}
+
+/**************************************************************************
+*This function retrieve the retry timer pattern when detecting as card drop
+**************************************************************************/
+const kal_uint16 *custom_sim_extend_recovery_timer_pattern_card_drop(void)
+{
+    return &extern_recovery_pattern[0];
+}
+#endif
+
+/**************************************************************************
+* This function configures whether Dual SIM hot swap co-deck is supported
+**************************************************************************/
+kal_bool custom_dual_sim_hot_swap_co_deck_support(void)
+{
+#ifdef __DUAL_SIM_HOT_SWAP_CO_DECK_SUPPORT__
+        return KAL_TRUE;
+#else
+        return KAL_FALSE;
+#endif
+}
+#ifdef __SIM_RECOVERY_SWITCH__
+/*****************************************************************************
+* FUNCTION
+*  custom_sim_recovery_switch_config
+* DESCRIPTION
+*  Set sim recovery on or off.
+*   
+* PARAMETERS
+*  on, KAL_TRUE, switch on sim recovery, KAL_FALSE, switch off sim recovery.
+* RETURNS
+*  void
+*****************************************************************************/
+void custom_sim_recovery_switch_config(kal_bool on)
+{
+	sim_recovery_switch = on;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_get_sim_recovery_switch
+* DESCRIPTION
+*  Get the setting of recovery sim siwtch.
+*   
+* PARAMETERS
+*  none
+* RETURNS
+*  KAL_FALSE or KAL_TRUE
+*****************************************************************************/
+kal_bool custom_get_sim_recovery_switch(void)
+{
+	return sim_recovery_switch;
+}
+#endif
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#ifndef __UMTS_TDD128_MODE__ /*based on [ALPS00383584]*/
+/* under construction !*/
+#else
+/* under construction !*/
+#endif
+/* under construction !*/
+#endif
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_select_aid_by_default()
+ * DESCRIPTION
+ *  Determine to set p2 value when select aid in +CCHO
+ *      KAL_TRUE: (default) set p2 to 0x0C then 0x00
+ *      KAL_FALSE : set p2 to 0x00 then 0x0c
+ * PARAMETERS
+ *  none
+ * RETURNS
+ *  KAL_FALSE or KAL_TRUE
+ *****************************************************************************/
+kal_bool custom_select_aid_by_default(void)
+{
+#ifdef __SELECT_AID_CUSTOMIZE__
+    return KAL_FALSE;
+#else
+    return KAL_TRUE;
+#endif /* __SELECT_AID_CUSTOMIZE__ */
+}
+
+
+/*  UICC driver need to know the 'le' field in APDU before processing the APDU command.
+  *  For proprietary UICC command, please parse the 'le' value in this function.
+  *  If le is present : value shall be 0~256 at most
+  *  if le is not present : rx_data_size set to 0                                                                   */
+/*MOLY00003203 AT+CGLA extension support for customized INS for NFC, by mtk81143*/
+kal_bool custom_apdu_cmd_le( kal_uint8 *tx_data,kal_uint16 *tx_data_size, kal_uint32 *rx_data_size)
+{
+	kal_bool  result = KAL_TRUE;
+	*rx_data_size = 0;
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+    return result;
+}
+
+#if defined (__SIM_HOT_SWAP_POLL_TIMER__) || defined(__SIM_HOT_SWAP_POLL_TIMER_EXT__)
+kal_uint8 custom_hot_swap_poll_time_interval(void)
+{
+    return 2;
+    // The time unit is second.
+    // 2: the time interval for a SIM hotswap to temporarily change the polling time to 2 seconds.
+}
+#endif
+
+#ifdef __SIM_HOT_SWAP_POLL_TIMER_EXT__
+ kal_uint8 custom_hot_swap_poll_ext_time_interval(void)
+ {
+     return 1; // The time unit is second.
+ }
+
+ kal_uint8 custom_hot_swap_check_exist_time(void)
+ {
+     return 28;  // The time unit is second.
+ }
+ 
+ #endif
+
+ /*****************************************************************************
+ * FUNCTION
+ *  custom_sim_terminal_capability_power_supply
+ * DESCRIPTION
+ *  This function is used to indicate that terminal needs more power
+ *  than the minmum power supply.
+ * PARAMETERS
+ *  actual_voltage_class        [IN]
+ *  power_data                    [OUT]
+ *      power_data[0] :  Actual used Supply voltage class
+ *      power_data[1] :  Maximum available power supply of the terminal
+ *      power_data[2] :  Actual used clock frequency
+ * RETURNS
+ *  KAL_FALSE or KAL_TRUE : need this TLV or not
+ *****************************************************************************/
+kal_bool custom_sim_terminal_capability_power_supply(kal_uint8 *power_supply_data)
+{
+
+    power_supply_data[1] = 0x0A;
+    power_supply_data[2] = 0x0A;
+
+    /*
+    * Please don't switch this return to KAL_TRUE,
+    * if you have requirement about this item, please contact with SIM owner
+    */
+
+    return KAL_FALSE;
+}
+
+ /*****************************************************************************
+ * FUNCTION
+ *  custom_sim_extended_logical_channel_support
+ * DESCRIPTION
+ *  This function is used to indicate that terminal support extended logical channel or not
+ * PARAMETERS
+ *  N/A
+ * RETURNS
+ *  KAL_FALSE or KAL_TRUE : need this TLV or not
+ *****************************************************************************/
+kal_bool custom_sim_extended_logical_channel_support(void)
+{
+    return KAL_TRUE;
+}
+
+ /*****************************************************************************
+ * FUNCTION
+ *  custom_sim_addition_interfaces_support
+ * DESCRIPTION
+ *  This function is used to indicate that terminal support additional interfaces
+ * PARAMETERS
+ *  N/A
+ * RETURNS
+ *  KAL_FALSE or KAL_TRUE : need this TLV or not
+ *****************************************************************************/
+kal_bool custom_sim_addition_interfaces_support(kal_uint8 *interfaces)
+{
+    interfaces[0] = 0x00;   // UICC-CLF supportted
+
+    return KAL_TRUE;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_sim_euicc_capability_support
+ * DESCRIPTION
+ *  This function is used to indicate that terminal support consumer eUICC LPA
+ * PARAMETERS
+ *   N/A
+ * RETURNS
+ *  bitmask refer to GSMA SGP.22 3.4.2
+ *****************************************************************************/
+kal_uint8 custom_sim_euicc_capability_support(void)
+{
+    return 0x07; //(SIM_EUICC_LUI_SUPPORTED | SIM_EUICC_LPD_SUPPORTED | SIM_EUICC_LDS_SUPPORTED)
+}
+
+
+/*****************************************************************************
+* Some SIM cards do not follow the rule to invalidate IMSI, and LOCI when FDN/BDN is
+* enabled, to compatible with these type of SIM cards, function shall return KAL_TRUE to
+* bypass invalid check.Tthe default value shall return KAL_TRUE
+ *****************************************************************************/
+kal_bool bypass_invalid_check(void)
+{
+    return KAL_TRUE;
+}
+
+
+kal_uint8 custom_sat_additional_lock_switch(void)
+{
+    return 1; /*
+               * 1: turn on
+               * 0: turn off
+               */
+
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  custom_sat_is_report_end_session_on_cmd_types
+* DESCRIPTION
+*  This function is used to control if the device will report SAT session end ("+STKPCI: 2")
+*  based on the command detail (command type and command qualifier)
+* PARAMETERS
+*  cmd_type         [IN]    the proactive command type
+*  cmd_qual         [OUT]   the command qualifier defined in command detail TLV
+* RETURNS
+*  KAL_FALSE or KAL_TRUE : To report end session for this command or not
+* NOTE
+*  Leave the return value as KAL_TRUE, for default setting
+* CAUTION
+*  If there is no SAT session end, it may cause AP stucking in STK Menu
+*****************************************************************************/
+kal_bool custom_sat_is_report_end_session_on_cmd_types(kal_uint8 cmd_type, kal_uint8 cmd_qual)
+{
+    /* Default Setting: */
+    return KAL_TRUE;
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+}
+
+
+#ifndef L4_NOT_PRESENT
+kal_bool custom_sat_manual_pin_verify_in_refresh_reset(kal_uint8 psId , const kal_char *mcc_mnc_str)
+{
+    /*
+     * KAL_TURE: User have to do PIN verify while in REFRESH reset.
+     * KAL_FALSE: Modem will auto verify the PIN while in REFRESH reset
+     */
+
+	if (psId >= MAX_SIM_NUM)
+	{
+        DEBUG_ASSERT(0);
+        return KAL_FALSE;
+    }
+
+	if (sbp_query_md_feature_by_ps(SBP_SAT_MANUAL_VERIFY_IN_REFRESH_RESET, psId) == KAL_TRUE)
+	{
+		return KAL_TRUE;
+	}
+	else
+	{
+		const kal_char *op_list[] = {
+                                     "334050","334090","21403", "21401"
+                                    };
+                    
+
+		kal_uint8 op_list_count = sizeof(op_list)/sizeof(op_list[0]);
+		kal_uint8 index = 0;
+
+		for (index = 0; index < op_list_count; index++)
+		{
+			if (0 == (strncmp(op_list[index], mcc_mnc_str, 6)))
+			{
+				return KAL_TRUE;
+            }
+        }
+    
+		return KAL_FALSE;
+	}
+
+}
+#endif /* L4_NOT_PRESENT */
+
+kal_bool custom_sat_clear_loci_rplmn_on_sat_refresh(void)
+{
+    /*
+     * KAL_TURE: clear RPLMN while clearing LOCI files.
+     * KAL_FALSE: dont clear RPLMN while clearing LOCI files
+     */
+    return KAL_FALSE;
+}
+
+kal_bool custom_sat_clear_loci_on_sat_refresh(sat_refresh_type_enum refresh_type)
+{
+    /*
+     * KAL_TURE: Clear temporary mobile identities in SIM (EF_LOCI/EF_PSLOCI/EF_EPSLOCI)
+     * KAL_FALSE: No effect
+     */
+    kal_bool result = KAL_FALSE;
+
+    switch (refresh_type)
+    {
+        case TYPE_NAA_INIT_AND_FULL_FILE_CHANGE:
+            result = KAL_FALSE;
+            break;
+
+        case TYPE_NAA_INIT:
+        case TYPE_NAA_APPLICATION_RESET:
+        case TYPE_NAA_SESSION_RESET:
+            result = KAL_FALSE;
+            break;
+
+        case TYPE_NAA_INIT_AND_FILE_CHANGE:
+            /* if TRUE, it will bypass IMSI check in file list to clear LOCI
+                          SBP_CLEAR_LOCI_WHEN_REFRESH_INIT_FCN should be disabled to bypass IMSI check*/
+            result = KAL_FALSE;
+            break;
+
+        case TYPE_SIM_RESET:
+            /* No Impact, controlled by SBP SBP_CLEAR_LOCI_WHEN_UICC_RESET */
+            result = KAL_FALSE;
+            break;
+
+        case TYPE_STEERING_OF_ROAMING:
+            /* clear loci not supported for this type */
+            result = KAL_FALSE;
+            break;
+
+        default:
+            break;
+    }
+
+    return result;
+}
+
+kal_bool custom_sat_send_tr_success_for_delayed_refresh_file_change(void)
+{
+	 /*
+	* KAL_TRUE: send TR successful for refresh type: SIM init and File Change
+	* KAL_FALSE: send TR fail for refresh type: SIM init and File change
+	*/
+	 return KAL_FALSE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_sat_allow_call_ctrl_by_sim
+* DESCRIPTION
+*  This function is used to allow call control by SIM when SIM error is responsed
+*   KAL_TRUE: allow call control by SIM when SIM error
+*   KAL_FALSE: not allow
+* PARAMETERS
+*  N/A
+* RETURNS
+*  KAL_FALSE or KAL_TRUE
+*****************************************************************************/
+kal_bool custom_sat_allow_call_ctrl_by_sim(void)
+{
+    return KAL_TRUE;
+}
+
+ /*****************************************************************************
+ * FUNCTION
+ *  custom_sim_get_first_aid
+ * DESCRIPTION
+ *  This function is used to make sure the first USIM AID is seleceted
+ *   KAL_TRUE: select first USIM AID
+ *   KAL_FALSE: select last USIM AID
+ * PARAMETERS
+ *  N/A
+ * RETURNS
+ *  KAL_FALSE or KAL_TRUE
+ *****************************************************************************/
+kal_bool custom_sim_get_first_aid(void)
+{
+    return KAL_TRUE;
+}
+
+  /*****************************************************************************
+ * FUNCTION
+ *  custom_sim_deactive_UICC_presence_detection
+ * DESCRIPTION
+ *  This function is used to skip the UICC presence detection
+ *   KAL_TRUE: skip UICC presence detection
+ *   KAL_FALSE: maintain UICC presence detection
+ * PARAMETERS
+ *  N/A
+ * RETURNS
+ *  KAL_FALSE or KAL_TRUE
+ *****************************************************************************/
+kal_bool custom_sim_deactive_UICC_presence_detection(kal_uint8 psId)
+{
+    if (sbp_query_md_feature_by_ps(SBP_DEACTIVATE_UICC_PRESENCE_DETECTION, psId) == KAL_FALSE)
+    {
+        return KAL_FALSE;  //should be set to KAL_FALSE in CTA test
+    }
+    else
+    {
+        return KAL_TRUE;
+    }
+
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_sim_retry_read_record
+ * DESCRIPTION
+ *  This function is used to retry reading record if the sw=0x6984/0x6F00
+ *   KAL_TRUE: retry
+ *   KAL_FALSE: not retry
+ * PARAMETERS
+ *  N/A
+ * RETURNS
+ *  KAL_FALSE or KAL_TRUE
+ *****************************************************************************/
+kal_bool custom_sim_retry_read_record(void)
+{
+#ifdef __RETRY_READ_RECORD_WHEN_ABNORMAL_STATUS__
+    return KAL_TRUE;
+#else
+    return KAL_FALSE;
+#endif
+}
+
+/*****************************************************************************
+*
+*****************************************************************************/
+kal_uint8 is_HW_VERIFICATION_enabled(void)
+{
+    return 0;
+    // 0 - disable HW verification
+    // 1 - enable for SIM1 only
+    // 2 - enable for SIM2 only
+}
+
+
+/*****************************************************************************
+ * According to spec ,when processing SAT PALY TONE proactive command
+ * "If no duration is specified, the ME shall default to a duration determined by the ME manufacturer."
+ * Customer can define default duration for PLAY TONE command in this function
+ * For FTA testcase 27.22.4.5 PLAY TONE SEQ 1.1 Step61, it might need to enlarge the default duration
+ * time unit : 1ms
+ *****************************************************************************/
+kal_uint32 sat_PLAY_TONE_default_duration(void)
+{
+    return 5000; // 5 sec
+}
+
+/*****************************************************************************
+*FUNCTION
+* custom_en_auto_TR_handle
+*DESCRIPTION
+* This function is for customer to handle automatic TR while also sending STKPCI to AP.
+* AP should ignore such STKPCI when this function is enabled.
+*PARAMETERS
+* void
+*RETURN
+* TRUE:handle stksms and  auto TR while sending STKPCI to modem.
+* FALSE:handle stksms after receiving AT+STKSMS.
+*****************************************************************************/
+kal_bool custom_en_auto_TR_handle(void)
+{
+    return KAL_FALSE;
+}
+
+#if defined(__SAT_CUSTOM_POLL_TIMER__) //MAUI_02931261
+/*****************************************************************************
+ * The feature proposes is to change the status poll interval to a value greater then the one
+ * requested by the SIM card, in the case that it is shorter then a pre-defined customized value.
+ * Therefore, if the poll interval time requested by SIM card is less than the customized time value,
+ * then the latter shall be used as the poll interval.
+ * If, instead, the requested poll interval is greater than the flex value, then
+ * the time provided in the request command shall be used as the poll interval.
+ * The default value return 0 is to disable the feature
+ * time unit : TICKS (Please use KAL_TICKS_xxx marco)
+ *****************************************************************************/
+kal_uint32 sat_custom_poll_timer(void)
+{
+    //return (KAL_TICKS_30_SEC-KAL_TICKS_1_SEC*3-KAL_TICKS_500_MSEC); //current MTK default value is within 30 seconds (about 26.5 seconds)
+    return  (KAL_TICKS_30_SEC + KAL_TICKS_5_SEC +KAL_TICKS_1_SEC); //36 seconds
+    //return (KAL_TICKS_1_MIN + KAL_TICKS_3_SEC); // 1 minute and 3 seconds
+    //return 0;  //to disable this feature
+}
+#endif
+
+ /*****************************************************************************
+  * FUNCTION
+  *  custom_sim_trigger_refresh_reset
+  * DESCRIPTION
+  *  This function is used to indicate if fake refresh reset should be triggered after sms pp download
+  * PARAMETERS
+  *  N/A
+  * RETURNS
+  *  KAL_FALSE or KAL_TRUE : need this feature or not
+  *****************************************************************************/
+ kal_bool custom_sim_trigger_refresh_reset(void)
+ {
+	 return KAL_FALSE;
+ }
+
+ /*****************************************************************************
+ * FUNCTION
+ *  custom_sim_verify_adm_support
+ * DESCRIPTION
+ *  This function is used to indicate that terminal support verify ADM or not
+ * PARAMETERS
+ *  N/A
+ * RETURNS
+ *  KAL_FALSE or KAL_TRUE : need this feature or not
+ *****************************************************************************/
+kal_bool custom_sim_verify_adm_support(void)
+{
+    return KAL_TRUE;
+}
+
+  /*****************************************************************************
+  * FUNCTION
+  *  custom_sim_block_error_ef
+  * DESCRIPTION
+  *  This function is used to indicate if ef epsloci read should be blocked for invalid card
+  * PARAMETERS
+  *  N/A
+  * RETURNS
+  *  boolean
+  *****************************************************************************/
+
+ kal_bool custom_sim_block_error_ef(void)
+ {
+      return KAL_TRUE;
+ }
+
+   /*****************************************************************************
+   * FUNCTION
+   *  custom_fallback_to_sim_startup_error
+   * DESCRIPTION
+   *  This function is used to fallback to SIM init,if get error status during VERIFY pin
+   * PARAMETERS
+   *  N/A
+   * RETURNS
+   *  boolean
+   *****************************************************************************/
+
+  kal_bool custom_fallback_to_sim_if_pin_info_error(kal_uint16 status_word)
+  {
+
+      switch (status_word)
+      {
+           case 0x67FF:
+           case 0x6200:
+           case 0x6400:
+           case 0x6500:
+           case 0x6581:
+           case 0x6700:
+           case 0x6800:
+           case 0x6881:
+           case 0x6882:
+           case 0x6900:
+           case 0x6983:
+           case 0x6984:
+           case 0x6A81:
+           case 0x6A86:
+           case 0x6A88:
+           case 0x6B00:
+           case 0x6D00:
+           case 0x6E00:
+           case 0x6F00:
+           case 0x6FFF:
+           case 0x9300:
+               return KAL_FALSE;
+               break;
+
+           default:
+               return KAL_FALSE;
+               break;
+      }
+  }
+
+/*****************************************************************************
+* FUNCTION
+*  custom_sim_handle_unblock_pin_no_response_error
+* DESCRIPTION
+*  This function will allow ME to detect the card which do not response to UNBLOCK PIN command.
+*  ME will trigger SIM recovery when no response and skip issue UNBLOCK PIN later.
+* PARAMETERS
+*  status words
+* RETURNS
+*  boolean
+*****************************************************************************/
+kal_bool custom_sim_handle_unblock_pin_no_response_error(void)
+{
+    return KAL_TRUE;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_acc_class_value
+ * DESCRIPTION
+ *  This function is used to return custom acc class value
+ * PARAMETERS
+ *  N/A
+ * RETURNS
+ *  custom defined acc class value,
+ *  This function is applicable if ACC value received from card is zero
+ *MAINTAIN BY
+ *  NAS, AS
+ *****************************************************************************/
+kal_uint16 custom_acc_class_value(void)
+{
+#ifdef __NAS_AS_ALL_ZERO_ACC_MODIFY__
+    //kal_sys_trace("Invalid Acc Class file,and Custom value is Class0");
+    return 0x0001;
+#else
+    return 0x0000;
+#endif
+}
+
+ /*****************************************************************************
+ * FUNCTION
+ *  custom_sim_default_mnc_length
+ * DESCRIPTION
+ *  This function is used to indicate that default length of MNC (2 or 3)
+ * PARAMETERS
+ *  N/A
+ * RETURNS
+ *  2 or 3 : Default MNC Length
+ *****************************************************************************/
+#define MNC_IDX 3
+kal_uint8 custom_sim_default_mnc_length(const kal_char *sim_mcc, const kal_char *sim_mnc)
+{
+
+    const kal_char *op_list[] = {/* Countries with 3 digit MNC */
+                                 "365FFF", "344FFF", "722FFF", "364FFF", "342FFF", "348FFF", "346FFF",
+                                 "732FFF", "366FFF", "750FFF", "352FFF", "708FFF", "338FFF", "334FFF",
+                                 "330FFF", "356FFF", "358FFF", "360FFF", "376FFF",
+                                 /* Countries with mix(2/3) digit MNC, below list comprises 3 digit MNC PLMNs */
+                                 "257501", "338050", "262901", "250811", "50215F",
+                                 /* India */
+                                 "40502F", "40503F", "40504F", "40575F", "405799", "40580F", "40581F",
+                                 "40582F", "405834", "40584F", "40585F", "40586F", "40587F", "40588F",
+                                 "40590F", "40591F", "40592F"
+                                };
+
+
+    kal_uint8 op_list_count = sizeof(op_list)/sizeof(op_list[0]);
+    kal_uint8 index = 0;
+
+    for (index = 0; index < op_list_count; index++)
+    {
+        if (0 == (strncmp(op_list[index], sim_mcc, 3)))
+        {
+            if (0 == (strncmp(&op_list[index][MNC_IDX], sim_mnc , 3)))
+            {
+                return 3;
+            }
+            else if (0 == (strncmp(&op_list[index][MNC_IDX], "FFF", 3)))
+            {
+                return 3;
+            }
+            else if ((0 == (strncmp(&op_list[index][MNC_IDX], sim_mnc, 2)))
+                    && (op_list[index][MNC_IDX + 2] == 'F'))
+            {
+                return 3;
+            }
+            else if ((0 == (strncmp(&op_list[index][MNC_IDX], sim_mnc, 1)))
+                    && (op_list[index][MNC_IDX + 2] == 'F')
+                    && (op_list[index][MNC_IDX + 1] == 'F'))
+            {
+                return 3;
+            }
+        }
+    }
+
+    return 2;
+}
+ /*****************************************************************************
+ * FUNCTION
+ *  custom_sim_hardcode_mnc_length
+ * DESCRIPTION
+ *  This function is used to hardcode mnc length for differnet operators based on mcc-mnc(in case of wrong EF AD value)
+ * PARAMETERS
+ *  N/A
+ * RETURNS
+ *  2 or 3 : Default MNC Length
+ *****************************************************************************/
+ kal_uint8 custom_sim_hardcode_mnc_length(const kal_char *sim_mcc, const kal_char *sim_mnc)
+{
+
+    const kal_char *op_list[] = {/* Indian operators with 3 digit MNC */
+                                  "405025", "405026", "405027", "405028", "405029", "405030", "405031", "405032",
+                                  "405033", "405034", "405035", "405036", "405037", "405038", "405039", "405040",
+                                  "405041", "405042", "405043", "405044", "405045", "405046", "405047", "405750",
+                                  "405751", "405752", "405753", "405754", "405755", "405756", "405799", "405800",
+                                  "405801", "405802", "405803", "405804", "405805", "405806", "405807", "405808",
+                                  "405809", "405810", "405811", "405812", "405813", "405814", "405815", "405816",
+                                  "405817", "405818", "405819", "405820", "405821", "405822", "405823", "405824",
+                                  "405825", "405826", "405827", "405828", "405829", "405830", "405831", "405832",
+                                  "405833", "405834", "405835", "405836", "405837", "405838", "405839", "405840",
+                                  "405841", "405842", "405843", "405844", "405845", "405846", "405847", "405848",
+                                  "405849", "405850", "405851", "405852", "405853", "405854", "405855", "405856",
+                                  "405857", "405858", "405859", "405860", "405861", "405862", "405863", "405864",
+                                  "405865", "405866", "405867", "405868", "405869", "405870", "405871", "405872",
+                                  "405873", "405874", "405875", "405876", "405877", "405878", "405879", "405880",
+                                  "405881", "405882", "405883", "405884", "405885", "405886", "405908", "405909",
+                                  "405910", "405911", "405912", "405913", "405914", "405915", "405916", "405917",
+                                  "405918", "405919", "405920", "405921", "405922", "405923", "405924", "405925",
+                                  "405926", "405927", "405928", "405929", "405930", "405931", "405932",
+                                };
+
+    kal_uint8 op_list_count = sizeof(op_list)/sizeof(op_list[0]);
+    kal_uint8 index = 0;
+
+    for (index = 0; index < op_list_count; index++)
+    {
+        if (0 == (strncmp(op_list[index], sim_mcc, 3)))
+        {
+            if (0 == (strncmp(&op_list[index][MNC_IDX], sim_mnc , 3)))
+            {
+                return 3;
+            }
+            else if (0 == (strncmp(&op_list[index][MNC_IDX], "FFF", 3)))
+            {
+                return 3;
+            }
+            else if ((0 == (strncmp(&op_list[index][MNC_IDX], sim_mnc, 2)))
+                    && (op_list[index][MNC_IDX + 2] == 'F'))
+            {
+                return 3;
+            }
+            else if ((0 == (strncmp(&op_list[index][MNC_IDX], sim_mnc, 1)))
+                    && (op_list[index][MNC_IDX + 2] == 'F')
+                    && (op_list[index][MNC_IDX + 1] == 'F'))
+            {
+                return 3;
+            }
+        }
+    }
+
+    return 2;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_sim_default_imsi_length
+ * DESCRIPTION
+ *  This function is used to indicate whether to take the default length of imsi which is 8 bytes
+ * PARAMETERS
+ *  N/A
+ * RETURNS
+ *  boolean
+ *****************************************************************************/
+kal_bool custom_sim_default_imsi_length(void)
+{
+
+    return KAL_FALSE;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_sim_select_file_before_PIN1_operation()
+ * DESCRIPTION
+ * This function handles faulty SIM cards which needs ME to SELECT BY PATH a file in USIM directory
+ * before PIN1 operation
+ * If not done, card return 6A 82 on SELECT current durectory(7FFF), which is needed for PIN status
+ * enquiry.
+ * PARAMETERS
+ *  none
+ * RETURNS
+ *  KAL_FALSE or KAL_TRUE
+ *****************************************************************************/
+kal_bool custom_sim_select_file_before_PIN1_operation(void)
+{
+    return KAL_FALSE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_sat_change_limited_to_normal_for_ct_roaming
+* DESCRIPTION
+*  This function is to turn on/off the feature of changing limited service to normal service
+*    when CT card becomes roaming or homing.
+*  This feature is designed for the issue CT SIM cards that will not trigger PROVIDE LOCAL INFO
+*    for requesting the location information and REFRESH, after receive limited service event.
+*
+*  KAL_TRUE: turn on the feature of changing limited to normal service
+*  KAL_FALSE: turn off the faeture of changing limited to normal service
+* PARAMETERS
+*  N/A
+* RETURNS
+*  KAL_FALSE or KAL_TRUE
+*****************************************************************************/
+kal_bool custom_sat_change_limited_to_normal_for_ct_roaming(void)
+{
+    return KAL_TRUE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_sat_ussd_inform_user_when_no_alpha_id_present
+* DESCRIPTION
+*  This function is used to turn on/off the feature to display MMI popup when aplha identifier is not
+*  provided by the UICC in SEND USSD proactive command.
+*  Few SIM cards do not issue DISPLAY TEXT on receiving Terminal response of SEND USSD
+*  proactive command and hence user can not know result of USSD operation.
+*
+*  KAL_TRUE: Display MMI popup when no alpha id
+*  KAL_FALSE: Do not display MMI popup when no alpha id
+* PARAMETERS
+*  psId         [IN]    Current protocol ID
+*  mcc_mnc_str  [IN]    SIM card's MCC/MNC as an ASCII string
+* RETURNS
+*  KAL_FALSE or KAL_TRUE
+*****************************************************************************/
+kal_bool custom_sat_ussd_inform_user_when_no_alpha_id_present(kal_uint8 psId, const kal_char *mcc_mnc_str)
+{
+    if (sbp_query_md_feature_by_ps(SBP_SAT_USSD_INFORM_USER_WHEN_NO_ALPHA_ID, psId) == KAL_TRUE)
+    {
+        // SBP requests always inform user
+        return KAL_TRUE;
+    }
+    else
+    {
+        // Please replace "fffff"
+        const kal_char *op_list_inform[] = {
+                                            "fffff"
+                                           };
+        const kal_char *op_list_not_inform[] = {
+                                                "fffff"
+                                               };
+
+        kal_uint8 index = 0;
+        kal_uint8 op_list_inform_count = sizeof(op_list_inform)/sizeof(op_list_inform[0]);
+        kal_uint8 op_list_not_inform_count = sizeof(op_list_not_inform)/sizeof(op_list_not_inform[0]);
+
+        // Search for informing user
+        for (index = 0; index < op_list_inform_count; index++)
+        {
+            if (0 == (strncmp(op_list_inform[index], mcc_mnc_str, 6)))
+            {
+                return KAL_TRUE;
+            }
+        }
+
+        // Search for NOT informing user
+        for (index = 0; index < op_list_not_inform_count; index++)
+        {
+            if (0 == (strncmp(op_list_not_inform[index], mcc_mnc_str, 6)))
+            {
+                return KAL_FALSE;
+            }
+        }
+
+        return KAL_TRUE;    // Default: inform user
+    }
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_sat_ussd_not_inform_user_when_alpha_id_present
+* DESCRIPTION
+*  This function is used to turn on/off the feature to display MMI popup when aplha identifier IS
+*  provided by the UICC in SEND USSD proactive command.
+*  Few SIM cards issue DISPLAY TEXT on receiving Terminal response of SEND USSD
+*  proactive command and hence user may receive two result of USSD operation.
+*
+*  KAL_TRUE: Do not display MMI popup when valid alpha id present
+*  KAL_FALSE: Display MMI popup when valid alpha id present
+* PARAMETERS
+*  psId         [IN]    Current protocol ID
+*  mcc_mnc_str  [IN]    SIM card's MCC/MNC as an ASCII string
+* RETURNS
+*  KAL_FALSE or KAL_TRUE
+*****************************************************************************/
+kal_bool custom_sat_ussd_not_inform_user_when_alpha_id_present(kal_uint8 psId, const kal_char *mcc_mnc_str)
+{
+    if (sbp_query_md_feature_by_ps(SBP_SAT_USSD_NOT_INFORM_USER, psId) == KAL_TRUE) //always report +CUSD:3
+    {
+        return KAL_TRUE;
+    }
+    else
+    {
+        // Please replace "fffff"
+        const kal_char *op_list[] = {
+                                     "fffff"
+                                    };
+
+        kal_uint8 op_list_count = sizeof(op_list)/sizeof(op_list[0]);
+        kal_uint8 index = 0;
+
+        // Search for NOT informing user
+        for (index = 0; index < op_list_count; index++)
+        {
+            if (0 == (strncmp(op_list[index], mcc_mnc_str, 6)))
+            {
+                return KAL_TRUE;
+            }
+        }
+    }
+
+    return KAL_FALSE;   // Default: inform user, as spec requests
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_sim_if_ef_acc_mandatory()
+* DESCRIPTION
+* This function handles faulty SIM cards which does not have mandatory EF_ACC (File Id = 0x6F78)
+* PARAMETERS
+*  none
+* RETURNS
+*  KAL_FALSE or KAL_TRUE
+*****************************************************************************/
+kal_bool custom_sim_if_ef_acc_mandatory(void)
+{
+    return KAL_FALSE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_sim_retry_select_cdma_imsi_m
+* DESCRIPTION
+*  This function is used to retry SELECT EF_IMSI_M (Path: 0x7F, 0x25, 0x6F, 0x22) on failure.
+*  Note that this custom function applies only on first SELECT operation of ICC card
+* PARAMETERS
+*  status words
+* RETURNS
+*  boolean
+*****************************************************************************/
+kal_bool custom_sim_retry_select_cdma_imsi_m(kal_uint16 status_word)
+{
+    kal_bool ret_val = KAL_FALSE;
+
+    switch (status_word)
+    {
+        case 0x9404:
+        case 0x6702:
+        case 0x6E00:
+        case 0x6884:
+            ret_val = KAL_FALSE;
+            break;
+
+        default:
+            ret_val = KAL_FALSE;
+            break;
+    }
+
+    return ret_val;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_sim_handle_pin_verify_error
+* DESCRIPTION
+*  This function allows user to verify PIN again if card return errorneous status words when VERIFY PIN
+* PARAMETERS
+*  status words
+* RETURNS
+*  boolean
+*****************************************************************************/
+kal_bool custom_sim_handle_pin_verify_error(kal_uint16 status_word)
+{
+   kal_bool ret_val = KAL_FALSE;
+
+   switch (status_word)
+   {
+       case 0x6D00:
+           ret_val = KAL_FALSE;
+           break;
+
+       default:
+           ret_val = KAL_FALSE;
+           break;
+   }
+
+   return ret_val;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_sim_get_reset_setting
+* DESCRIPTION
+*  This function allows user to get the setting about controlling reset SIM card by user or not.
+* PARAMETERS
+*  none
+* RETURNS
+*  boolean
+*  KAL_FALSE, default value, the reset SIM method is controlled by modem.
+*  KAL_TRUE, the reset SIM method is controlled by user, then functions
+*  	custom_sim_get_max_reset_sim_card_times() and custom_sim_get_reset_sim_card_interval()
+*	can take effect.
+*****************************************************************************/
+kal_bool custom_sim_get_reset_setting()
+{
+	return KAL_FALSE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_sim_get_max_reset_sim_card_times
+* DESCRIPTION
+*  This function allows user to get the times about max reset SIM card.
+*  If want this fucntion to take effect, must set the return value of 
+*  custom_sim_get_reset_setting() as KAL_TRUE.
+* PARAMETERS
+*  none
+* RETURNS
+*  kal_uint8
+*****************************************************************************/
+kal_uint8 custom_sim_get_max_reset_sim_card_times()
+{
+	return 2;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_sim_get_max_reset_sim_card_times
+* DESCRIPTION
+*  This function allows user to get the interval between two reset SIM card.
+*  The unit is millisecond.
+*  If want this fucntion to take effect, must set the return value of 
+*  custom_sim_get_reset_setting() as KAL_TRUE.
+* PARAMETERS
+*  none
+* RETURNS
+*  kal_uint32
+*****************************************************************************/
+kal_uint32 custom_sim_get_reset_sim_card_interval()
+{
+	return 500;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_sim_set_test_sim
+* DESCRIPTION
+*  This function is used to check whether mcc-mnc belong to test sim list
+*  KAL_TRUE: detect as test sim
+*  KAL_FALSE: doesnt belong to test sim list, use normal flow
+* PARAMETERS
+*  N/A
+* RETURNS
+*  KAL_FALSE or KAL_TRUE
+*****************************************************************************/
+kal_bool custom_sim_set_test_sim(const kal_char *mcc_mnc_str )
+{
+
+    const kal_char *op_list[] = {
+                                 "00101", "00102", "99999","001010","001012",
+                                 "45001", "52036"
+                                };
+
+ 
+    kal_uint8 op_list_count = sizeof(op_list)/sizeof(op_list[0]);
+    kal_uint8 index = 0;
+    kal_uint8 length = strlen(mcc_mnc_str);
+
+    for (index = 0; index < op_list_count; index++)
+    {
+        if(length == strlen(op_list[index]))
+        {
+            if ((0 == (strncmp(op_list[index], mcc_mnc_str, length)))) 
+            {
+                return KAL_TRUE;
+            }
+        }
+    }
+
+    return KAL_FALSE;
+
+
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_sim_set_test_sim_kt
+* DESCRIPTION
+*  This function is used to check whether mcc-mnc belong to test sim list for KT 
+*  KAL_TRUE: detect as test sim
+*  KAL_FALSE: doesnt belong to test sim list, use normal flow
+* PARAMETERS
+*  N/A
+* RETURNS
+*  KAL_FALSE or KAL_TRUE
+*****************************************************************************/
+kal_bool custom_sim_set_test_sim_kt(const kal_char *mcc_mnc_str )
+{
+
+    const kal_char *op_list[] = {
+                                  "00211"
+                                };
+
+ 
+    kal_uint8 op_list_count = sizeof(op_list)/sizeof(op_list[0]);
+    kal_uint8 index = 0;
+    kal_uint8 length = strlen(mcc_mnc_str);
+
+    for (index = 0; index < op_list_count; index++)
+    {
+        if(length == strlen(op_list[index]))
+        {
+            if ((0 == (strncmp(op_list[index], mcc_mnc_str, length)))) 
+            {
+                return KAL_TRUE;
+            }
+        }
+    }
+
+    return KAL_FALSE;
+
+
+}
+
+
+/*****************************************************************************
+* Local Function of SMU
+*****************************************************************************/
+
+/* Load a new data object */
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  smu_load
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  pobjFromlid     [?]
+ * RETURNS
+ *
+ *****************************************************************************/
+static kal_bool smu_load(void *pobjFromlid, kal_uint8 source)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    kal_prompt_trace(kal_get_active_module_id(),"[SML] smu_load(source:%d) [Enter]", source);
+
+    if (smu_destory(source))
+    {
+        kal_sys_trace("SMU: previous obj not free!");
+    }
+
+//    nvram_ef_ms_security_obj_g[source].smu_security_info_ptr = get_ctrl_buffer(sizeof(smu_security_info_struct));
+//    kal_mem_set((kal_uint8*) nvram_ef_ms_security_obj_g[source].smu_security_info_ptr, 0xFF, sizeof(smu_security_info_struct));
+    nvram_ef_ms_security_obj_g[source].smu_security_info_ptr = &(smu_security_info_obj[source]);
+
+    kal_mem_cpy(
+        (kal_uint8*) nvram_ef_ms_security_obj_g[source].smu_security_info_ptr,
+        (kal_uint8*) pobjFromlid,
+        sizeof(smu_security_info_struct));
+    return KAL_TRUE;
+}
+
+/* Update a the data object */
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  smu_update
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  pobjTolid       [?]
+ * RETURNS
+ *
+ *****************************************************************************/
+static kal_bool smu_update(void *pobjTolid, kal_uint8 source)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    kal_prompt_trace(kal_get_active_module_id(),"[SML] smu_update() [Enter]");
+
+    ASSERT(nvram_ef_ms_security_obj_g[source].smu_security_info_ptr != NULL);
+    kal_mem_cpy(
+        (kal_uint8*) pobjTolid,
+        (kal_uint8*) nvram_ef_ms_security_obj_g[source].smu_security_info_ptr,
+        sizeof(smu_security_info_struct));
+    return KAL_TRUE;
+}
+
+/* Release the data object */
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  smu_destory
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *
+ *****************************************************************************/
+static kal_bool smu_destory(kal_uint8 source)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+    return KAL_FALSE;
+}
+
+/* Query the value of the item in kal_uint8 */
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  smu_query_u8
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  eItem       [IN]
+ * RETURNS
+ *
+ *****************************************************************************/
+static kal_uint8 smu_query_u8(smu_item_enum eItem, kal_uint8 source)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    smu_security_info_struct *info_ptr = (smu_security_info_struct*) nvram_ef_ms_security_obj_g[source].smu_security_info_ptr;
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    ASSERT(NULL != info_ptr);
+    switch (eItem)
+    {
+        case SMU_SECURITY_INDICATION_U8:
+            kal_prompt_trace(kal_get_active_module_id(),
+                             "[SML] smu_query_u8(SMU_SECURITY_INDICATION_U8) [Leave; Return %d (%02x)]",
+                             info_ptr->security_indication,
+                             info_ptr->security_indication);
+            return info_ptr->security_indication;
+            break;
+/*
+        case SMU_AUTO_LOCK_ITEM_U8:
+            return info_ptr->auto_lock_item;
+            break;
+*/
+        case SMU_PIN1_VALID_U8:
+            kal_prompt_trace(kal_get_active_module_id(),
+                             "[SML] smu_query_u8(SMU_PIN1_VALID_U8) [Leave; Return %d (%02x)]",
+                             info_ptr->pin1_valid,
+                             info_ptr->pin1_valid);
+            return info_ptr->pin1_valid;
+            break;
+        case SMU_PHONE_LOCK_VERIFIED_U8:
+            kal_prompt_trace(kal_get_active_module_id(),
+                             "[SML] smu_query_u8(SMU_PHONE_LOCK_VERIFIED_U8) [Leave; Return %d (%02x)]",
+                             info_ptr->phone_lock_verified,
+                             info_ptr->phone_lock_verified);
+            return info_ptr->phone_lock_verified;
+            break;
+/*
+        case SMU_REG_PS_KEY_A:
+        case SMU_NP_CODE_A:
+        case SMU_NP_KEY_A:
+        case SMU_NSP_CODE_A:
+        case SMU_NSP_KEY_A:
+        case SMU_NP_OF_SP_A:
+        case SMU_NP_OF_CP_A:
+        case SMU_GID1_A:
+        case SMU_GID2_A:
+        case SMU_SP_KEY_A:
+        case SMU_CP_KEY_A:
+        case SMU_IMSI_CODE_A:
+        case SMU_IMSI_KEY_A:
+*/
+        case SMU_PHONE_KEY_A:
+        case SMU_LAST_IMSI_A:
+        case SMU_PIN1_A:
+        default:
+            //ASSERT(0);  /* drop through! Wrong items */
+            break;
+    }
+    return 0;
+}
+
+/* Query the value of the item in kal_uint8[] */
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  smu_query_a
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  eItem       [IN]
+ *  pstrTo      [?]
+ *  chlen       [IN]
+ * RETURNS
+ *  void
+ *****************************************************************************/
+static void smu_query_a(smu_item_enum eItem, kal_uint8 *pstrTo, kal_uint8 chlen, kal_uint8 source)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    smu_security_info_struct *info_ptr = (smu_security_info_struct*) nvram_ef_ms_security_obj_g[source].smu_security_info_ptr;
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    ASSERT(NULL != info_ptr);
+    switch (eItem)
+    {
+        case SMU_SECURITY_INDICATION_U8:
+/*
+        case SMU_AUTO_LOCK_ITEM_U8:
+*/
+        case SMU_PIN1_VALID_U8:
+        case SMU_PHONE_LOCK_VERIFIED_U8:
+            //ASSERT(0);
+            break;
+/*
+        case SMU_REG_PS_KEY_A:
+        case SMU_NP_CODE_A:
+        case SMU_NP_KEY_A:
+        case SMU_NSP_CODE_A:
+        case SMU_NSP_KEY_A:
+        case SMU_NP_OF_SP_A:
+        case SMU_NP_OF_CP_A:
+        case SMU_GID1_A:
+        case SMU_GID2_A:
+        case SMU_SP_KEY_A:
+        case SMU_CP_KEY_A:
+        case SMU_IMSI_CODE_A:
+        case SMU_IMSI_KEY_A:
+*/
+        case SMU_PHONE_KEY_A:
+            kal_prompt_trace(kal_get_active_module_id(),"[SML] smu_query_a(SMU_PHONE_KEY_A) [Enter]");
+            break;
+        case SMU_LAST_IMSI_A:
+            kal_prompt_trace(kal_get_active_module_id(),"[SML] smu_query_a(SMU_LAST_IMSI_A) [Enter]");
+            //ASSERT(chlen == NVRAM_EDITOR_NUM_OF_BYTE_IMSI);
+            kal_mem_cpy(pstrTo, info_ptr->last_imsi, NVRAM_EDITOR_NUM_OF_BYTE_IMSI);
+            break;
+        case SMU_PIN1_A:
+            kal_prompt_trace(kal_get_active_module_id(),"[SML] smu_query_a(SMU_PIN1_A) [Enter]");
+            //ASSERT(chlen == NVRAM_EDITOR_NUM_PIN1);
+            kal_mem_cpy(pstrTo, info_ptr->pin1, NVRAM_EDITOR_NUM_PIN1);
+            break;
+        case SMU_ICCID_A:
+            kal_prompt_trace(kal_get_active_module_id(),"[SML] smu_query_a(SMU_ICCID_A) [Enter]");
+            kal_mem_cpy(pstrTo, info_ptr->iccid, NVRAM_EDITOR_NUM_OF_BYTE_ICCID);
+            break;
+        default:
+            //ASSERT(0);  /* drop through! Wrong items */
+            break;
+    }
+}
+
+/* Assign the value of the item in kal_uint8 */
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  smu_assign_u8
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  eItem       [IN]
+ *  chValue     [IN]
+ * RETURNS
+ *  void
+ *****************************************************************************/
+static void smu_assign_u8(smu_item_enum eItem, kal_uint8 chValue, kal_uint8 source)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    smu_security_info_struct *info_ptr = (smu_security_info_struct*) nvram_ef_ms_security_obj_g[source].smu_security_info_ptr;
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    ASSERT(NULL != info_ptr);
+    switch (eItem)
+    {
+        case SMU_SECURITY_INDICATION_U8:
+            kal_prompt_trace(kal_get_active_module_id(),
+                             "[SML] smu_assign_u8(SMU_SECURITY_INDICATION_U8) [Leave; %02x => %02x]",
+                             info_ptr->security_indication,
+                             chValue);
+            info_ptr->security_indication = chValue;
+            break;
+/*
+        case SMU_AUTO_LOCK_ITEM_U8:
+            info_ptr->auto_lock_item = chValue;
+            break;
+*/
+        case SMU_PIN1_VALID_U8:
+            kal_prompt_trace(kal_get_active_module_id(),
+                             "[SML] smu_assign_u8(SMU_PIN1_VALID_U8) [Leave; %02x => %02x]",
+                             info_ptr->pin1_valid,
+                             chValue);
+            info_ptr->pin1_valid = chValue;
+            break;
+        case SMU_PHONE_LOCK_VERIFIED_U8:
+            kal_prompt_trace(kal_get_active_module_id(),
+                             "[SML] smu_assign_u8(SMU_PHONE_LOCK_VERIFIED_U8) [Leave; %02x => %02x]",
+                             info_ptr->phone_lock_verified,
+                             chValue);
+            info_ptr->phone_lock_verified = chValue;
+            break;
+/*
+        case SMU_REG_PS_KEY_A:
+        case SMU_NP_CODE_A:
+        case SMU_NP_KEY_A:
+        case SMU_NSP_CODE_A:
+        case SMU_NSP_KEY_A:
+        case SMU_NP_OF_SP_A:
+        case SMU_NP_OF_CP_A:
+        case SMU_GID1_A:
+        case SMU_GID2_A:
+        case SMU_SP_KEY_A:
+        case SMU_CP_KEY_A:
+        case SMU_IMSI_CODE_A:
+        case SMU_IMSI_KEY_A:
+*/
+        case SMU_PHONE_KEY_A:
+        case SMU_LAST_IMSI_A:
+        case SMU_PIN1_A:
+        default:
+            //ASSERT(0);  /* drop through! Wrong items */
+            break;
+    }
+}
+
+/* Assign the value of the item in string with length */
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  smu_assign_a
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  eItem           [IN]
+ *  pstrValue       [?]
+ *  chlen           [IN]
+ * RETURNS
+ *  void
+ *****************************************************************************/
+static void smu_assign_a(smu_item_enum eItem, kal_uint8 *pstrValue, kal_uint8 chlen, kal_uint8 source)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    smu_security_info_struct *info_ptr = (smu_security_info_struct*) nvram_ef_ms_security_obj_g[source].smu_security_info_ptr;
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    ASSERT(NULL != info_ptr);
+    switch (eItem)
+    {
+        case SMU_SECURITY_INDICATION_U8:
+/*
+        case SMU_AUTO_LOCK_ITEM_U8:
+*/
+        case SMU_PIN1_VALID_U8:
+        case SMU_PHONE_LOCK_VERIFIED_U8:
+            //ASSERT(0);
+            break;
+/*
+        case SMU_REG_PS_KEY_A:
+            break;
+        case SMU_NP_CODE_A:
+            //ASSERT(chlen == NVRAM_EDITOR_NUM_OF_BYTE_NP);
+            kal_mem_cpy(info_ptr->np_code, pstrValue, NVRAM_EDITOR_NUM_OF_BYTE_NP);
+            break;
+        case SMU_NP_KEY_A:
+            break;
+        case SMU_NSP_CODE_A:
+            //ASSERT(chlen == NVRAM_EDITOR_NUM_OF_BYTE_NSP);
+            kal_mem_cpy(info_ptr->nsp_code, pstrValue, NVRAM_EDITOR_NUM_OF_BYTE_NSP);
+        case SMU_NSP_KEY_A:
+            break;
+        case SMU_NP_OF_SP_A:
+            //ASSERT(chlen == NVRAM_EDITOR_NUM_OF_BYTE_NP);
+            kal_mem_cpy(info_ptr->np_of_sp, pstrValue, NVRAM_EDITOR_NUM_OF_BYTE_NP);
+            break;
+        case SMU_NP_OF_CP_A:
+            //ASSERT(chlen == NVRAM_EDITOR_NUM_OF_BYTE_NP);
+            kal_mem_cpy(info_ptr->np_of_cp, pstrValue, NVRAM_EDITOR_NUM_OF_BYTE_NP);
+            break;
+        case SMU_GID1_A:
+            //ASSERT(chlen <= NVRAM_EDITOR_NUM_GID);
+            kal_mem_cpy(info_ptr->gid1, pstrValue, chlen);
+            break;
+        case SMU_GID2_A:
+            //ASSERT(chlen <= NVRAM_EDITOR_NUM_GID);
+            kal_mem_cpy(info_ptr->gid2, pstrValue, chlen);
+            break;
+        case SMU_SP_KEY_A:
+            break;
+        case SMU_CP_KEY_A:
+            break;
+        case SMU_IMSI_CODE_A:
+            //ASSERT(chlen <= NVRAM_EDITOR_NUM_OF_BYTE_IMSI);
+            kal_mem_cpy(info_ptr->imsi_code, pstrValue, chlen);
+            break;
+        case SMU_IMSI_KEY_A:
+            break;
+*/
+        case SMU_PHONE_KEY_A:
+            //ASSERT(chlen == NVRAM_EDITOR_NUM_OF_BYTE_KEY);
+            kal_prompt_trace(kal_get_active_module_id(),"[SML] smu_assign_a(SMU_PHONE_KEY_A) [Enter]");
+            kal_mem_cpy(info_ptr->phone_key, pstrValue, NVRAM_EDITOR_NUM_OF_BYTE_KEY);
+            break;
+        case SMU_LAST_IMSI_A:
+            //ASSERT(chlen <= NVRAM_EDITOR_NUM_OF_BYTE_IMSI);
+            kal_prompt_trace(kal_get_active_module_id(),"[SML] smu_assign_a(SMU_LAST_IMSI_A) [Enter]");
+            kal_mem_cpy(info_ptr->last_imsi, pstrValue, chlen);
+            break;
+        case SMU_PIN1_A:
+            //ASSERT(chlen == NVRAM_EDITOR_NUM_PIN1);
+            kal_prompt_trace(kal_get_active_module_id(),"[SML] smu_assign_a(SMU_PIN1_A) [Enter]");
+            kal_mem_cpy(info_ptr->pin1, pstrValue, NVRAM_EDITOR_NUM_PIN1);
+            break;
+        case SMU_ICCID_A:
+            kal_prompt_trace(kal_get_active_module_id(),"[SML] smu_assign_a(SMU_ICCID_A) [Enter]");
+            kal_mem_cpy(info_ptr->iccid, pstrValue, NVRAM_EDITOR_NUM_OF_BYTE_ICCID);
+            break;
+        default:
+            //ASSERT(0);
+            break;
+    }
+}
+
+/* Compare the string with the data item */
+
+/*****************************************************************************
+ * FUNCTION
+ *  smu_match
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  eItem           [IN]
+ *  pstrValue       [?]
+ *  chlen           [IN]
+ * RETURNS
+ *
+ *****************************************************************************/
+static kal_bool smu_match(smu_item_enum eItem, kal_uint8 *pstrValue, kal_uint8 chlen, kal_uint8 source)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+//    kal_uint8 idx = 0;
+
+    smu_security_info_struct *info_ptr = (smu_security_info_struct*) nvram_ef_ms_security_obj_g[source].smu_security_info_ptr;
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    kal_prompt_trace(kal_get_active_module_id(),"[SML] smu_match() [Enter]");
+
+    ASSERT(NULL != info_ptr);
+    switch (eItem)
+    {
+        case SMU_SECURITY_INDICATION_U8:
+            //ASSERT(chlen == sizeof(kal_uint8));
+            if (info_ptr->security_indication == *pstrValue)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+/*
+        case SMU_AUTO_LOCK_ITEM_U8:
+            //ASSERT(chlen == sizeof(kal_uint8));
+            if (info_ptr->auto_lock_item == *pstrValue)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+*/
+        case SMU_PIN1_VALID_U8:
+            //ASSERT(chlen == sizeof(kal_uint8));
+            if (info_ptr->pin1_valid == *pstrValue)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+        case SMU_PHONE_LOCK_VERIFIED_U8:
+            //ASSERT(chlen == sizeof(kal_uint8));
+            if (info_ptr->phone_lock_verified == *pstrValue)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+/*
+        case SMU_REG_PS_KEY_A:
+            //ASSERT(chlen == NVRAM_EDITOR_NUM_OF_BYTE_KEY);
+            if (kal_mem_cmp(info_ptr->reg_ps_key, pstrValue, NVRAM_EDITOR_NUM_OF_BYTE_KEY) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+        case SMU_NP_CODE_A:
+            //ASSERT(chlen == NVRAM_EDITOR_NUM_OF_BYTE_NP);
+            for (idx = 0; idx < NVRAM_EDITOR_NUM_NP; idx++)
+            {
+                if (kal_mem_cmp(
+                        pstrValue,
+                        (kal_uint8*) & (info_ptr->np_code[idx * NVRAM_EDITOR_NUM_OF_BYTE_NP]),
+                        NVRAM_EDITOR_NUM_OF_BYTE_NP) == 0)
+                {
+                    return KAL_TRUE;    // Find one!
+                }
+            }
+            return KAL_FALSE;
+            break;
+        case SMU_NP_KEY_A:
+            //ASSERT(chlen <= NVRAM_EDITOR_NUM_OF_BYTE_KEY);
+            if (kal_mem_cmp(info_ptr->np_key, pstrValue, chlen) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+        case SMU_NSP_CODE_A:
+            //ASSERT(chlen == NVRAM_EDITOR_NUM_OF_BYTE_NSP);
+            for (idx = 0; idx < NVRAM_EDITOR_NUM_NSP; idx++)
+            {
+                if (kal_mem_cmp(
+                        pstrValue,
+                        (kal_uint8*) & (info_ptr->nsp_code[idx * NVRAM_EDITOR_NUM_OF_BYTE_NSP]),
+                        NVRAM_EDITOR_NUM_OF_BYTE_NSP) == 0)
+                {
+                    return KAL_TRUE;    // Find one!
+                }
+            }
+            return KAL_FALSE;
+            break;
+        case SMU_NSP_KEY_A:
+            //ASSERT(chlen <= NVRAM_EDITOR_NUM_OF_BYTE_KEY);
+            if (kal_mem_cmp(info_ptr->nsp_key, pstrValue, chlen) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+        case SMU_NP_OF_SP_A:
+            //ASSERT(chlen == NVRAM_EDITOR_NUM_OF_BYTE_NP);
+            if (kal_mem_cmp(pstrValue, info_ptr->np_of_sp, NVRAM_EDITOR_NUM_OF_BYTE_NP) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+        case SMU_NP_OF_CP_A:
+            //ASSERT(chlen == NVRAM_EDITOR_NUM_OF_BYTE_NP);
+            if (kal_mem_cmp(pstrValue, info_ptr->np_of_cp, NVRAM_EDITOR_NUM_OF_BYTE_NP) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+        case SMU_GID1_A:
+            //ASSERT(chlen <= NVRAM_EDITOR_NUM_GID);
+            if (kal_mem_cmp(info_ptr->gid1, pstrValue, chlen) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+        case SMU_GID2_A:
+            //ASSERT(chlen <= NVRAM_EDITOR_NUM_GID);
+            if (kal_mem_cmp(info_ptr->gid2, pstrValue, chlen) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+        case SMU_SP_KEY_A:
+            //ASSERT(chlen <= NVRAM_EDITOR_NUM_OF_BYTE_KEY);
+            if (kal_mem_cmp(info_ptr->sp_key, pstrValue, chlen) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+        case SMU_CP_KEY_A:
+            //ASSERT(chlen <= NVRAM_EDITOR_NUM_OF_BYTE_KEY);
+            if (kal_mem_cmp(info_ptr->cp_key, pstrValue, chlen) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+        case SMU_IMSI_CODE_A:
+            //ASSERT(chlen == NVRAM_EDITOR_NUM_OF_BYTE_IMSI);
+            if (kal_mem_cmp(info_ptr->imsi_code, pstrValue, NVRAM_EDITOR_NUM_OF_BYTE_IMSI) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+        case SMU_IMSI_KEY_A:
+            //ASSERT(chlen <= NVRAM_EDITOR_NUM_OF_BYTE_KEY);
+            if (kal_mem_cmp(info_ptr->imsi_key, pstrValue, chlen) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+*/
+        case SMU_PHONE_KEY_A:
+            //ASSERT(chlen <= NVRAM_EDITOR_NUM_OF_BYTE_KEY);
+            if (kal_mem_cmp(info_ptr->phone_key, pstrValue, chlen) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+        case SMU_LAST_IMSI_A:
+            //ASSERT(chlen == NVRAM_EDITOR_NUM_OF_BYTE_IMSI);
+            if (kal_mem_cmp(info_ptr->last_imsi, pstrValue, NVRAM_EDITOR_NUM_OF_BYTE_IMSI) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+        case SMU_PIN1_A:
+            //ASSERT(chlen == NVRAM_EDITOR_NUM_PIN1);
+            if (kal_mem_cmp(info_ptr->pin1, pstrValue, NVRAM_EDITOR_NUM_PIN1) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+
+        case SMU_ICCID_A:
+            if(kal_mem_cmp(info_ptr->iccid,
+                           pstrValue,
+                           NVRAM_EDITOR_NUM_OF_BYTE_ICCID) == 0)
+                return KAL_TRUE;
+            else
+                return KAL_FALSE;
+            break;
+
+        default:
+            //ASSERT(0);
+            break;
+    }
+    return KAL_FALSE;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  smu_gblob_load
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  pobjTolid       [?]
+ * RETURNS
+ *
+ *****************************************************************************/
+static kal_bool smu_gblob_load(void *pobjFromlid)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+
+    nvram_ef_gblob_data_obj_g.gblob_data_ptr = &(sml_gblob_s_context_obj);
+
+    kal_mem_cpy(
+        (kal_uint8*) nvram_ef_gblob_data_obj_g.gblob_data_ptr,
+        (kal_uint8*) pobjFromlid,
+        sizeof(sml_gblob_s_context_struct));
+    return KAL_TRUE;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  smu_gblob_update
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  pobjTolid       [?]
+ * RETURNS
+ *
+ *****************************************************************************/
+static kal_bool smu_gblob_update(void *pobjTolid)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+
+    ASSERT(nvram_ef_gblob_data_obj_g.gblob_data_ptr != NULL);
+
+    kal_mem_cpy(
+        (kal_uint8*) pobjTolid,
+        (kal_uint8*) nvram_ef_gblob_data_obj_g.gblob_data_ptr,
+        sizeof(sml_gblob_s_context_struct));
+
+    return KAL_TRUE;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  smu_gblob_query_u8
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  eItem       [IN]
+ * RETURNS
+ *
+ *****************************************************************************/
+static kal_uint8 smu_gblob_query_u8(smu_gblob_item_enum eItem)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    sml_gblob_s_context_struct *info_ptr = (sml_gblob_s_context_struct*) nvram_ef_gblob_data_obj_g.gblob_data_ptr;
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    ASSERT(NULL != info_ptr);
+    switch (eItem)
+    {
+        case SML_GBLOB_MAJOR_VER_U8:
+            return info_ptr->major_version;
+            break;
+
+        case SML_GBLOB_MINOR_VER_U8:
+            return info_ptr->minor_version;
+            break;
+
+        case SML_GBLOB_DEVICE_LOCK_STATE_U8:
+            return info_ptr->device_lock_state;
+            break;
+
+        case SML_GBLOB_DEV_PROTECT_ALGO_U8:
+            return info_ptr->dev_protection_algo;
+            break;
+
+        case SML_GBLOB_SML_LOCK_RULE_U8:
+            return info_ptr->sml_lock_type;
+            break;
+
+    #ifdef __CUST_SML_RULE__
+        case SML_GBLOB_SML_CUST_CODE_U8:
+            return info_ptr->cust_code;
+            break;
+
+        case SML_GBLOB_SML_CUST_RULE_U8:
+            return info_ptr->cust_rule;
+            break;
+    #endif
+
+        case SML_GBLOB_SIG_PROTECT_ALGO_U8:
+            return info_ptr->sig_protection_algo;
+            break;
+
+        default:
+            //ASSERT(0);  /* drop through! Wrong items */
+            break;
+    }
+
+    return 0;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  smu_gblob_query_a
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  eItem       [IN]
+ *  pstrTo      [?]
+ *  chlen       [IN]
+ * RETURNS
+ *  void
+ *****************************************************************************/
+static void smu_gblob_query_a(smu_gblob_item_enum eItem, kal_uint8 *pstrTo, kal_uint8 chlen)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    sml_gblob_s_context_struct *info_ptr = (sml_gblob_s_context_struct*) nvram_ef_gblob_data_obj_g.gblob_data_ptr;
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    ASSERT(NULL != info_ptr);
+    switch (eItem)
+    {
+        case SML_GBLOB_IMEI_1_A:
+            kal_mem_cpy(pstrTo, &(info_ptr->imei[0]), SML_GBLOB_IMEI_SIZE);
+            break;
+
+        case SML_GBLOB_IMEI_2_A:
+            kal_mem_cpy(pstrTo, &(info_ptr->imei[15]), SML_GBLOB_IMEI_SIZE);
+            break;
+
+        case SML_GBLOB_IMEI_3_A:
+            kal_mem_cpy(pstrTo, &(info_ptr->imei[30]), SML_GBLOB_IMEI_SIZE);
+            break;
+
+        case SML_GBLOB_IMEI_4_A:
+            kal_mem_cpy(pstrTo, &(info_ptr->imei[45]), SML_GBLOB_IMEI_SIZE);
+            break;
+
+        case SML_GBLOB_SML_LOCK_SUB_RULE_A:
+            kal_mem_cpy(pstrTo, info_ptr->sml_lock_sub_type, SML_GBLOB_SUB_RULE_SIZE);
+            break;
+
+        case SML_GBLOB_TLV_DATA_A:
+            kal_mem_cpy(pstrTo, info_ptr->tlv_data, SML_GBLOB_TLV_DATA_SIZE);
+            break;
+
+        case SML_GBLOB_DEVICE_LOCK_INT_CNT_A:
+            kal_mem_cpy(pstrTo, info_ptr->device_interation_cnt, SML_GBLOB_SIZE_OF_DEV_INTCNT);
+            break;
+
+        case SML_GBLOB_DEVICE_LOCK_SALT_A:
+            kal_mem_cpy(pstrTo, info_ptr->device_salt, SML_GBLOB_SIZE_OF_DEV_SALT);
+            break;
+
+        case SML_GBLOB_DEVICE_LOCK_HCK_A:
+            kal_mem_cpy(pstrTo, info_ptr->device_hck, SML_GBLOB_SIZE_OF_DEV_HCK);
+            break;
+
+        case SML_GBLOB_SIGNATURE_A:
+            kal_mem_cpy(pstrTo, info_ptr->signature, SML_GBLOB_SIZE_OF_SIGNATURE);
+            break;
+
+        case SML_GBLOB_DEV_MAX_RETRY_CNT_A:
+            kal_mem_cpy(pstrTo, info_ptr->dev_max_retry_cnt, SML_GBLOB_SIZE_OF_MRC);
+            break;
+
+        case SML_GBLOB_DEV_REMAIN_RETRY_CNT_A:
+            kal_mem_cpy(pstrTo, info_ptr->dev_remain_retry_cnt, SML_GBLOB_SIZE_OF_MRC);
+            break;
+
+        default:
+            //ASSERT(0);  /* drop through! Wrong items */
+            break;
+    }
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  smu_gblob_assign_u8
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  eItem       [IN]
+ *  chValue     [IN]
+ * RETURNS
+ *  void
+ *****************************************************************************/
+static void smu_gblob_assign_u8(smu_gblob_item_enum eItem, kal_uint8 chValue)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    sml_gblob_s_context_struct *info_ptr = (sml_gblob_s_context_struct*) nvram_ef_gblob_data_obj_g.gblob_data_ptr;
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    ASSERT(NULL != info_ptr);
+    switch (eItem)
+    {
+        case SML_GBLOB_DEVICE_LOCK_STATE_U8:
+            info_ptr->device_lock_state = chValue;
+            break;
+
+        case SML_GBLOB_SML_LOCK_RULE_U8:
+            info_ptr->sml_lock_type = chValue;
+            break;
+
+    #ifdef __CUST_SML_RULE__
+        case SML_GBLOB_SML_CUST_CODE_U8:
+            info_ptr->cust_code = chValue;
+            break;
+
+        case SML_GBLOB_SML_CUST_RULE_U8:
+            info_ptr->cust_rule = chValue;
+            break;
+    #endif
+
+        case SML_GBLOB_DEV_PROTECT_ALGO_U8:
+            info_ptr->dev_protection_algo = chValue;
+            break;
+
+        default:
+            //ASSERT(0);  /* drop through! Wrong items */
+            break;
+    }
+}
+
+static void smu_gblob_assign_a(smu_gblob_item_enum eItem, kal_uint8 *pstrValue, kal_uint8 chlen)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    sml_gblob_s_context_struct *info_ptr = (sml_gblob_s_context_struct*) nvram_ef_gblob_data_obj_g.gblob_data_ptr;
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    ASSERT(NULL != info_ptr);
+    switch (eItem)
+    {
+        case SML_GBLOB_IMEI_1_A:
+            kal_mem_cpy(&(info_ptr->imei[0]), pstrValue, SML_GBLOB_IMEI_SIZE);
+            break;
+
+        case SML_GBLOB_IMEI_2_A:
+            kal_mem_cpy(&(info_ptr->imei[15]), pstrValue, SML_GBLOB_IMEI_SIZE);
+            break;
+
+        case SML_GBLOB_IMEI_3_A:
+            kal_mem_cpy(&(info_ptr->imei[30]), pstrValue, SML_GBLOB_IMEI_SIZE);
+            break;
+
+        case SML_GBLOB_IMEI_4_A:
+            kal_mem_cpy(&(info_ptr->imei[45]), pstrValue, SML_GBLOB_IMEI_SIZE);
+            break;
+
+        case SML_GBLOB_SML_LOCK_SUB_RULE_A:
+            kal_mem_cpy(info_ptr->sml_lock_sub_type, pstrValue, SML_GBLOB_SUB_RULE_SIZE);
+            break;
+
+        case SML_GBLOB_TLV_DATA_A:
+            kal_mem_cpy(info_ptr->tlv_data, pstrValue, SML_GBLOB_TLV_DATA_SIZE);
+            break;
+
+        case SML_GBLOB_DEVICE_LOCK_INT_CNT_A:
+            kal_mem_cpy(info_ptr->device_interation_cnt, pstrValue, SML_GBLOB_SIZE_OF_DEV_INTCNT);
+            break;
+
+        case SML_GBLOB_DEVICE_LOCK_SALT_A:
+            kal_mem_cpy(info_ptr->device_salt, pstrValue, SML_GBLOB_SIZE_OF_DEV_SALT);
+            break;
+
+        case SML_GBLOB_DEVICE_LOCK_HCK_A:
+            kal_mem_cpy(info_ptr->device_hck, pstrValue, SML_GBLOB_SIZE_OF_DEV_HCK);
+            break;
+
+        case SML_GBLOB_SIGNATURE_A:
+            kal_mem_cpy(info_ptr->signature, pstrValue, SML_GBLOB_SIZE_OF_SIGNATURE);
+            break;
+
+        case SML_GBLOB_DEV_MAX_RETRY_CNT_A:
+            kal_mem_cpy(info_ptr->dev_max_retry_cnt, pstrValue, SML_GBLOB_SIZE_OF_MRC);
+            break;
+
+        case SML_GBLOB_DEV_REMAIN_RETRY_CNT_A:
+            kal_mem_cpy(info_ptr->dev_remain_retry_cnt, pstrValue, SML_GBLOB_SIZE_OF_MRC);
+            break;
+
+        default:
+            //ASSERT(0);
+            break;
+    }
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  smu_gblob_match
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *  eItem           [IN]
+ *  pstrValue       [?]
+ *  chlen           [IN]
+ * RETURNS
+ *
+ *****************************************************************************/
+static kal_bool smu_gblob_match(smu_gblob_item_enum eItem, kal_uint8 *pstrValue, kal_uint8 chlen)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    sml_gblob_s_context_struct *info_ptr = (sml_gblob_s_context_struct*) nvram_ef_gblob_data_obj_g.gblob_data_ptr;
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    ASSERT(NULL != info_ptr);
+    switch (eItem)
+    {
+        case SML_GBLOB_IMEI_1_A:
+            if(kal_mem_cmp(&(info_ptr->imei[0]), pstrValue, SML_GBLOB_IMEI_SIZE) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+
+        case SML_GBLOB_IMEI_2_A:
+            if(kal_mem_cmp(&(info_ptr->imei[15]), pstrValue, SML_GBLOB_IMEI_SIZE) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+
+        case SML_GBLOB_IMEI_3_A:
+            if(kal_mem_cmp(&(info_ptr->imei[30]), pstrValue, SML_GBLOB_IMEI_SIZE) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+
+        case SML_GBLOB_IMEI_4_A:
+            if(kal_mem_cmp(&(info_ptr->imei[45]), pstrValue, SML_GBLOB_IMEI_SIZE) == 0)
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                return KAL_FALSE;
+            }
+            break;
+
+        default:
+            //ASSERT(0);
+            break;
+    }
+    return KAL_FALSE;
+}
+
+/* END: PH smu_security_info_struct (NVRAM_EF_MS_SECURITY_LID)  */
+#ifndef L4_NOT_PRESENT
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Nvram_get_size
+ * DESCRIPTION
+ *  This function is used to query the status of the category
+ * PARAMETERS
+ *  IN          file_idx
+ * RETURN
+ *  kal_uint16 file size
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_uint16 sml_Nvram_get_lid_size(kal_uint16 file_idx)
+{
+    kal_uint16 ret_val = 0;
+
+    switch(file_idx)
+    {
+        case NVRAM_EF_MS_SECURITY_LID:
+            ret_val = sizeof(smu_security_info_struct);
+            break;
+
+        case NVRAM_EF_SML_LID:
+            ret_val = sizeof(sml_context_struct);
+            break;
+
+        case NVRAM_EF_SML_TMO_LID:
+            ret_val = sizeof(sml_tmo_context_struct);
+            break;
+
+        case NVRAM_EF_SML_MAX_RETRY_COUNT_LID:
+            ret_val = sizeof(sml_max_retry_count_struct);
+            break;
+
+        case NVRAM_EF_SML_GBLOB_LID:
+            ret_val = sizeof(sml_gblob_s_context_struct);
+            break;
+
+        case NVRAM_EF_SML_GBLOB_KEY_LID:
+            ret_val = sizeof(sml_gblob_key_s_context_struct);
+            break;
+
+        case NVRAM_EF_SML_S_LID:
+            ret_val = sizeof(sml_context_s_struct);
+            break;
+
+        case NVRAM_EF_SUBSIDY_LOCK_LID:
+            ret_val = sizeof(sml_sl_blob_context_struct);
+            break;
+
+        case NVRAM_EF_SUBSIDY_LOCK_ODM_DATA_LID:
+            ret_val = sizeof(sml_sl_odm_data_struct);
+            break;
+
+        case NVRAM_EF_SML_NONCE_LID:
+            ret_val = sizeof(sml_uulk_nonce_struct);
+            break;
+
+        case NVRAM_EF_SML_UNLOCK_CODE_LID:
+            ret_val = sizeof(sml_uulk_unlock_code_struct);
+            break;
+
+        case NVRAM_EF_SML_SIGNATURE_LID:
+            ret_val = sizeof(sml_uulk_signature_struct);
+            break;
+
+#ifdef __CARRIER_RESTRICTION__
+        case NVRAM_EF_L4_CARRIER_RESTRICTION_LID:
+            ret_val = sizeof(smu_carrier_match_context_struct);
+            break;
+#endif
+
+        case NVRAM_EF_SML_ATT_LID:
+            ret_val = sizeof(sml_att_context_struct);
+            break;
+
+        case NVRAM_EF_L4_SML_VZW_SIM_LOCK_LID:
+            ret_val = sizeof(sml_vzw_sim_lock_context_struct);
+            break;
+
+        case NVRAM_EF_L4_SML_VZW_RSU_DELAY_TIMER_LID:
+            ret_val = sizeof(sml_vzw_rsu_delay_timer_struct);
+            break;
+
+        case NVRAM_EF_L4_SML_OP129_LID:
+            ret_val = sizeof(smu_op129_sim_lock_rawdata_struct);
+            break;
+
+        case NVRAM_EF_L4_SML_TMO_MOVIAL_SIM_LOCK_LID:
+            ret_val = sizeof(sml_tmo_movial_sim_lock_context_struct);
+            break;
+
+        case NVRAM_EF_L4_SML_TMO_MOVIAL_CORR_ID_LID:
+            ret_val = sizeof(sml_tmo_movial_corr_id_struct);
+            break;
+
+#ifdef __MBIM_MS_NETWORK_BLACKLIST__
+        case NVRAM_EF_L4_MS_SIM_BLACK_LIST_LID:
+            ret_val = sizeof(smu_ms_sim_black_list_context_struct);
+            break;
+#endif
+
+        default:
+
+            break;
+
+    }
+
+    return ret_val;
+}
+
+#ifdef __SIM_ME_LOCK__
+
+/* Define your GID1 code here!! */
+/*****************************************************************************
+ * The maximum length supported of GID1 is 20 bytes, represented as sim_gid1[20]
+ * Modify gid1[20] array to support multiple sets of GID1 code
+ * For example,
+ *     With GID1 length 5 bytes, if there are 2 sets of GID1 code,
+ *       1st GID1:  0x11, 0x22, 0x33, 0x44, 0x55
+ *      2nd GID1:  0x66, 0x77, 0x88, 0x99, 0xAA
+ *       You should set gid1_length = 5, gid1_set = 2, and assign gid1[20] as followed:
+ *       gid1[20] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA,
+ *                        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+ * Important: Use '0xFF' as the rest element of gid1 array
+ *
+ * You may extend the size of gid1[] array to support plenty sets of GID1 code as you want
+ *****************************************************************************/
+kal_bool is_gid1_matched(kal_uint8 *sim_gid1)
+{
+    /* Open GID1_SECURITY_CHECK */
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+
+    /* Close GID1_SECURITY_CHECK, return KAL_TRUE */
+//#if 0
+      	return KAL_TRUE;
+//#endif
+
+}
+
+/*[MAUI_01634719] mtk01612*/
+/*****************************************************************************
+*
+ *****************************************************************************/
+kal_bool is_mcc_mnc_matched(kal_uint8 *sim_code, kal_uint8 len)
+{
+    /* Open MCC/MNC check for N category */
+/*[MAUI_01634719] mtk01612: test*/
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+    /* Close MCC/MNC check for N category, return KAL_TRUE */
+//#if 0
+      	return KAL_TRUE;
+//#endif
+
+}
+
+/* Define your Block list here!! */
+/*****************************************************************************
+ * For example 2 digits MNC case: MCC\MNC 466 97 => 0x46 0x69 0x7F
+ *             3 digits MNC case: MCC\MNC 466 285 => 0x46 0x62 0x85
+ * !!!IMPORTANT: USE three 0xFF at the end of array to terminate !!!
+ *****************************************************************************/
+static const kal_uint8 smlVISA[] = {
+/* Insert your items here */
+
+//0x46, 0x61, 0x1F,   // Item 1
+//0x46, 0x69, 0x2F,   // Item 2
+
+/* Do not modify the 0xFF 0xFF 0xFF below */
+0xFF, 0xFF, 0xFF }; // Do not modify this line!
+
+static const kal_uint8 customLteOnlyPlmn[] = {
+/* Insert your items here */
+
+  0x40, 0x58, 0x40,   // Item 1
+  0x40, 0x58, 0x54,	  // Item 2
+  0x40, 0x58, 0x55,	  // Item 3
+  0x40, 0x58, 0x56,	  // Item 4
+  0x40, 0x58, 0x57,	  // Item 5
+  0x40, 0x58, 0x58,	  // Item 6
+  0x40, 0x58, 0x59,	  // Item 7
+  0x40, 0x58, 0x60,	  // Item 8
+  0x40, 0x58, 0x61,	  // Item 9
+  0x40, 0x58, 0x62,	  // Item 10
+  0x40, 0x58, 0x63,	  // Item 11
+  0x40, 0x58, 0x64,	  // Item 12
+  0x40, 0x58, 0x65,	  // Item 13
+  0x40, 0x58, 0x66,	  // Item 14
+  0x40, 0x58, 0x67,	  // Item 15
+  0x40, 0x58, 0x68,	  // Item 16
+  0x40, 0x58, 0x69,	  // Item 17
+  0x40, 0x58, 0x70,	  // Item 18
+  0x40, 0x58, 0x71,	  // Item 19
+  0x40, 0x58, 0x72,	  // Item 20
+  0x40, 0x58, 0x73,	  // Item 21
+  0x40, 0x58, 0x74,	  // Item 22
+/* Do not modify the 0xFF 0xFF 0xFF below */
+0xFF, 0xFF, 0xFF }; // Do not modify this line!
+
+static const kal_uint8 customCtPlmn[] = {
+/* Insert your items here */
+
+  0x46, 0x00, 0x3F,   //Item 1
+  0x46, 0x00, 0x5F,   //Item 2
+  0x46, 0x01, 0x1F,   //Item 3
+/* Do not modify the 0xFF 0xFF 0xFF below */
+0xFF, 0xFF, 0xFF }; // Do not modify this line!
+
+/* BEGIN: PH sml_context_struct (NVRAM_EF_SML_LID) */
+/******************************************************************************
+ * New SML Architecture
+ *****************************************************************************/
+/******************************************************************************
+ *    typedef struct {
+ *        kal_uint32  magic_head;
+ *        sml_category_meta_struct    cat[SML_CAT_SIZE];
+ *        sml_control_key_struct      key[SML_CAT_SIZE];
+ *        kal_uint8   code_cat_n[SML_CFG_CAT_N_SIZE];
+ *        kal_uint8   code_cat_ns[SML_CFG_CAT_NS_SIZE];
+ *        kal_uint8   code_cat_sp[SML_CFG_CAT_SP_SIZE];
+ *        kal_uint8   code_cat_c[SML_CFG_CAT_C_SIZE];
+ *        kal_uint8   code_cat_sim[SML_CFG_CAT_SIM_SIZE];
+ *        kal_uint8   code_cat_ns_sp[SML_CFG_CAT_NS_SP_SIZE];
+ *        kal_uint8   code_cat_sim_c[SML_CFG_CAT_SIM_C_SIZE];
+ *        kal_uint8   range_cat_ns[SML_CAT_NS_RANGE_SIZE]
+ *        kal_uint32 magic_tail;
+ *    } sml_context_struct;
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Typedef of SML
+ *****************************************************************************/
+static void sml_give( void * pLidToObj, kal_uint8 source );
+static void sml_take( void * pObjToLid, kal_uint8 source );
+static void sml_destory( kal_uint8 source );
+static void * sml_getItem( sml_cat_enum cat,
+                           sml_ctx_enum item,
+                           kal_uint16 * plength,
+                           kal_uint8 source
+                         );
+static void sml_putItem( sml_cat_enum cat,
+                         sml_ctx_enum item,
+                         void * pItem,
+                         kal_uint16 * plength,
+                         kal_uint8 source
+                       );
+
+static void sml_mrc_give( void * pLidToObj, kal_uint8 source );
+static void sml_mrc_take( void * pObjToLid, kal_uint8 source );
+static void sml_mrc_destory( kal_uint8 source );
+static void * sml_mrc_getItem( sml_cat_enum cat,
+                           sml_ctx_enum item,
+                           kal_uint16 * plength,
+                           kal_uint8 source
+                         );
+static void sml_mrc_putItem( sml_cat_enum cat,
+                         sml_ctx_enum item,
+                         void * pItem,
+                         kal_uint16 * plength,
+                         kal_uint8 source
+                       );
+
+/* TMO SML */
+static void sml_tmo_give( void * pLidToObj, kal_uint8 source );
+static void sml_tmo_take( void * pObjToLid, kal_uint8 source );
+static void sml_tmo_destory( kal_uint8 source );
+static void * sml_tmo_getItem( sml_cat_enum cat,
+                           sml_ctx_enum item,
+                           kal_uint16 * plength,
+                           kal_uint8 source
+                         );
+static void sml_tmo_putItem( sml_cat_enum cat,
+                         sml_ctx_enum item,
+                         void * pItem,
+                         kal_uint16 * plength,
+                         kal_uint8 source
+                       );
+
+/* ATT SML */
+static void sml_att_give( void * pLidToObj, kal_uint8 source );
+static void sml_att_take( void * pObjToLid, kal_uint8 source );
+static void sml_att_destory( kal_uint8 source );
+static void * sml_att_getItem( sml_cat_enum cat,
+                               sml_ctx_enum item,
+                               kal_uint16 * plength,
+                               kal_uint8 source
+                             );
+static void sml_att_putItem( sml_cat_enum cat,
+                             sml_ctx_enum item,
+                             void * pItem,
+                             kal_uint16 * plength,
+                             kal_uint8 source
+                           );
+
+/* define the Local variable of SML */
+static nvram_ef_sml_obj_struct SMLOBJ[MAX_SIM_NUM] = {{0}};
+
+static sml_context_s_struct sml_cntxt_s_obj[MAX_SIM_NUM];
+
+static void sml_sl_give( void * pLidToObj, kal_uint8 source );
+static void sml_sl_take( void * pObjToLid, kal_uint8 source );
+static void sml_sl_destory( kal_uint8 source );
+static void * sml_sl_getItem( sml_cat_enum cat,
+                           sml_ctx_enum item,
+                           kal_uint16 * plength,
+                           kal_uint8 source
+                         );
+static void sml_sl_putItem( sml_cat_enum cat,
+                         sml_ctx_enum item,
+                         void * pItem,
+                         kal_uint16 * plength,
+                         kal_uint8 source
+                       );
+
+/* define the Local variable of SML Subsidy Lock object */
+static sml_sl_blob_context_struct sml_sl_cntxt_obj[MAX_SIM_NUM];
+
+
+#ifdef __CARRIER_RESTRICTION__
+static void sml_crrst_give( void * pLidToObj, kal_uint8 source );
+static void sml_crrst_take( void * pObjToLid, kal_uint8 source );
+static void sml_crrst_destory( kal_uint8 source );
+static void * sml_crrst_getItem(smu_crrst_cat_enum cat,
+                                sml_ctx_enum item,
+                                kal_uint16 * plength,
+                                kal_uint8 source
+                                );
+static void sml_crrst_putItem(smu_crrst_cat_enum cat,
+                              sml_ctx_enum item,
+                              void * pItem,
+                              kal_uint16 * plength,
+                              kal_uint8 source
+                              );
+static void * sml_crrst_getList(sml_ctx_enum list,
+                                kal_uint16 *plength,
+                                kal_uint8 source);
+#endif /* __CARRIER_RESTRICTION__ */
+
+
+/* define the Local variable of SML TMO object */
+static sml_tmo_context_struct sml_tmo_cntxt_obj[MAX_SIM_NUM];
+
+/* define the Local variable of SML ATT object */
+static sml_att_context_struct sml_att_cntxt_obj[MAX_SIM_NUM];
+
+
+#ifdef __CARRIER_RESTRICTION__
+/* define the Local variable of SMU carrier restriction object */
+static smu_carrier_match_context_struct smu_crrst_cntxt_obj[MAX_SIM_NUM];
+static nvram_ef_smu_crrst_obj_struct CRRSTOBJ[MAX_SIM_NUM];
+
+/* define the Global access pointer of SMU Carrier Restrcition object */
+nvram_ef_smu_crrst_obj_struct * pCRRSTg = &CRRSTOBJ[0];
+#endif
+
+/* define the Global access pointer of SML object */
+nvram_ef_sml_obj_struct * pSMLg = &SMLOBJ[0];
+
+/* define the Local variable of SML MAX RETRY COUNT OBJ */
+static nvram_ef_sml_obj_struct SML_MRC_OBJ[MAX_SIM_NUM];
+
+/* define the Local variable of SML object */
+static sml_max_retry_count_struct sml_mrc_cntxt_obj[MAX_SIM_NUM];
+
+/* define the Global access pointer of SML MAX RETRY COUNT OBJ */
+nvram_ef_sml_obj_struct * pSMLMRCg = &SML_MRC_OBJ[0];
+
+/*******************************************************************************
+ * Define the method of the object
+ *******************************************************************************/
+void sml_init_sml_obj(kal_uint8 source)
+{
+
+    if (sml_query_sml_lock_rule() == SML_LOCK_RULE_LINK_LOCK_RJIO_LOCK)
+    {
+        nvram_ef_sml_obj_struct sml_sl_obj = {
+            NULL,
+            sml_sl_give,
+            sml_sl_take,
+            sml_sl_destory,
+            sml_sl_getItem,
+            sml_sl_putItem
+        };
+        sml_sl_destory(source);
+        kal_mem_cpy(&pSMLg[source], &sml_sl_obj, sizeof(nvram_ef_sml_obj_struct));
+    }
+
+    else if (sml_query_sml_lock_rule() == SML_LOCK_RULE_VZW_NETWORK_LOCK)
+    {
+        nvram_ef_sml_vzw_sim_lock_obj_struct sml_vzw_obj = {
+            NULL,
+            sml_vzw_give,
+            sml_vzw_take,
+            sml_vzw_destory,
+            sml_vzw_getItem,
+            sml_vzw_putItem
+        };
+        sml_vzw_destory(source);
+        kal_mem_cpy(&pSMLVZWg[source], &sml_vzw_obj, sizeof(nvram_ef_sml_vzw_sim_lock_obj_struct));
+    }
+
+    else if ((sml_query_sml_lock_rule() == SML_LOCK_RULE_TMO_NETWORK_LOCK) &&
+             (sml_query_sml_lock_sub_rule() == SML_LOCK_TMO_SUB_RULE_TRUSTONIC))
+    {
+        nvram_ef_sml_obj_struct sml_tmo_obj = {
+            NULL,
+            sml_tmo_give,
+            sml_tmo_take,
+            sml_tmo_destory,
+            sml_tmo_getItem,
+            sml_tmo_putItem
+        };
+        sml_tmo_destory(source);
+        kal_mem_cpy(&pSMLg[source], &sml_tmo_obj, sizeof(nvram_ef_sml_obj_struct));
+    }
+
+    else if ((sml_query_sml_lock_rule() == SML_LOCK_RULE_TMO_NETWORK_LOCK) &&
+             (sml_query_sml_lock_sub_rule() == SML_LOCK_TMO_SUB_RULE_MOVIAL))
+    {
+        nvram_ef_sml_tmo_movial_sim_lock_obj_struct sml_tmo_movial_obj = {
+            NULL,
+            sml_tmo_movial_give,
+            sml_tmo_movial_take,
+            sml_tmo_movial_destory,
+            sml_tmo_movial_getItem,
+            sml_tmo_movial_putItem
+        };
+        sml_tmo_movial_destory(source);
+        kal_mem_cpy(&pSMLTMMg[source], &sml_tmo_movial_obj, sizeof(nvram_ef_sml_tmo_movial_sim_lock_obj_struct));
+    }
+
+    else if (sml_query_sml_lock_rule() == SML_LOCK_RULE_ATT_NETWORK_LOCK)
+    {
+        nvram_ef_sml_obj_struct sml_att_obj = {
+            NULL,
+            sml_att_give,
+            sml_att_take,
+            sml_att_destory,
+            sml_att_getItem,
+            sml_att_putItem
+        };
+        sml_att_destory(source);
+        kal_mem_cpy(&pSMLg[source], &sml_att_obj, sizeof(nvram_ef_sml_obj_struct));
+    }
+
+    else
+    {
+        nvram_ef_sml_obj_struct sml_obj = {
+            NULL,
+            sml_give,
+            sml_take,
+            sml_destory,
+            sml_getItem,
+            sml_putItem
+        };
+        sml_destory(source);
+        kal_mem_cpy(&pSMLg[source], &sml_obj, sizeof(nvram_ef_sml_obj_struct));
+    }
+}
+
+#ifdef __CARRIER_RESTRICTION__
+void sml_init_crrst_obj(kal_uint8 source)
+{
+    nvram_ef_smu_crrst_obj_struct sml_crrst_obj = {
+        NULL,
+        sml_crrst_give,
+        sml_crrst_take,
+        sml_crrst_destory,
+        sml_crrst_getItem,
+        sml_crrst_putItem,
+        sml_crrst_getList
+    };
+
+    sml_crrst_destory(source);
+    kal_mem_cpy(&pCRRSTg[source], &sml_crrst_obj, sizeof(nvram_ef_smu_crrst_obj_struct));
+}
+#endif
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_init_max_retry_count_obj
+ * DESCRIPTION
+ *  This function initializes SML max retry count object
+ * PARAMETERS
+ *  IN          source
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SML_MRC_OBJ
+ *******************************************************************************/
+void sml_init_max_retry_count_obj(kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct sml_mrc_obj = {
+        NULL,
+        sml_mrc_give,
+        sml_mrc_take,
+        sml_mrc_destory,
+        sml_mrc_getItem,
+        sml_mrc_putItem
+    };
+
+    if (sbp_query_md_feature_by_ps(SBP_ENABLE_SML_MAX_RETRY_COUNT, source) == KAL_TRUE)
+    {
+        sml_mrc_destory(source);
+        kal_mem_cpy(&pSMLMRCg[source], &sml_mrc_obj, sizeof(nvram_ef_sml_obj_struct));
+    }
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_max_retry_count_Load
+ * DESCRIPTION
+ *  This function loads the SML_MRC_OBJ from NVRAM LID (NVRAM_READ_CNF)
+ * PARAMETERS
+ *  IN          pLid
+ * RETURN
+ *  kal_uint16  Obj size
+ * GLOBALS AFFECTED
+ *  SML_MRC_OBJ
+ *******************************************************************************/
+kal_uint16 sml_max_retry_count_Load(void *pLid, kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLMRCg[source];
+
+    kal_uint16 length = sizeof(sml_max_retry_count_struct);
+
+    /* Clean the old ones */
+    (*p->destory)(source);
+
+    /* Load the new one */
+    (*p->give)(pLid, source);
+
+    return length;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_UpdateMaxRetryCount
+ * DESCRIPTION
+ *  This function updates SML max retryc count if the state is UNLOCK
+ * PARAMETERS
+ *  IN  source
+ * RETURN
+ *  TRUE if success FALSE otherwise
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_UpdateMaxRetryCount(sml_cat_enum cat, kal_uint32 data, kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *pSML = &pSMLg[source];
+    SML_CAT_META_STRUCT *meta = NULL;
+    kal_uint16 length = 0;
+
+    meta = (SML_CAT_META_STRUCT *) (*pSML->getItem)(cat, SML_CAT_META, &length, source);
+
+    if (meta->state == SML_STATE_UNLOCK)
+    {
+        meta->max_retry_count = data;
+        meta->retry_count = sml_GetDefaultRetryCount(cat, data);
+
+        MD_TRC_INFO_SMU_MAX_RETRY_COUNT_UPDATE_SUCCESS();
+
+        return KAL_TRUE;
+    }
+
+    return KAL_FALSE;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_check_and_update_retry_count
+ * DESCRIPTION
+ *  This function updates SML retry_count if the state is UNLOCK
+ * PARAMETERS
+ *  IN  source
+ * RETURN
+ *  TRUE if NVRAM write required, FALSE otherwise
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_check_and_update_retry_count(kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *pMRC = &pSMLMRCg[source];
+    nvram_ef_sml_obj_struct *pSML = &pSMLg[source];
+    SML_CAT_META_STRUCT *meta = NULL;
+    kal_uint8 *max_retry_count = NULL;
+    kal_uint16 length = 0;
+    sml_cat_enum cat = SML_CAT_N;
+    kal_bool result = KAL_FALSE;
+
+    for (cat = SML_CAT_N; cat < SML_CAT_SIZE; cat++)
+    {
+        meta = (SML_CAT_META_STRUCT *) (*pSML->getItem)(cat, SML_CAT_META, &length, source);
+
+        if (meta->state == SML_STATE_UNLOCK)
+        {
+            max_retry_count = (kal_uint8 *)(*pMRC->getItem)(cat, SML_CAT_MAX_RETRY_COUNT, &length, source);
+
+            /* 0 means infinite retry count */
+            if ((*max_retry_count != 0) && (*max_retry_count != meta->retry_count))
+            {
+                meta->retry_count = *max_retry_count;
+                result = KAL_TRUE;
+            }
+        }
+    }
+
+    return result;
+}
+
+/*******************************************************************************
+ * FUNCTION  
+ *  sml_UpdateCatKeyAlgoData
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  IN  
+ * RETURN
+ *  TRUE if success FALSE otherwise
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/ 
+kal_bool sml_UpdateCatKeyAlgoData(sml_cat_enum cat, kal_uint8 algo_type, kal_uint8 *salt, kal_uint8 *inter_cnt, kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+
+    SML_CAT_META_STRUCT *meta = NULL; 
+
+    SML_CTRL_KEY_STRUCT *catkey = NULL;
+
+    kal_uint16 length;
+
+
+    meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat,SML_CAT_META,&length, source);
+    catkey = (SML_CTRL_KEY_STRUCT *) (*p->getItem)(cat,SML_CAT_KEY,&length, source);
+
+    if (SML_STATE_UNLOCK == meta->state)
+    {
+        // Update algo_type
+        catkey->algo = algo_type;
+
+        if (algo_type != 0)
+        {
+            kal_mem_cpy(catkey->salt, salt, NVRAM_SML_S_MAX_SUPPORT_SALT_LEN);
+            kal_mem_cpy(catkey->inter_cnt, inter_cnt, NVRAM_SML_S_MAX_SUPPORT_INTER_CNT_LEN);
+        }
+
+        MD_TRC_INFO_SML_ALGO_TYPE_UPDATE("SUCCESS", algo_type);
+
+        return KAL_TRUE;
+    }
+    else
+    {
+        MD_TRC_INFO_SML_ALGO_TYPE_UPDATE("FAIL", algo_type);
+        return KAL_FALSE;
+    }
+
+}
+
+#ifdef __SML_PUK__
+/*******************************************************************************
+ * FUNCTION
+ *  custom_sml_new_catkey_retry_cnt_after_puk_verified
+ * DESCRIPTION
+ *  This function an custom option function to indicate
+ *    the new retry count of cat key (CK) to be updated after SML PUK successfully verified
+ * PARAMETERS
+ *  IN  cat                     the category to be updated
+ *  IN  max_retry_count         the max retry count set in meta structure
+ * RETURN
+ *  the new retry count
+ * GLOBALS AFFECTED
+ *  NONE
+ *******************************************************************************/
+kal_uint32 custom_sml_new_catkey_retry_cnt_after_puk_verified(sml_cat_enum cat, kal_uint32 max_retry_count)
+{
+    if (max_retry_count == 0)
+    {
+        return sml_GetDefaultRetryCount(cat, max_retry_count);
+    }
+    else
+    {
+        return max_retry_count;
+    }
+}
+
+kal_bool sml_pukkey_verify(sml_puk_key_op_enum op, SML_PUK_KEY_STRUCT *puk, kal_uint8 *inkey, kal_uint8 inkey_len, kal_uint8 source)
+{
+    kal_bool result = KAL_FALSE;
+    sml_key_algo_enum algo_type = (sml_key_algo_enum)puk->algo;
+    sml_key_input_type_enum input_type = SML_INPUT_WITH_PLAINKEY;
+
+    input_type = custom_sml_query_puk_key_input_type(algo_type, op);
+
+    if (algo_type == SML_KEY_ALGO_BCD)
+    {
+        if (input_type == SML_INPUT_WITH_PLAINKEY)
+        {
+            if (kal_mem_cmp(&(puk->key[0]), inkey, inkey_len) == 0)
+            {
+                result = KAL_TRUE;
+            }
+        }
+    }
+    else if (algo_type == SML_KEY_ALGO_PBKDF2_HMAC_SHA256_SALT128)
+    {
+        if (input_type == SML_INPUT_WITH_HCK)
+        {
+            // Input is already hashed raw data, directly compare
+            if (kal_mem_cmp(&(puk->key[0]), inkey, inkey_len) == 0)
+            {
+                result = KAL_TRUE;
+            }
+        }
+        else if (input_type == SML_INPUT_WITH_PLAINKEY)
+        {
+            kal_uint8 i = 0;
+            kal_uint32 iter_cnt_calc = 0;
+
+            sml_input_format_of_catkey_for_algo_enum input_format = SML_INPUT_FORMAT_CATKEY_UNKNOWN;
+            kal_uint8 *key_input = NULL;
+            kal_uint32 key_input_len = 0;
+
+            kal_uint8 key_string[SML_MAX_SUPPORT_KEY_LEN*2+1] = {0};
+
+            kal_uint8 *hck_calc = get_ctrl_buffer(CAT_KEY_MAX_SUPPORT_LEN);
+
+            kal_mem_set(hck_calc, 0, CAT_KEY_MAX_SUPPORT_LEN);
+
+            input_format = custom_sml_input_format_of_catkey_for_algo(algo_type);
+            MD_TRC_INFO_SML_INPUT_FORMAT_OF_CATKEY(input_format);
+
+            if (input_format == SML_INPUT_FORMAT_CATKEY_ASCII)
+            {
+                /* Hashing with ASCII string */
+                // Generate key string from BCD key
+                key_input_len = convert_to_digit_with_len(inkey, key_string, SML_MAX_SUPPORT_KEY_LEN);
+                key_input = key_string;
+            }
+            else
+            {
+                /* Hashing directly with reversed BCD key */
+                key_input_len = CAT_KEY_MAX_SUPPORT_LEN;
+                key_input = inkey;
+            }
+
+            for (i = 0; i < NVRAM_SML_S_MAX_SUPPORT_INTER_CNT_LEN - 1; i++)
+            {
+                iter_cnt_calc += puk->iter_cnt[i];
+                iter_cnt_calc = (iter_cnt_calc << 8);
+            }
+            iter_cnt_calc += puk->iter_cnt[i];
+
+            if (iter_cnt_calc != 0)
+            {
+                kal_uint32 verify_result = cust_sec_hck_verify(TYPE_HCK_PBKDF2_HMAC_SHA256_SALT128,
+                                                               (kal_char*) key_input,
+                                                               (kal_uint32) key_input_len,
+                                                               puk->salt,
+                                                               iter_cnt_calc,
+                                                               puk->key);
+
+                if (verify_result == ERR_SEC_CHECK_HCK_SUCCESS)
+                {
+                    result = KAL_TRUE;
+                }
+            }
+        }
+    }
+
+    if (result == KAL_TRUE)
+    {
+        MD_TRC_INFO_SML_KEY_VERIFY_PASS_INFO_CUST();
+    }
+    else
+    {
+        MD_TRC_INFO_SML_KEY_VERIFY_FAIL_INFO_CUST();
+    }
+
+    return result;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_VerifyPuk
+ * DESCRIPTION
+ *  This function verify SML PUK key of the desired category
+ * PARAMETERS
+ *  IN          cat
+ *  IN          * key
+ *  IN          key_len
+ *  IN          source
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_VerifyPuk( sml_cat_enum cat,
+                        kal_uint8 *key,
+                        kal_uint8 key_len,
+                        kal_uint8 source )
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    SML_CAT_META_STRUCT *meta = NULL;
+    SML_PUK_KEY_STRUCT *puk = NULL;
+
+    kal_uint16 length = 0;
+    kal_bool result = KAL_FALSE;
+
+    meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat, SML_CAT_META, &length, source);
+    puk = (SML_PUK_KEY_STRUCT *) (*p->getItem)(cat, SML_CAT_PUK_KEY, &length, source);
+
+    if ((meta->state == SML_STATE_LOCK) &&
+        (meta->max_retry_count != 0 && meta->retry_count == 0) &&
+        (puk->state == SML_PUK_KEY_ENABLE) &&
+        (puk->max_retry_count == 0 || puk->retry_count > 0))
+    {
+        result = sml_pukkey_verify(SML_PUK_OP_VERIFY, puk, key, key_len, source);
+
+        if (result == KAL_TRUE)
+        {
+            // update catkey data
+            meta->retry_count = custom_sml_new_catkey_retry_cnt_after_puk_verified(cat, meta->max_retry_count);
+
+            // update puk data
+            puk->retry_count = puk->max_retry_count;
+        }
+        else
+        {
+            if (puk->max_retry_count > 0)
+            {
+                puk->retry_count--;
+            }
+        }
+    }
+
+    return result;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_UpdatePukMaxRetryCount
+ * DESCRIPTION
+ *  This function updates SML PUK max retry count when the state is UNLOCK
+ * PARAMETERS
+ *  IN  source
+ * RETURN
+ *  TRUE if success FALSE otherwise
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_UpdatePukMaxRetryCount(sml_cat_enum cat, kal_uint32 data, kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *pSML = &pSMLg[source];
+    SML_CAT_META_STRUCT *meta = NULL;
+    SML_PUK_KEY_STRUCT *puk = NULL;
+    kal_uint16 length = 0;
+
+    meta = (SML_CAT_META_STRUCT *) (*pSML->getItem)(cat, SML_CAT_META, &length, source);
+    puk = (SML_PUK_KEY_STRUCT *) (*pSML->getItem)(cat, SML_CAT_PUK_KEY, &length, source);
+
+    if (meta->state == SML_STATE_UNLOCK)
+    {
+        puk->max_retry_count = data;
+        puk->retry_count = data;
+
+        MD_TRC_INFO_SMU_MAX_RETRY_COUNT_UPDATE_SUCCESS();
+
+        return KAL_TRUE;
+    }
+
+    return KAL_FALSE;
+}
+
+/*******************************************************************************
+ * FUNCTION  
+ *  sml_UpdatePukKey
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  IN  
+ * RETURN
+ *  TRUE if success FALSE otherwise
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/ 
+kal_bool sml_UpdatePukKey(sml_cat_enum cat, kal_uint8 algo_type, kal_uint8 *key, kal_uint8 *salt, kal_uint8 *iter_cnt, kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *pSML = &pSMLg[source];
+    SML_CAT_META_STRUCT *meta = NULL; 
+    SML_PUK_KEY_STRUCT *puk = NULL;
+    kal_uint16 length;
+
+    meta = (SML_CAT_META_STRUCT *) (*pSML->getItem)(cat,SML_CAT_META,&length, source);
+    puk = (SML_PUK_KEY_STRUCT *) (*pSML->getItem)(cat, SML_CAT_PUK_KEY, &length, source);
+
+    if (SML_STATE_UNLOCK == meta->state)
+    {
+        kal_bool key_update = KAL_FALSE;
+        sml_key_input_type_enum input_type = custom_sml_query_puk_key_input_type(algo_type, SML_PUK_OP_UPDATE);
+
+        if (algo_type == SML_KEY_ALGO_BCD)
+        {
+            if (input_type == SML_INPUT_WITH_PLAINKEY)
+            {
+                key_update = KAL_TRUE;
+
+                puk->algo = algo_type;
+
+                kal_mem_cpy(puk->key, key, CAT_KEY_MAX_SUPPORT_LEN);
+                kal_mem_set(puk->salt, 0x00, NVRAM_SML_S_MAX_SUPPORT_SALT_LEN);
+                kal_mem_set(puk->iter_cnt, 0x00, NVRAM_SML_S_MAX_SUPPORT_INTER_CNT_LEN);
+            }
+        }
+        else if (algo_type == SML_KEY_ALGO_PBKDF2_HMAC_SHA256_SALT128)
+        {
+            if (input_type == SML_INPUT_WITH_HCK)
+            {
+                // Input is already hashed raw data, directly copy
+                key_update = KAL_TRUE;
+
+                puk->algo = algo_type;
+
+                kal_mem_cpy(puk->key, key, CAT_KEY_MAX_SUPPORT_LEN);
+                kal_mem_cpy(puk->salt, salt, NVRAM_SML_S_MAX_SUPPORT_SALT_LEN);
+                kal_mem_cpy(puk->iter_cnt, iter_cnt, NVRAM_SML_S_MAX_SUPPORT_INTER_CNT_LEN);
+            }
+            else if (input_type == SML_INPUT_WITH_PLAINKEY)
+            {
+                kal_uint8 i = 0;
+                kal_uint32 iter_cnt_calc = 0;
+
+                sml_input_format_of_catkey_for_algo_enum input_format = SML_INPUT_FORMAT_CATKEY_UNKNOWN;
+                kal_uint8 *key_input = NULL;
+                kal_uint32 key_input_len = 0;
+
+                kal_uint8 key_string[SML_MAX_SUPPORT_KEY_LEN*2+1] = {0};
+
+                kal_uint8 *hck_calc = get_ctrl_buffer(CAT_KEY_MAX_SUPPORT_LEN);
+
+                kal_mem_set(hck_calc, 0, CAT_KEY_MAX_SUPPORT_LEN);
+
+                input_format = custom_sml_input_format_of_catkey_for_algo(algo_type);
+                MD_TRC_INFO_SML_INPUT_FORMAT_OF_CATKEY(input_format);
+
+                if (input_format == SML_INPUT_FORMAT_CATKEY_ASCII)
+                {
+                    /* Hashing with ASCII string */
+                    // Generate key string from BCD key
+                    key_input_len = convert_to_digit_with_len(key, key_string, SML_MAX_SUPPORT_KEY_LEN);
+                    key_input = key_string;
+                }
+                else
+                {
+                    /* Hashing directly with reversed BCD key */
+                    key_input_len = CAT_KEY_MAX_SUPPORT_LEN;
+                    key_input = key;
+                }
+
+
+                for (i = 0; i < NVRAM_SML_S_MAX_SUPPORT_INTER_CNT_LEN - 1; i++)
+                {
+                    iter_cnt_calc += iter_cnt[i];
+                    iter_cnt_calc = (iter_cnt_calc << 8);
+                }
+                iter_cnt_calc += iter_cnt[i];
+
+
+                if (iter_cnt_calc != 0)
+                {
+                    kal_uint32 hck_calc_result = 0;
+
+                    hck_calc_result = PKCS5_PBKDF2_HMAC_SHA256((kal_char*)key_input, key_input_len,
+                                                               salt, 16,
+                                                               iter_cnt_calc,
+                                                               32, hck_calc);
+
+                    if (hck_calc_result == 1)
+                    {
+                        key_update = KAL_TRUE;
+                    }
+                }
+
+                if (key_update == KAL_TRUE)
+                {
+                    puk->algo = algo_type;
+
+                    kal_mem_set(puk->key, 0xFF, CAT_KEY_MAX_SUPPORT_LEN);
+                    kal_mem_cpy(puk->key, hck_calc, 32);
+                    kal_mem_cpy(puk->salt, salt, NVRAM_SML_S_MAX_SUPPORT_SALT_LEN);
+                    kal_mem_cpy(puk->iter_cnt, iter_cnt, NVRAM_SML_S_MAX_SUPPORT_INTER_CNT_LEN);
+                }
+
+                free_ctrl_buffer(hck_calc);
+            }
+        }
+
+        if (key_update == KAL_TRUE)
+        {
+            MD_TRC_INFO_SML_ALGO_TYPE_UPDATE("SUCCESS", algo_type);
+            return KAL_TRUE;
+        }
+        else
+        {
+            MD_TRC_INFO_SML_ALGO_TYPE_UPDATE("FAIL", algo_type);
+            return KAL_FALSE;
+        }
+    }
+    else
+    {
+        MD_TRC_INFO_SML_ALGO_TYPE_UPDATE("FAIL", algo_type);
+        return KAL_FALSE;
+    }
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_UpdatePukKeyState
+ * DESCRIPTION
+ *  This function updates SML PUK state when the state is UNLOCK
+ * PARAMETERS
+ *  IN  source
+ * RETURN
+ *  TRUE if success FALSE otherwise
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_UpdatePukKeyState(sml_cat_enum cat, sml_puk_key_state_enum puk_state, kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *pSML = &pSMLg[source];
+    SML_CAT_META_STRUCT *meta = NULL;
+    SML_PUK_KEY_STRUCT *puk = NULL;
+    kal_uint16 length = 0;
+
+    meta = (SML_CAT_META_STRUCT *) (*pSML->getItem)(cat, SML_CAT_META, &length, source);
+    puk = (SML_PUK_KEY_STRUCT *) (*pSML->getItem)(cat, SML_CAT_PUK_KEY, &length, source);
+
+    if (meta->state == SML_STATE_UNLOCK)
+    {
+        puk->state = (kal_uint8)puk_state;
+
+        MD_TRC_INFO_SML_KEY_STATE_UPDATE_SUCCESS();
+
+        return KAL_TRUE;
+    }
+
+    return KAL_FALSE;
+}
+#endif  /* __SML_PUK__ */
+
+
+
+// TMO SML
+
+/* time to temporary unlock expiry in seconds */
+kal_uint32 sml_tmo_seconds_to_expire = 0;
+extern kal_bool smu_sml_tmo_timer_expiry_callback(void *param);
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_printkey
+ * DESCRIPTION
+ *  This method print the key for debugging
+ * PARAMETERS
+ *  IN          * key
+ * RETURN
+ *  void
+*******************************************************************************/
+void sml_tmo_printkey(t_cust_chl_sym_key *key)
+{
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_give
+ * DESCRIPTION
+ *  This method copys the LID files read from NVRAM to the SML obj
+ * PARAMETERS
+ *  IN          * pLidToObj
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+*******************************************************************************/
+static void sml_tmo_give( void *pLidToObj, kal_uint8 source )
+{
+    sml_tmo_context_struct * pObj = NULL;
+
+    if(NULL != pSMLg[source].pObj)
+    {
+
+        kal_sys_trace("SML: object is exist!");
+
+        pSMLg[source].pObj = NULL;
+
+    }
+
+    pObj = &(sml_tmo_cntxt_obj[source]);
+
+    kal_mem_cpy(pObj,
+                pLidToObj,
+                sizeof(sml_tmo_context_struct)
+                );
+
+    pSMLg[source].pObj = pObj;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_take
+ * DESCRIPTION
+ *  This method copys the contex of the SML object to the provided NVRAM LID.
+ * PARAMETERS
+ *  OUT         * pObjToLid
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void sml_tmo_take( void *pObjToLid, kal_uint8 source )
+{
+    sml_tmo_context_struct * pObj = (sml_tmo_context_struct *) pSMLg[source].pObj;
+
+    kal_mem_cpy(pObjToLid,
+                pObj,
+                sizeof(sml_tmo_context_struct)
+                );
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_destory
+ * DESCRIPTION
+ *  This method free the SML object in memory if it is not used.
+ * PARAMETERS
+ *  void
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void sml_tmo_destory(kal_uint8 source)
+{
+    pSMLg[source].pObj = NULL;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_getItem
+ * DESCRIPTION
+ *  This method returns the structure pointer and length of the structure
+ *  of the desired SML object items.
+ * PARAMETERS
+ *  IN          cat
+ *  IN          item
+ *  OUT         *length
+ * RETURN
+ *  void *
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void * sml_tmo_getItem( sml_cat_enum category,
+                           sml_ctx_enum item,
+                           kal_uint16 *plength,
+                           kal_uint8 source)
+{
+    sml_tmo_context_struct *pObj = (sml_tmo_context_struct *) pSMLg[source].pObj;
+
+    ASSERT(NULL != pObj);
+
+    switch(item)
+    {
+        case SML_TMO_CAT_VERSION:
+            *plength = SML_TMO_SIZE_OF_VERSION;
+            return (kal_uint32 *) &(pObj->version[0]);
+
+        case SML_TMO_CAT_PERTECTION_SCHEME:
+            *plength = sizeof(kal_uint8);
+            return (kal_uint32 *) &(pObj->protection_scheme);
+
+        case SML_TMO_CAT_STATE:
+            *plength = sizeof(kal_uint8);
+             return (kal_uint8 *) &(pObj->state);
+
+        case SML_TMO_CAT_LENGTH:
+            *plength = SML_TMO_SIZE_OF_LENGTH;
+            return (kal_uint16 *) &(pObj->length[0]);
+
+        case SML_TMO_CAT_NUM_PLMN:
+            *plength = SML_TMO_SIZE_OF_NUM_PLMN;
+            return (kal_uint16 *) &(pObj->num_of_plmn[0]);
+
+        case SML_TMO_CAT_PLMN_LIST:
+            *plength = SML_TMO_SIZE_OF_PLMN_LIST;
+            return (kal_uint8 *) &(pObj->plmn_list[0]);
+
+        case SML_TMO_CAT_NUM_GID:
+            *plength = SML_TMO_SIZE_OF_NUM_GID;
+            return (kal_uint16 *) &(pObj->num_of_gid[0]);
+
+        case SML_TMO_CAT_GID_LIST:
+            *plength = SML_TMO_SIZE_OF_GID_LIST;
+            return (kal_uint8 *) &(pObj->gid_list[0]);
+
+        case SML_TMO_CAT_START_TIME:
+            *plength = SML_TMO_SIZE_OF_START_TIME;
+            return (kal_uint32 *) &(pObj->start_time[0]);
+
+        case SML_TMO_CAT_END_TIME:
+            *plength = SML_TMO_SIZE_OF_END_TIME;
+            return (kal_uint32 *) &(pObj->end_time[0]);
+
+        case SML_TMO_CAT_IMEI:
+            *plength = SML_TMO_SIZE_OF_IMEI;
+            return (kal_uint8 *) &(pObj->imei[0]);
+
+        case SML_TMO_CAT_VERIFICATION_CODE:
+            *plength = SML_TMO_SIZE_OF_VERIFICATION_CODE;
+            return (kal_uint8 *) &(pObj->verification_code[0]);
+
+        case SML_TMO_CAT_UNLOCK_TIME_COUNTER:
+            *plength = SML_TMO_SIZE_OF_UNLOCK_TIME;
+            return (kal_uint32 *) &(pObj->unlock_time[0]);
+
+        default:
+            break;
+    }
+
+    return NULL;
+
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_putItem
+ * DESCRIPTION
+ *  This method set the desired items of the SML object.
+ * PARAMETERS
+ *  IN          cat
+ *  IN          item
+ *  IN          *pItem
+ *  IN          *plength
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void sml_tmo_putItem( sml_cat_enum cat,
+                         sml_ctx_enum item,
+                         void *pItem,
+                         kal_uint16 *plength,
+                         kal_uint8 source)
+{
+    sml_tmo_context_struct *pObj = (sml_tmo_context_struct *) pSMLg[source].pObj;
+
+    ASSERT(NULL != pObj);
+
+    switch(item)
+    {
+        case SML_TMO_CAT_UNLOCK_TIME_COUNTER:
+
+            kal_mem_cpy(&(pObj->unlock_time[0]),
+                        pItem,
+                        4
+                        );
+            break;
+
+        default:
+            break;
+    }
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_checkValidity
+ * DESCRIPTION
+ *  This method is to check the validity of the SML object
+ * PARAMETERS
+ *  IN          pObj    SML object
+ * RETURN
+ *  TRUE        Pass the validity check
+ *  FALSE       Fail the validity check
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_tmo_checkValidity(void *pObj, kal_uint8 source)
+{
+    sml_tmo_context_struct *pSmlObj = (sml_tmo_context_struct *) pObj;
+    kal_uint8 *pData = NULL;
+    kal_bool result = KAL_FALSE;
+    kal_uint32 data_len;
+    kal_uint8 imei_bcd[8+1];
+    kal_uint8 imei_ascii[SML_TMO_SIZE_OF_IMEI + 1];
+
+#ifdef UNIT_TEST    //Integrity check doesn't work on modis. Modify for UT.
+    return KAL_TRUE;
+#else
+
+    if (nvram_get_imei_value(8, imei_bcd, (1 + source)) == KAL_TRUE)
+    {
+        // ch2-ch1, last digit is 0
+        imei_bcd[7] = imei_bcd[7] & 0x0f;
+        imei_bcd[8] = 0xff;
+        convert_to_digit((kal_uint8 *)imei_bcd, imei_ascii);
+        kal_prompt_trace(MOD_SMU, "UE IMEI:   %s", imei_ascii);
+        kal_prompt_trace(MOD_SMU, "BLOB IMEI: %s", &(pSmlObj->imei[0]));
+        if (kal_mem_cmp(&(pSmlObj->imei[0]), imei_ascii, SML_TMO_SIZE_OF_IMEI) == 0)
+        {
+            result = KAL_TRUE;
+        }
+    }
+
+    if (result == KAL_FALSE)
+    {
+        //IMEI mismatch
+        MD_TRC_WARNING_SML_CHECK_IMEI_FAILED();
+        return KAL_FALSE;
+    }
+
+    if (pSmlObj == NULL)
+    {
+        return KAL_FALSE;
+    }
+
+    pData = sml_ReconstructBlob(pSmlObj, &data_len);
+
+    if (pData == NULL)
+    {
+        return KAL_FALSE;
+    }
+
+    if (pSmlObj->protection_scheme == SML_PROTECTION_SCHEME_HMAC_SHA256)
+    {
+        t_cust_chl_sym_key key = {0};
+        kal_uint32 ret;
+
+        ret = CustCHL_Get_Sym_Key(CUST_TM_SHARED_KEY2, &key);
+        if (ret == CUST_CHL_ERROR_NONE)
+        {
+            sml_tmo_printkey(&key);
+            sml_Dump("verify mac", &(pSmlObj->verification_code[0]), SML_TMO_SIZE_OF_MAC);
+            ret = CustCHL_Verify_MAC(CUST_CHL_ALG_MAC_SHA256, pData, data_len,
+                                     &pSmlObj->verification_code[0], &key.m_key[0], key.m_key_len);
+        }
+        result = (ret == CUST_CHL_ERROR_NONE) ? KAL_TRUE : KAL_FALSE;
+
+    }
+    else if (pSmlObj->protection_scheme == SML_PROTECTION_SCHEME_RSA2048)
+    {
+        t_cust_chl_asym_key key;
+        kal_uint32 ret;
+
+        ret = CustCHL_Get_Asym_Key(CUST_TM_PUB_KEY1, &key);
+        if (ret == CUST_CHL_ERROR_NONE)
+        {
+            ret = CustCHL_Verify_PSS_Signature(CUST_CHL_ALG_RSA_PSS_SHA256, pData, data_len,
+                                               &pSmlObj->verification_code[0], &key);
+
+            MD_TRC_INFO_SMU_RSA_PSS_VERIFY_SIGNATURE_CUST(ret);
+        }
+        result = (ret == CUST_CHL_ERROR_NONE) ? KAL_TRUE : KAL_FALSE;
+    }
+    else
+    {
+        result = KAL_FALSE;
+    }
+
+    free_ctrl_buffer(pData);
+
+    return result;
+#endif
+}
+
+#ifndef ATEST_ENABLE
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_rsu_nwTimeToSeconds
+ * DESCRIPTION
+ *  This method is to convert network time to seconds that have elapsed since 1970/1/1,00:00:00
+ * PARAMETERS
+ *  IN          nw_time_zone
+ *  IN          nw_time
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_uint32 sml_rsu_nwTimeToSeconds(kal_uint8 nw_time_zone, nw_time_zone_time_struct *nw_time)
+{
+    kal_uint32 seconds = 0;
+    kal_uint8 year_diff = 0, month_diff = 0, hour_diff = 0, min_diff = 0, sec_diff = 0;
+    kal_uint16 day_diff = 0;
+    kal_uint8 leap_years = 0;
+    //kal_uint8 time_diff = 0;
+    kal_uint8 month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
+    kal_uint8 i;
+    //kal_uint8 timezone = nw_time->time_zone;
+
+    /* base time: 1970/1/1,00:00:00 */
+    year_diff = 2000 + (nw_time->year & 0x0F)*10 + (nw_time->year >> 4) - 1970;
+    if (year_diff >= 100)
+    {
+        year_diff -= 100;
+    }
+    /* there is a leap year every four years */
+    leap_years = (year_diff+2)/4;
+
+    month_diff = (nw_time->month & 0x0F)*10 + (nw_time->month >> 4) - 1;
+    day_diff = (nw_time->day & 0x0F)*10 + (nw_time->day >> 4) - 1;
+    hour_diff = (nw_time->hour & 0x0F)*10 + (nw_time->hour >> 4);
+    min_diff = (nw_time->min & 0x0F)*10 + (nw_time->min >> 4);
+    sec_diff = (nw_time->sec & 0x0F)*10 + (nw_time->sec >> 4);
+
+    day_diff += leap_years;
+    for (i = 0; i < month_diff; i++)
+    {
+        day_diff += month_days[i];
+    }
+
+    seconds = 365*24*60*60*year_diff + 24*60*60*day_diff + 60*60*hour_diff + 60*min_diff + sec_diff;
+
+    // start_time in TMO SLB is UTC (GMT+0) time, thus no need adjust timezone
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+    //kal_prompt_trace(MOD_SMU,"year_diff:%d",year_diff);
+    //kal_prompt_trace(MOD_SMU,"leap_years:%d month_diff:%d day_diff:%d",leap_years,month_diff,day_diff);
+    //kal_prompt_trace(MOD_SMU,"hour_diff:%d",hour_diff);
+    //kal_prompt_trace(MOD_SMU,"min_diff:%d",min_diff);
+    //kal_prompt_trace(MOD_SMU,"sec_diff:%d",sec_diff);
+    //kal_prompt_trace(MOD_SMU,"timezone_diff:%d",time_diff);
+    //kal_prompt_trace(MOD_SMU,"[Total seconds]= %x",(kal_uint32)seconds);
+
+    return seconds;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_UpdateNwTimeAndCheckTempLock
+ * DESCRIPTION
+ *  This method is to update newtork time and check if temporary lock expires
+ * PARAMETERS
+ *  IN          source
+ *  IN          nw_time_zone
+ *  IN          nw_time
+ * RETURN
+ *  TRUE        Temporary unlock expires
+ *  FALSE       Temporary unlock does not expire
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_tmo_UpdateNwTimeAndCheckTempLock(kal_uint8 source, kal_uint8 nw_time_zone, nw_time_zone_time_struct *nw_time)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint8 *start_time, *end_time;
+    kal_uint8 *state = NULL;
+    kal_uint16 length;
+    kal_uint32 current_seconds = 0;
+    kal_uint64 start_seconds = 0;
+    kal_uint32 start_seconds_u32 = 0;
+    kal_uint32 duration_seconds = 0;
+    kal_uint8 i;
+
+    state = (kal_uint8 *)(*p->getItem)(SML_CAT_C, SML_TMO_CAT_STATE, &length, source);
+    start_time = (kal_uint8 *)(*p->getItem)(SML_CAT_C, SML_TMO_CAT_START_TIME, &length, source);
+    end_time = (kal_uint8 *)(*p->getItem)(SML_CAT_C, SML_TMO_CAT_END_TIME, &length, source);
+
+    if (*state != SML_TMO_STATE_TEMPORARY_UNLOCK)
+    {
+        return KAL_FALSE;
+    }
+
+    /* calculate start time and duration in seconds */
+    start_seconds = 0;
+    for (i = 0; i < SML_TMO_SIZE_OF_START_TIME-1; i++)
+    {
+        start_seconds += start_time[i];
+        start_seconds = (start_seconds << 8);
+    }
+    start_seconds += start_time[SML_TMO_SIZE_OF_START_TIME-1];
+    start_seconds /= 1000;  /* from milliseconds to seconds */
+
+    start_seconds_u32 = (kal_uint32)start_seconds;
+
+    duration_seconds = 0;
+    for (i = 0; i < SML_TMO_SIZE_OF_END_TIME-1; i++)
+    {
+        duration_seconds += end_time[i];
+        duration_seconds = (duration_seconds << 8);
+    }
+    duration_seconds += end_time[SML_TMO_SIZE_OF_END_TIME-1];
+
+    /* calculate current time in seconds */
+    current_seconds = sml_rsu_nwTimeToSeconds(nw_time_zone, nw_time);
+
+    MD_TRC_INFO_SML_TEMP_UNLOCK_TIME(start_seconds_u32, duration_seconds, current_seconds);
+
+    //kal_prompt_trace(MOD_SMU,"start_seconds_u32= %x", start_seconds_u32);
+    //kal_prompt_trace(MOD_SMU,"duration_seconds= %x", (kal_uint32)duration_seconds);
+    //kal_prompt_trace(MOD_SMU,"current_seconds= %x", (kal_uint32)current_seconds);
+
+    if (current_seconds >= (start_seconds_u32+duration_seconds))
+    {
+        MD_TRC_INFO_SML_NW_TIME_EXPIRED();
+        /* expired */
+        //*state = SML_STATE_PERMANENT_LOCK;
+        //sml_tmo_seconds_to_expire = 0;
+        return KAL_TRUE;
+    }
+    else
+    {
+        /* update unlock time for power off accuracy: start ---> unlock time ---> NITZ ---> power off/on ---> end */
+        sml_tmo_seconds_to_expire = current_seconds - start_seconds_u32;
+        (*p->putItem)(SML_CAT_C, SML_TMO_CAT_UNLOCK_TIME_COUNTER, &sml_tmo_seconds_to_expire, &length, source);
+        smu_nvram_write(NVRAM_EF_SML_TMO_LID, SML_TMO_NVRAM_ACCESS_ID_UNLOCK_EXPIRE, KAL_FALSE);
+
+        return KAL_FALSE;
+    }
+}
+#endif
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_CheckTempUnlock
+ * DESCRIPTION
+ *  This method is to check if temporary unlock expires
+ * PARAMETERS
+ *  IN          source
+ * RETURN
+ *  TRUE        Temporary unlock expires
+ *  FALSE       Temporary unlock does not expire
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_tmo_CheckTempUnlock(kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint8 *state, *end_time;
+    kal_uint16 length;
+    kal_uint32 duration_seconds = 0;
+    kal_uint8 i;
+
+    state = (kal_uint8 *)(*p->getItem)(SML_CAT_C, SML_TMO_CAT_STATE, &length, source);
+    end_time = (kal_uint8 *)(*p->getItem)(SML_CAT_C, SML_TMO_CAT_END_TIME, &length, source);
+
+    for (i = 0; i < SML_TMO_SIZE_OF_END_TIME-1; i++)
+    {
+        duration_seconds += end_time[i];
+        duration_seconds = (duration_seconds << 8);
+    }
+    duration_seconds += end_time[SML_TMO_SIZE_OF_END_TIME-1];
+
+    MD_TRC_INFO_SML_CHECK_TEMP_UNLOCK(sml_tmo_seconds_to_expire, duration_seconds);
+
+    //kal_prompt_trace(MOD_SMU, "counter: %d duration_seconds:%d",
+    //    sml_tmo_seconds_to_expire + (SML_TMO_TIMEOUT_PERIODIC_CHECK/KAL_TICKS_1_SEC),duration_seconds);
+
+    if ((sml_tmo_seconds_to_expire + (SML_TMO_TIMEOUT_PERIODIC_CHECK/KAL_TICKS_1_SEC)) >= duration_seconds)
+    {
+        *state = SML_TMO_STATE_PERMANENT_LOCK;
+        // Should reset SLB/NVRAM in following action
+        return KAL_TRUE;
+    }
+    else
+    {
+        sml_tmo_seconds_to_expire += (SML_TMO_TIMEOUT_PERIODIC_CHECK/KAL_TICKS_1_SEC);
+        (*p->putItem)(SML_CAT_C, SML_TMO_CAT_UNLOCK_TIME_COUNTER, &sml_tmo_seconds_to_expire, &length, source);
+        // Should write back to NVRAM in following action
+        return KAL_FALSE;
+    }
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_FirstLoad
+ * DESCRIPTION
+ *  This function check if it is the first loads of SML obj from NVRAM LID. If so,
+ *  calculate the verification code and store it
+ * PARAMETERS
+ *  IN          pLid
+ * RETURN
+ *  kal_bool    TRUE: first load
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_tmo_FirstLoad( void *pLid, kal_uint8 source )
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint32 i;
+    sml_tmo_context_struct * pObj = NULL;
+    kal_uint8 *pData = NULL;
+    kal_uint32 data_len;
+    kal_bool isFirstLoad = KAL_TRUE;
+    kal_uint8 imei_bcd[8+1];
+    kal_uint8 imei_ascii[SML_TMO_SIZE_OF_IMEI + 1];
+
+    pObj = (sml_tmo_context_struct *) pLid;
+
+    /* the verification code will be all zero if it is the first time to load */
+    for (i = 0; i < SML_TMO_SIZE_OF_VERIFICATION_CODE; i++)
+    {
+        if (pObj->verification_code[i] != 0)
+        {
+            isFirstLoad = KAL_FALSE;
+            break;
+        }
+    }
+
+    if (isFirstLoad == KAL_TRUE)
+    {
+        kal_uint32 ret = CUST_CHL_ERROR_NONE;
+
+        if (nvram_get_imei_value(8, imei_bcd, (1 + source)) == KAL_TRUE)
+        {
+            // ch2-ch1, last digit is 0
+            imei_bcd[7] = imei_bcd[7] & 0x0f;
+            imei_bcd[8] = 0xff;
+            convert_to_digit((kal_uint8 *)imei_bcd, imei_ascii);
+            kal_mem_cpy(&(pObj->imei[0]), imei_ascii, SML_TMO_SIZE_OF_IMEI);
+        }
+
+        pData = sml_ReconstructBlob(pObj, &data_len);
+
+        if (pData == NULL)
+        {
+            // This error will be traced in sml_tmo_Load
+            return KAL_FALSE;
+        }
+
+        if (pObj->protection_scheme == SML_PROTECTION_SCHEME_HMAC_SHA256)
+        {
+            t_cust_chl_sym_key key = {0};
+
+            ret = CustCHL_Get_Sym_Key(CUST_TM_SHARED_KEY2, &key);
+            if (ret == CUST_CHL_ERROR_NONE)
+            {
+                t_cust_chl_mac_u mac;
+
+                sml_tmo_printkey(&key);
+                ret = CustCHL_Calculate_MAC(CUST_CHL_ALG_MAC_SHA256, pData, data_len,
+                                            &key.m_key[0], key.m_key_len, &mac);
+                sml_Dump("calculate mac", &(mac.m_u8[0]), mac.m_len);
+                if (ret == CUST_CHL_ERROR_NONE)
+                {
+                    kal_mem_cpy(&pObj->verification_code[0], &mac.m_u8[0], mac.m_len);
+
+                    // Test validation
+                    if (sml_tmo_checkValidity((void*)pObj, source) == KAL_FALSE)
+                    {
+                        MD_TRC_WARNING_SML_LOAD_CHECK_VALIDITY_FAILED();
+                    }
+                }
+            }
+        }
+        else
+        {
+            /* To-Do for signature */
+        }
+
+        free_ctrl_buffer(pData);
+
+        if (ret == CUST_CHL_ERROR_NONE)
+        {
+            /* Clean the old ones */
+            (*p->destory)(source);
+
+            /* Load the new one */
+            (*p->give)((void *)pObj, source);
+        }
+    }
+
+    return isFirstLoad;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_ReconstructBlob
+ * DESCRIPTION
+ *  This function re-construct BLOB of variable length (mcc-mnc-gid)
+ * PARAMETERS
+ *  IN          *pObj
+ *  OUT       pLen
+ * RETURN
+ *  kal_uint8 * re-construct data for mac-signature
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_uint8 *sml_ReconstructBlob( sml_tmo_context_struct *pObj, kal_uint32 *pLen )
+{
+    kal_uint8 *pData = NULL;
+    kal_uint32 blob_len, data_len;
+    kal_uint32 sizeN, sizeM;
+    kal_uint32 idx, len;
+
+    blob_len = sml_GetCount(&(pObj->length[0]));
+    sizeN = sml_GetCount(&(pObj->num_of_plmn[0])) * SML_TMO_SIZE_OF_MCC_MNC;
+    sizeM = sml_GetCount(&(pObj->num_of_gid[0])) * SML_TMO_SIZE_OF_GID;
+
+    if (pObj->protection_scheme == SML_PROTECTION_SCHEME_HMAC_SHA256)
+    {
+        data_len = blob_len - SML_TMO_SIZE_OF_MAC;
+    }
+    else if (pObj->protection_scheme == SML_PROTECTION_SCHEME_RSA2048)
+    {
+        data_len = blob_len - SML_TMO_SIZE_OF_SIGNATURE;
+    }
+    else
+    {
+        data_len = 0;
+    }
+
+    *pLen = data_len;
+
+    if (data_len == 0)
+    {
+        return pData;
+    }
+
+    pData = (kal_uint8 *)get_ctrl_buffer(data_len);
+
+    // version + protection scheme + state + num of plmn + plmn list size
+    len = SML_TMO_SIZE_OF_VERSION + 1 + 1 + SML_TMO_SIZE_OF_LENGTH + SML_TMO_SIZE_OF_NUM_PLMN + sizeN;
+    kal_mem_cpy(pData, (kal_uint8 *)pObj, len);
+
+    // num of gid + gid list size
+    idx = len;
+    len = SML_TMO_SIZE_OF_NUM_GID + sizeM;
+    kal_mem_cpy((pData + idx), (kal_uint8 *)&(pObj->num_of_gid[0]), len);
+
+    // from reserved to imei
+    idx = idx + len;
+    len = data_len - idx;
+    kal_mem_cpy((pData + idx), (kal_uint8 *)&(pObj->reserved[0]), len);
+
+    sml_Dump("re-construct blob", pData, data_len);
+
+    return pData;
+
+}
+
+kal_uint8 *sml_tmo_get_modem_config_ReconstructBlob( sml_tmo_context_struct *pObj, kal_uint16 *pLen, kal_uint8 *pData )
+{
+    kal_uint16 blob_len;
+    kal_uint16 sizeN, sizeM;
+    kal_uint16 idx, len;
+
+    blob_len = sml_GetCount(&(pObj->length[0]));
+    sizeN = sml_GetCount(&(pObj->num_of_plmn[0])) * SML_TMO_SIZE_OF_MCC_MNC;
+    sizeM = sml_GetCount(&(pObj->num_of_gid[0])) * SML_TMO_SIZE_OF_GID;
+
+    *pLen = blob_len;
+
+    if (blob_len == 0)
+    {
+        return pData;
+    }
+
+    // version + protection scheme + state + num of plmn + plmn list size
+    len = SML_TMO_SIZE_OF_VERSION + 1 + 1 + SML_TMO_SIZE_OF_LENGTH + SML_TMO_SIZE_OF_NUM_PLMN + sizeN;
+    kal_mem_cpy(pData, (kal_uint8 *)pObj, len);
+
+    // num of gid + gid list size
+    idx = len;
+    len = SML_TMO_SIZE_OF_NUM_GID + sizeM;
+    kal_mem_cpy((pData + idx), (kal_uint8 *)&(pObj->num_of_gid[0]), len);
+
+    // from reserved to imei
+    idx = idx + len;
+    len = blob_len - idx;
+    kal_mem_cpy((pData + idx), (kal_uint8 *)&(pObj->reserved[0]), len);
+
+    return pData;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_ConstructBlob
+ * DESCRIPTION
+ *  This function construct full size Bolb from a variant length Blob
+ * PARAMETERS
+ *  IN          *pObj
+ *  OUT       pLen
+ * RETURN
+ *  kal_uint8 * construct data
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+extern kal_uint8 *sml_ConstructBlob( kal_uint8 *pObj, kal_uint16 slb_len)
+{
+    kal_uint16 sizeN, sizeM;
+    kal_uint16 length = 0;
+    kal_uint16 idx;
+    sml_tmo_context_struct *pBlob;
+
+    idx = SML_TMO_SIZE_OF_VERSION + 1 + 1 + SML_TMO_SIZE_OF_LENGTH;    // version, protection scheme, state, length
+    sizeN = sml_GetCount(&(pObj[idx])) * SML_TMO_SIZE_OF_MCC_MNC;
+
+    idx = idx + SML_TMO_SIZE_OF_NUM_PLMN + sizeN;                  // num of mcc-mnc, N
+    sizeM = sml_GetCount(&(pObj[idx])) * SML_TMO_SIZE_OF_GID;
+
+    if ((sizeN > (SML_TMO_MAX_PLMN_NUMBER*SML_TMO_SIZE_OF_MCC_MNC)) || (sizeM > (SML_TMO_MAX_GID_NUMBER*SML_TMO_SIZE_OF_GID)))
+    {
+        return NULL;
+    }
+
+    pBlob = (sml_tmo_context_struct *)get_ctrl_buffer(SML_TMO_MAX_SLB_SIZE);
+    kal_mem_set(pBlob, 0, SML_TMO_MAX_SLB_SIZE);
+
+    length = SML_TMO_SIZE_OF_VERSION + 1 + 1 + SML_TMO_SIZE_OF_LENGTH + SML_TMO_SIZE_OF_NUM_PLMN + sizeN;
+    kal_mem_cpy(pBlob, &(pObj[0]), length);
+
+    length = SML_TMO_SIZE_OF_NUM_GID + sizeM;
+    kal_mem_cpy(&(pBlob->num_of_gid[0]), &(pObj[idx]), length);
+
+    idx = idx + length;
+    length = slb_len - idx;
+    kal_mem_cpy(&(pBlob->reserved[0]), &(pObj[idx]), length);
+
+    sml_Dump("update slb", (kal_uint8 *)pBlob, SML_TMO_MAX_SLB_SIZE);
+
+    return (kal_uint8 *)pBlob;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_GetCount
+ * DESCRIPTION
+ *  This function convert 2 bytes of hex into int (ex: 0x00 0x04 -> 4)
+ * PARAMETERS
+ *  IN          *pData
+ * RETURN
+ *  kal_uint16   integer of pData
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_uint16 sml_GetCount( kal_uint8 *pData )
+{
+    kal_uint16 num = (((kal_uint16)pData[0]) << 8) + pData[1];
+
+    MD_TRC_INFO_SMU_GET_COUNT(pData[0], pData[1], num);
+
+    return num;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Dump
+ * DESCRIPTION
+ *  This function print pData for debugging
+ * PARAMETERS
+ *  IN          *pData
+ *  IN          len
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+void sml_Dump(kal_char *title, kal_uint8 *pData, kal_uint16 len)
+{
+#if defined(UNIT_TEST)
+    kal_uint8 buffer[128] = {0};
+    kal_uint16 i, j, k, buf_size;
+
+    kal_prompt_trace(MOD_SMU, "%s", title);
+    kal_prompt_trace(MOD_SMU, "sml_Dump of length: %d", len);
+
+    if (len == 0)
+    {
+        return;
+    }
+
+    buf_size = sizeof(buffer);
+
+    j = 0;
+    for (i = 0; i < len; i++)
+    {
+        buffer[j] = pData[i];
+        if (j == (buf_size - 1))
+        {
+            for (k = 0; k < buf_size; (k += 4))
+            {
+                kal_prompt_trace(MOD_SMU, "%02x %02x %02x %02x", buffer[k], buffer[k+1], buffer[k+2], buffer[k+3]);
+            }
+            kal_mem_set(&buffer[0], 0, buf_size);
+            j = 0;
+        }
+        else
+        {
+            j++;
+        }
+    }
+
+    if (j != 0)
+    {
+        for (k = 0; k < j; (k += 4))
+        {
+            kal_prompt_trace(MOD_SMU, "%02x %02x %02x %02x", buffer[k], buffer[k+1], buffer[k+2], buffer[k+3]);
+        }
+    }
+#endif /* UNIT_TEST */
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_Load
+ * DESCRIPTION
+ *  This function loads the SML obj from NVRAM LID (NVRAM_READ_CNF)
+ * PARAMETERS
+ *  IN          pLid
+ * RETURN
+ *  kal_uint16  Obj size
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_uint16 sml_tmo_Load( void *pLid, kal_uint8 source )
+{
+
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+
+    kal_uint16 length = sizeof(sml_tmo_context_struct);
+
+    if (sml_tmo_checkValidity(pLid, source) == KAL_FALSE)
+    {
+        MD_TRC_WARNING_SML_LOAD_CHECK_VALIDITY_FAILED();
+        length = SML_TMO_INVALID_CONTEXT_OBJ_LENGTH;
+    }
+
+    /* Clean the old ones */
+    (*p->destory)(source);
+
+    /* Load the new one */
+    (*p->give)(pLid, source);
+
+    return length;
+
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_Save
+ * DESCRIPTION
+ *  This function saves the SML obj to NVRAM LID (NVRAM_WRITE_REQ)
+ * PARAMETERS
+ *  OUT          pLid
+ * RETURN
+ *  kal_uint16  Obj size
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_uint16 sml_tmo_Save( void *pLid, kal_uint8 source )
+{
+
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+
+    kal_uint16 length = sizeof(sml_tmo_context_struct);
+
+    (*p->take)(pLid, source);
+
+    return length;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_Check
+ * DESCRIPTION
+ *  This function is used to check if the code is in the Pass list
+ * PARAMETERS
+ *  IN          cat
+ *  IN          *code
+ *  IN          len
+ *  OUT          *remain
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_tmo_Check( sml_cat_enum cat,
+                    kal_uint8 *imsi,
+                    kal_uint8 *gid1,
+                    kal_uint8 *gid2,
+                    kal_uint8 sim_mnc_len,
+                    kal_uint8 *remain,
+                    kal_uint8 source)
+{
+
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint8 *pState = NULL;
+    kal_uint8 *pData_plmn = NULL;
+    kal_uint8 *pData_gid = NULL;
+    kal_uint16 length = 0;
+    kal_uint8 code[SML_TMO_SIZE_OF_MCC_MNC_GID] = {0};
+    kal_uint8 code_len = 0;
+    kal_uint8 compare_length = 0;
+    kal_uint16 num_plmn = 0;
+    kal_uint16 num_gid = 0;
+    kal_uint16 i, j;
+    kal_uint8 custom_exception[3][SML_TMO_SIZE_OF_MCC_MNC] = {{0x31, 0x03, 0x10, 0x00},
+                                                          {0x31, 0x03, 0x00, 0x00},
+                                                          {0x00, 0x10, 0x10, 0x00}};
+
+    /* Check the integration of SIM Lock blob first */
+    if ((p == NULL) || (p != NULL && sml_tmo_checkValidity(p->pObj, source) == KAL_FALSE))
+    {
+        MD_TRC_WARNING_SML_CHECK_VALIDITY_FAILED();
+        return KAL_FALSE;
+    }
+
+    pState = (kal_uint8 *)(*p->getItem)(cat, SML_TMO_CAT_STATE, &length, source);
+
+    *remain = 0xFF;    /* TMO SIM lock doesn't need retry counter */
+
+    if (*pState == SML_TMO_STATE_TEMPORARY_UNLOCK)
+    {
+        kal_uint8 *counter = NULL;
+        kal_uint32 time_in_sec = 0;
+        kal_uint8 i;
+
+        counter = (kal_uint8 *)(*p->getItem)(cat, SML_TMO_CAT_UNLOCK_TIME_COUNTER, &length, source);
+
+        for (i = 0; i < (SML_TMO_SIZE_OF_UNLOCK_TIME - 1); i++)
+        {
+            time_in_sec += counter[(SML_TMO_SIZE_OF_UNLOCK_TIME-1-i)];
+            time_in_sec = (time_in_sec << 8);
+        }
+        time_in_sec += counter[0];
+
+        sml_tmo_seconds_to_expire += *counter;
+
+        if (smu_sml_tmo_timer_expiry_callback(NULL) == KAL_TRUE)
+        {
+            // Time expired -> back to LOCK , reset counter
+            *pState = SML_TMO_STATE_PERMANENT_LOCK;
+            //return KAL_FALSE;
+        }
+        else
+        {
+            return KAL_TRUE;
+        }
+    }
+
+    if (*pState == SML_TMO_STATE_PERMANENT_UNLOCK)
+    {
+        /* always pass if it is not locked! */
+        return KAL_TRUE;
+    }
+
+    if (*pState == SML_TMO_STATE_PERMANENT_LOCK)
+    {
+        code_len = sml_tmo_GetCode(cat, imsi, gid1, gid2, sim_mnc_len, NULL, code);
+        compare_length = SML_TMO_SIZE_OF_MCC_MNC + SML_TMO_SIZE_OF_GID;
+
+        num_gid = sml_GetCount(((*p->getItem)(cat, SML_TMO_CAT_NUM_GID, &length, source)));
+        pData_gid = (kal_uint8 *)(*p->getItem)(cat, SML_TMO_CAT_GID_LIST, &length, source);
+    }
+    else /* SML_STATE_PARTIAL_UNLOCK */
+    {
+        /* GID is not necessary in partial unlock */
+        code_len = sml_tmo_GetCode(cat, imsi, NULL, NULL, sim_mnc_len, NULL, code);
+        compare_length = SML_TMO_SIZE_OF_MCC_MNC;
+    }
+
+    //kal_prompt_trace(MOD_SMU,"code : %02x %02x %02x %02x %02x %02x", code[0], code[1], code[2], code[3], code[4], code[5]);
+    //kal_prompt_trace(MOD_SMU,"pData: %02x %02x %02x %02x %02x %02x", pData[0], pData[1], pData[2], pData[3], pData[4], pData[5]);
+    //kal_prompt_trace(MOD_SMU,"code_len:%d compare_length:%d",code_len,compare_length);
+
+    /* if found match in mcc-mnc, then compare gid if permanent lock */
+    num_plmn = sml_GetCount(((*p->getItem)(cat, SML_TMO_CAT_NUM_PLMN, &length, source)));
+    pData_plmn = (kal_uint8 *)(*p->getItem)(cat, SML_TMO_CAT_PLMN_LIST, &length, source);
+
+    MD_TRC_INFO_SMU_CHECK_LENGTH(code_len, compare_length, sim_mnc_len);
+
+    sml_Dump("code", code, SML_TMO_SIZE_OF_MCC_MNC_GID);
+    sml_Dump("plmn list", pData_plmn, (SML_TMO_SIZE_OF_MCC_MNC*num_plmn));
+    sml_Dump("gid1 list", pData_gid, (SML_TMO_SIZE_OF_GID*num_gid));
+    sml_Dump("ignore list", *custom_exception, (3*SML_TMO_SIZE_OF_MCC_MNC));
+
+    for (i = 0; i < num_plmn; i++)
+    {
+        if (kal_mem_cmp(code, (pData_plmn + (i*SML_TMO_SIZE_OF_MCC_MNC)), SML_TMO_SIZE_OF_MCC_MNC) == 0)
+        {
+            if (compare_length == SML_TMO_SIZE_OF_MCC_MNC)   // partial
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                // permanent but ignore gid1
+                for (j = 0; j < 3; j++)
+                {
+                    if (kal_mem_cmp(code, &custom_exception[j], SML_TMO_SIZE_OF_MCC_MNC) == 0)
+                    {
+                        MD_TRC_INFO_SMU_CHECK_IGNORE_PID1(
+                                        custom_exception[j][0], custom_exception[j][1],
+                                        custom_exception[j][2], custom_exception[j][3]);
+                        return KAL_TRUE;
+                    }
+                }
+
+                // no gid should be checked
+                if (num_gid == 0)
+                {
+                    MD_TRC_INFO_SML_NO_GID();
+                    return KAL_TRUE;
+                }
+
+                for (j = 0; j < num_gid; j++)
+                {
+                    if (kal_mem_cmp(&code[SML_TMO_SIZE_OF_MCC_MNC], (pData_gid + (j*SML_TMO_SIZE_OF_GID)), SML_TMO_SIZE_OF_GID) == 0)
+                    {
+                        return KAL_TRUE;
+                    }
+                }
+            }
+        }
+    }
+
+    return KAL_FALSE;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_Catcode
+ * DESCRIPTION
+ *  This function is used to compose the code of each category
+ * PARAMETERS
+ *  IN          cat
+ *  IN          *imsi
+ *  IN          *gid1
+ *  IN          *gid2
+ *  IN          mnc_len
+ *  OUT          *code
+ * RETURN
+ *  kal_uint8   code length
+ * GLOBALS AFFECTED
+ *  NONE
+ *******************************************************************************/
+kal_uint8 sml_tmo_Catcode( sml_cat_enum cat,
+                       kal_uint8 *imsi,
+                       kal_uint8 *gid1,
+                       kal_uint8 *gid2,
+                       kal_uint8 mnc_len,
+                       kal_uint8 *code )
+{
+    kal_uint8 code_len = 0;
+
+    if (imsi == NULL)
+    {
+        return 0;
+    }
+
+    if(mnc_len == 3)
+    {
+        /* MCC/MNC */
+        code[0] = (imsi[1]&0xF0) | (imsi[2]&0x0F);
+        code[1] = (imsi[2]&0xF0) | (imsi[3]&0x0F);
+        code[2] = (imsi[3]&0xF0) | (imsi[4]&0x0F);
+        code[3] = 0;
+
+    }
+    else
+    {
+        kal_uint8 test_plmn[] = {0x00, 0x1F, 0x01};
+
+        /* MCC/MNC */
+        // 123 45 => 123F4500
+        code[0] = (imsi[1]&0xF0) | (imsi[2]&0x0F);
+        code[1] = (imsi[2]&0xF0) | 0x0F;
+        code[2] = ((imsi[3] << 4)&0xF0) | ((imsi[3] >> 4)&0x0F);
+        code[3] = 0;
+
+        /* Handle test sim case */
+        if (kal_mem_cmp(test_plmn, code, sizeof(test_plmn)) == 0)
+        {
+            // 001 01 should be coded as 00101000, rather than 001F0100
+            code[1] = 0x10;
+            code[2] = 0x10;
+        }
+    }
+
+    // TMO use 2 byte GID1
+    // if (gid1 != NULL && gid2 != NULL)
+    if (gid1 != NULL)
+    {
+        /* GID */
+        code[4] = gid1[0];
+        code[5] = gid1[1];
+        //code[5] = gid2[0];
+        code_len = SML_TMO_SIZE_OF_MCC_MNC_GID;
+    }
+    else
+    {
+        code_len = SML_TMO_SIZE_OF_MCC_MNC;
+    }
+
+    return code_len;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_GetCode
+ * DESCRIPTION
+ *  This function is used to compose the code of each category  whether
+ *  mnc length is 2 or 3
+ * PARAMETERS
+ *  cat         [IN]    category of the SIM-ME-Lock
+ *  imsi        [IN]    imsi of the code source
+ *  gid1        [IN]    gid1 of the code source
+ *  gid2        [IN]    gid2 of the code source
+ *  sim_mnc_len [IN]    the mnc length decided by SIM
+ *  pdata       [IN]    the saved code for comparing
+ *  code        [OUT]   the composed code according to all input parameters
+ *
+ * RETURN
+ *  kal_uint16 file size
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+
+kal_uint8 sml_tmo_GetCode( sml_cat_enum cat,
+                       kal_uint8 * imsi,
+                       kal_uint8 * gid1,
+                       kal_uint8 * gid2,
+                       kal_uint8 sim_mnc_len,
+                       kal_uint8 * pdata,
+                       kal_uint8 * code)
+{
+    kal_uint8 mnc_len=0;
+
+    if (SML_MNC_LENGTH_NEST == 1)
+    {
+        mnc_len = sim_mnc_len;
+    }
+    else
+    {
+        ASSERT(0); /* It is not possible to tell the MNC lengh in TMO SIM lock blob */
+    }
+
+    return sml_tmo_Catcode(cat, imsi, gid1, gid2, mnc_len, code);
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_GetVersion
+ * DESCRIPTION
+ *  This method is used to get SLB version
+ * PARAMETERS
+ *  OUT         SLB version
+ *  IN          source
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  none
+ *******************************************************************************/
+void sml_tmo_GetVersion(kal_uint8 *version, kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint16 length;
+    kal_uint8 *slb_ver;
+
+    slb_ver = (kal_uint8 *) (*p->getItem)(SML_CAT_C, SML_TMO_CAT_VERSION, &length, source);
+
+    kal_mem_cpy(version, slb_ver, SML_TMO_SIZE_OF_VERSION);
+}
+
+#ifdef __CARRIER_RESTRICTION__
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_Load
+ * DESCRIPTION
+ *  This function loads the SML carrier restriction obj from NVRAM LID (NVRAM_READ_CNF)
+ * PARAMETERS
+ *  IN          pLid
+ * RETURN
+ *  kal_uint16  Obj size
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+ *******************************************************************************/
+kal_uint16 sml_crrst_Load( void *pLid, kal_uint8 source )
+{
+    nvram_ef_smu_crrst_obj_struct *p = &pCRRSTg[source];
+
+    kal_uint16 length = sizeof(smu_carrier_match_context_struct);
+
+    /* Clean the old ones */
+    (*p->destory)(source);
+
+    /* Load the new one */
+    (*p->give)(pLid, source);
+
+    return length;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_give
+ * DESCRIPTION
+ *  This method copies the LID files read from NVRAM to the SML Carrier Resriction obj
+ * PARAMETERS
+ *  IN          * pLidToObj
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+*******************************************************************************/
+static void sml_crrst_give( void *pLidToObj, kal_uint8 source )
+{
+    smu_carrier_match_context_struct * pObj = NULL;
+
+    if(NULL != pCRRSTg[source].pObj)
+    {
+        pCRRSTg[source].pObj = NULL;
+    }
+
+    pObj = &(smu_crrst_cntxt_obj[0]);
+
+    kal_mem_cpy(pObj,
+                pLidToObj,
+                sizeof(smu_carrier_match_context_struct)
+                );
+
+    pCRRSTg[source].pObj = pObj;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_take
+ * DESCRIPTION
+ *  This method copies the context of the SML Carrier Resriction object to the provided NVRAM LID.
+ * PARAMETERS
+ *  OUT         * pObjToLid
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+ *******************************************************************************/
+static void sml_crrst_take( void *pObjToLid, kal_uint8 source )
+{
+    smu_carrier_match_context_struct * pObj = (smu_carrier_match_context_struct *) pCRRSTg[source].pObj;
+
+    kal_mem_cpy(pObjToLid,
+                pObj,
+                sizeof(smu_carrier_match_context_struct)
+                );
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_destory
+ * DESCRIPTION
+ *  This method free the SML Carrier Resriction object in memory if it is not used.
+ * PARAMETERS
+ *  void
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+ *******************************************************************************/
+static void sml_crrst_destory(kal_uint8 source)
+{
+    pCRRSTg[source].pObj = NULL;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_getItem
+ * DESCRIPTION
+ *  This method returns the structure pointer and length of the structure
+ *  of the desired SML Carrier Resriction object items.
+ * PARAMETERS
+ *  IN          cat
+ *  IN          item
+ *  OUT         *length
+ * RETURN
+ *  void *
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+ *******************************************************************************/
+static void * sml_crrst_getItem (smu_crrst_cat_enum category,
+                           sml_ctx_enum item,
+                           kal_uint16 *plength,
+                           kal_uint8 source)
+{
+    smu_carrier_match_context_struct *pObj = (smu_carrier_match_context_struct *) pCRRSTg[source].pObj;
+
+    ASSERT(NULL != pObj);
+
+    switch(item)
+    {
+
+#ifndef __DISABLE_CRRST_LOCK__
+        case SMU_CRRST_KEY:
+
+            *plength = sizeof(smu_carrier_match_control_key_struct);
+
+            return (smu_carrier_match_control_key_struct *) &(pObj->key);
+#endif
+
+        case SMU_CRRST_BLACK_LIST_META:
+
+            *plength = sizeof(smu_carrier_match_category_meta_struct);
+
+            return (smu_carrier_match_category_meta_struct *) &(pObj->black_list.cat[category]);
+
+        case SMU_CRRST_WHITE_LIST_META:
+
+            *plength = sizeof(smu_carrier_match_category_meta_struct);
+
+            return (smu_carrier_match_category_meta_struct *) &(pObj->white_list.cat[category]);
+
+        case SMU_CRRST_ALLOW_ALL:
+
+            *plength = sizeof(kal_uint8);
+
+            return (kal_uint8 *) &(pObj->allow_all);
+
+        case SMU_CRRST_STATE:
+
+            *plength = sizeof(smu_carrier_restriction_state_enum);
+
+            return (smu_carrier_restriction_state_enum *) &(pObj->carrier_rest_state);
+
+        case SMU_CRRST_MULTI_SIM_POLICY:
+
+            *plength = sizeof(kal_uint8);
+
+            return (kal_uint8 *) &(pObj->multi_sim_policy);
+
+        case SMU_CRRST_ALLOWED_CARRIERS_PRIORITIZED:
+
+            *plength = sizeof(kal_uint8);
+
+            return (kal_uint8 *) &(pObj->allowed_carriers_prioritized);
+
+        default:
+            break;
+    }
+
+    switch (category)
+    {
+        case SMU_CRRST_CAT_N:
+
+            *plength = SMU_CARRIER_MATCH_CFG_CAT_N_SIZE;
+
+            if (item == SMU_CRRST_BLACK_LIST)
+            {
+                return (kal_uint8 *) &(pObj->black_list.code_cat_n[0]);
+            }
+            else
+            {
+                return (kal_uint8 *) &(pObj->white_list.code_cat_n[0]);
+            }
+
+        case SMU_CRRST_CAT_SPN:
+
+            *plength = SMU_CARRIER_MATCH_CFG_CAT_SPN_SIZE;
+
+            if (item == SMU_CRRST_BLACK_LIST)
+            {
+                return (kal_uint8 *) &(pObj->black_list.code_cat_spn[0]);
+            }
+            else
+            {
+                return (kal_uint8 *) &(pObj->white_list.code_cat_spn[0]);
+            }
+
+        case SMU_CRRST_CAT_IMSI_PREFIX:
+
+            *plength = SMU_CARRIER_MATCH_CFG_CAT_IMSI_PREFIX_SIZE;
+
+            if (item == SMU_CRRST_BLACK_LIST)
+            {
+                return (kal_uint8 *) &(pObj->black_list.code_cat_imsi_prefix[0]);
+            }
+            else
+            {
+                return (kal_uint8 *) &(pObj->white_list.code_cat_imsi_prefix[0]);
+            }
+
+        case SMU_CRRST_CAT_GID1:
+
+            *plength = SMU_CARRIER_MATCH_CFG_CAT_GID1_SIZE;
+
+            if (item == SMU_CRRST_BLACK_LIST)
+            {
+                return (kal_uint8 *) &(pObj->black_list.code_cat_gid1[0]);
+            }
+            else
+            {
+                return (kal_uint8 *) &(pObj->white_list.code_cat_gid1[0]);
+            }
+
+        case SMU_CRRST_CAT_GID2:
+
+            *plength = SMU_CARRIER_MATCH_CFG_CAT_GID2_SIZE;
+
+            if (item == SMU_CRRST_BLACK_LIST)
+            {
+                return (kal_uint8 *) &(pObj->black_list.code_cat_gid2[0]);
+            }
+            else
+            {
+                return (kal_uint8 *) &(pObj->white_list.code_cat_gid2[0]);
+            }
+
+        default:
+            /* do nothing */
+            break;
+    }
+
+    return NULL;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_putItem
+ * DESCRIPTION
+ *  This method sets the desired items of the SML Carrier Restriction object.
+ * PARAMETERS
+ *  IN          cat
+ *  IN          item
+ *  IN          *pItem
+ *  IN          *plength
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+ *******************************************************************************/
+static void sml_crrst_putItem( smu_crrst_cat_enum category,
+                         sml_ctx_enum item,
+                         void *pItem,
+                         kal_uint16 *plength,
+                         kal_uint8 source)
+{
+    smu_carrier_match_context_struct *pObj = (smu_carrier_match_context_struct *) pCRRSTg[source].pObj;
+
+    ASSERT(NULL != pObj);
+
+    switch(item)
+    {
+        case SMU_CRRST_BLACK_LIST_META:
+            kal_mem_cpy(&(pObj->black_list.cat[category]),
+                        pItem,
+                        *plength
+                        );
+        return;
+
+        case SMU_CRRST_WHITE_LIST_META:
+            kal_mem_cpy(&(pObj->white_list.cat[category]),
+                        pItem,
+                        *plength
+                        );
+        return;
+
+        case SMU_CRRST_KEY:
+            kal_mem_cpy(&(pObj->key),
+                        pItem,
+                        *plength
+                        );
+        return;
+
+        case SMU_CRRST_ALLOW_ALL:
+            kal_mem_cpy(&(pObj->allow_all),
+                         pItem,
+                         *plength
+                         );
+        return;
+
+        case SMU_CRRST_MULTI_SIM_POLICY:
+            kal_mem_cpy(&(pObj->multi_sim_policy),
+                         pItem,
+                         *plength
+                         );
+        return;
+
+        case SMU_CRRST_ALLOWED_CARRIERS_PRIORITIZED:
+            kal_mem_cpy(&(pObj->allowed_carriers_prioritized),
+                         pItem,
+                         *plength
+                         );
+        return;
+
+        default:
+            break;
+    }
+
+    switch (category)
+    {
+        case SMU_CRRST_CAT_N:
+            if (item == SMU_CRRST_BLACK_LIST)
+            {
+                kal_mem_cpy(&(pObj->black_list.code_cat_n[0]),
+                            pItem,
+                            *plength
+                            );
+            }
+            else
+            {
+                kal_mem_cpy(&(pObj->white_list.code_cat_n[0]),
+                            pItem,
+                            *plength
+                            );
+            }
+            return;
+
+        case SMU_CRRST_CAT_SPN:
+            if (item == SMU_CRRST_BLACK_LIST)
+            {
+                kal_mem_cpy(&(pObj->black_list.code_cat_spn[0]),
+                            pItem,
+                            *plength
+                            );
+            }
+            else
+            {
+                kal_mem_cpy(&(pObj->white_list.code_cat_spn[0]),
+                            pItem,
+                            *plength
+                            );
+            }
+            return;
+
+        case SMU_CRRST_CAT_IMSI_PREFIX:
+            if (item == SMU_CRRST_BLACK_LIST)
+            {
+                kal_mem_cpy(&(pObj->black_list.code_cat_imsi_prefix[0]),
+                            pItem,
+                            *plength
+                            );
+            }
+            else
+            {
+                kal_mem_cpy(&(pObj->white_list.code_cat_imsi_prefix[0]),
+                            pItem,
+                            *plength
+                            );
+            }
+            return;
+
+        case SMU_CRRST_CAT_GID1:
+            if (item == SMU_CRRST_BLACK_LIST)
+            {
+                kal_mem_cpy(&(pObj->black_list.code_cat_gid1[0]),
+                            pItem,
+                            *plength
+                            );
+            }
+            else
+            {
+                kal_mem_cpy(&(pObj->white_list.code_cat_gid1[0]),
+                            pItem,
+                            *plength
+                            );
+            }
+            return;
+
+        case SMU_CRRST_CAT_GID2:
+            if (item == SMU_CRRST_BLACK_LIST)
+            {
+                kal_mem_cpy(&(pObj->black_list.code_cat_gid2[0]),
+                            pItem,
+                            *plength
+                            );
+            }
+            else
+            {
+                kal_mem_cpy(&(pObj->white_list.code_cat_gid2[0]),
+                            pItem,
+                            *plength
+                            );
+            }
+        return;
+
+        default:
+            break;
+    }
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_Catcode
+ * DESCRIPTION
+ *  This function is used to compose the code of each category
+ * PARAMETERS
+ *  IN          cat
+ *  IN          *imsi
+ *  IN          *gid1
+ *  IN          *gid2
+ *  IN          mnc_len
+ *  OUT          *code
+ * RETURN
+ *  kal_uint8   code length
+ * GLOBALS AFFECTED
+ *  NONE
+ *******************************************************************************/
+kal_uint8 sml_crrst_Catcode( smu_crrst_cat_enum cat,
+                       kal_uint8 *imsi,
+                       kal_uint8 *gid1,
+                       kal_uint8 *gid2,
+                       kal_uint8 *spn,
+                       kal_uint8 mnc_len,
+                       kal_uint8 *code )
+{
+    kal_uint8 i,j=0;
+
+    if(mnc_len == 3)
+    {
+        code[0] = (imsi[1] & 0xF0) | (imsi[2] & 0x0F);
+        code[1] = (imsi[2] & 0xF0) | (imsi[3] & 0x0F);
+        code[2] = (imsi[3] & 0xF0) | (imsi[4] & 0x0F);
+        code[3] = (imsi[4] & 0xF0) | (imsi[5] & 0x0F);
+    }
+    else
+    {
+        code[0] = (imsi[1] & 0xF0) | (imsi[2] & 0x0F);
+        code[1] = (imsi[2] & 0xF0) | (imsi[3] & 0x0F);
+        code[2] = (imsi[3] & 0xF0) | 0x0F;
+        code[3] = ((imsi[4] & 0x0F) << 4) | ((imsi[4] & 0xF0) >> 4);
+    }
+
+    switch(cat)
+    {
+        case SMU_CRRST_CAT_N:
+            return SMU_CARRIER_MATCH_SIZE_OF_CAT_N;
+        break;
+
+        case SMU_CRRST_CAT_SPN:
+            if (spn)
+            {
+                i=0;
+                j=3;
+                while (spn[i] != 0xff)
+                {
+                    code[j++] = spn[i++];
+                }
+                return SMU_CARRIER_MATCH_SIZE_OF_CAT_SPN;
+            }
+        break;
+
+        case SMU_CRRST_CAT_IMSI_PREFIX:
+            return SMU_CARRIER_MATCH_SIZE_OF_CAT_IMSI_PREFIX;
+        break;
+
+        case SMU_CRRST_CAT_GID1:
+            if (gid1)
+            {
+                code[3] = gid1[0];
+                return SMU_CARRIER_MATCH_SIZE_OF_CAT_GID1;
+            }
+        break;
+
+        case SMU_CRRST_CAT_GID2:
+            if (gid2)
+            {
+                code[3] = gid2[0];
+                return SMU_CARRIER_MATCH_SIZE_OF_CAT_GID2;
+            }
+        break;
+
+        default:
+        break;
+    }
+
+    return 0;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_GetCode
+ * DESCRIPTION
+ *  This function is used to compose the code of each category  whether
+ *  mnc length is 2 or 3
+ * PARAMETERS
+ *  cat         [IN]    category of the Carrier Restriction lock
+ *  imsi        [IN]    imsi of the code source
+ *  gid1        [IN]    gid1 of the code source
+ *  gid2        [IN]    gid2 of the code source
+ *  sim_mnc_len [IN]    the mnc length decided by SIM
+ *  pdata       [IN]    the saved code for comparing
+ *  code        [OUT]   the composed code according to all input parameters
+ *
+ * RETURN
+ *  kal_uint16 file size
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+ *******************************************************************************/
+kal_uint8 sml_crrst_GetCode( smu_crrst_cat_enum cat,
+                       kal_uint8 * imsi,
+                       kal_uint8 * gid1,
+                       kal_uint8 * gid2,
+                       kal_uint8 * spn,
+                       kal_uint8 sim_mnc_len,
+                       kal_uint8 * pdata,
+                       kal_uint8 * code)
+{
+    kal_uint8 mnc_len=0;
+
+    if (SML_MNC_LENGTH_NEST == 1)
+    {
+        mnc_len = sim_mnc_len;
+    }
+    else
+    {
+        if(((*(pdata+2)) & 0x0F) == 0x0F)
+        {
+            mnc_len = 2;
+        }
+        else
+        {
+            mnc_len = 3;
+        }
+    }
+    return sml_crrst_Catcode(cat, imsi, gid1, gid2, spn, mnc_len, code);
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_getList
+ * DESCRIPTION
+ *  This method returns the requested list
+ * PARAMETERS
+ *  IN          list
+ *  OUT         *length
+ * RETURN
+ *  void *
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+ *******************************************************************************/
+static void * sml_crrst_getList (sml_ctx_enum list,
+                           kal_uint16 *plength,
+                           kal_uint8 source)
+{
+    smu_carrier_match_context_struct *pObj = (smu_carrier_match_context_struct *) pCRRSTg[source].pObj;
+
+    ASSERT(NULL != pObj);
+
+    switch(list)
+    {
+        case SMU_CRRST_BLACK_LIST:
+
+            *plength = sizeof(smu_carrier_restriction_list_struct);
+
+            return (smu_carrier_restriction_list_struct *) &(pObj->black_list);
+
+        case SMU_CRRST_WHITE_LIST:
+
+            *plength = sizeof(smu_carrier_restriction_list_struct);
+
+            return (smu_carrier_restriction_list_struct *) &(pObj->white_list);
+
+        default:
+            break;
+    }
+
+    return NULL;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  smu_crrst_Check
+ * DESCRIPTION
+ *  This function is used to check if the code is in the carrier restriction list
+ * PARAMETERS
+ *  IN          cat
+ *  IN          *imsi
+ *  IN          *gid1
+ *  IN          *gid2
+ *  IN          sim_mnc_len
+ *  IN          source
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+ *******************************************************************************/
+kal_bool sml_crrst_Check(sml_ctx_enum list,   // blacklist or whitelist
+                    smu_crrst_cat_enum cat,       // category
+                    kal_uint8 *imsi,        // 9 bytes array, read from SIM, mandatory file
+                    kal_uint8 *gid1,        // 20 bytes array, read from SIM, NULL means gid1 invalid(file not exist)
+                    kal_uint8 *gid2,        // 20 bytes array, read from SIM, NULL means gid2 invalid(file not exist)
+                    kal_uint8 *spn,         // 17 bytes array, read from SIM, NULL means spn invalid(file not exist)
+                    kal_uint8 sim_mnc_len,  // MNC length, read from SIM
+                    kal_uint8 source)       // 0:SIM1, 1:SIM2
+{
+    nvram_ef_smu_crrst_obj_struct *p = &pCRRSTg[source];
+    smu_carrier_match_category_meta_struct *meta = NULL;
+    kal_uint8 *pdata = NULL;
+    kal_uint8 idx = 0;
+    kal_uint16 length = 0, offset = 0;
+    kal_bool result = KAL_FALSE;
+    kal_uint8 code_len = 0;
+    kal_uint8 code[23] = {0};
+    kal_uint8 size_of_cat = 0;
+    sml_ctx_enum meta_list;
+
+    meta_list = (list == SMU_CRRST_BLACK_LIST ? SMU_CRRST_BLACK_LIST_META : SMU_CRRST_WHITE_LIST_META);
+    meta = (smu_carrier_match_category_meta_struct *) (*p->getItem)(cat, meta_list, &length, source);
+    pdata = (kal_uint8 *) (*p->getItem)(cat, list, &length, source);
+    kal_mem_set(code, 0xFF, 23);
+
+    switch(cat)
+    {
+        case SMU_CRRST_CAT_N:
+        {
+            size_of_cat = SMU_CARRIER_MATCH_SIZE_OF_CAT_N;
+            break;
+        }
+        case SMU_CRRST_CAT_SPN:
+        {
+            size_of_cat = SMU_CARRIER_MATCH_SIZE_OF_CAT_SPN;
+            break;
+        }
+        case SMU_CRRST_CAT_IMSI_PREFIX:
+        {
+            size_of_cat = SMU_CARRIER_MATCH_SIZE_OF_CAT_IMSI_PREFIX;
+            break;
+        }
+        case SMU_CRRST_CAT_GID1:
+        {
+            size_of_cat = SMU_CARRIER_MATCH_SIZE_OF_CAT_GID1;
+            break;
+        }
+        case SMU_CRRST_CAT_GID2:
+        {
+            size_of_cat = SMU_CARRIER_MATCH_SIZE_OF_CAT_GID2;
+            break;
+        }
+        default:
+            break;
+    }
+
+    for (idx = 0; idx < meta->num; idx++)
+    {
+        offset = idx * size_of_cat;
+        code_len = sml_crrst_GetCode(cat,
+                               imsi,
+                               gid1,
+                               gid2,
+                               spn,
+                               sim_mnc_len,
+                               (pdata+offset),
+                               code);
+
+        if (size_of_cat == code_len)
+        {
+            /* MCC/MNC/HLR can have wildcard character - f */
+            kal_uint8 *pdata_ptr = NULL;
+            kal_uint8 i = 0;
+            kal_uint8 len = 0;
+
+            pdata_ptr = (kal_uint8 *)(pdata+offset);
+            if (cat == SMU_CRRST_CAT_IMSI_PREFIX)
+            {
+                len = SMU_CARRIER_MATCH_SIZE_OF_CAT_IMSI_PREFIX; /* MCC/MNC + HLR */
+            }
+            else
+            {
+                len = SMU_CARRIER_MATCH_SIZE_OF_CAT_N; /* MCC/MNC common for all categories */
+            }
+
+            for (i=0; i<len; i++)
+            {
+                if ((pdata_ptr[i] & 0xF0) == 0xF0)
+                {
+                    code[i] |= 0xF0;
+                }
+
+                if ((pdata_ptr[i] & 0x0F) == 0x0F)
+                {
+                    code[i] |= 0x0F;
+                }
+            }
+
+            if (kal_mem_cmp(code, (pdata+offset), code_len)==0)
+            {
+                result = KAL_TRUE;
+                break;
+            }
+        }
+    }
+    return result;
+}
+
+/**************************************************************************
+ * FUNCTION
+ *  custom_crrst_input_format_of_catkey_for_algo
+ * DESCRIPTION
+ *  Determine the format of input CRRST category key for given algorithm
+ * PARAMETERS
+ *  algorithm type
+ *  0 - The CK and HCK is compared directly
+ *  1 - PBKDF2-HMAC-SHA256
+ * RETURNS
+ *  crrst_input_format_of_catkey_for_algo_enum
+ *  If actual input key is "123456" then
+ *  CRRST_INPUT_FORMAT_CATKEY_BCD - 0x21,0x43,0x65
+ *  CRRST_INPUT_FORMAT_CATKEY_ASCII - 0x31,0x32,0x33,0x34,0x35,0x36
+ **************************************************************************/
+crrst_input_format_of_catkey_for_algo_enum custom_crrst_input_format_of_catkey_for_algo(kal_uint8 algo)
+{
+    /* BCD formatted password */
+    if (algo == 0)
+    {
+        return CRRST_INPUT_FORMAT_CATKEY_BCD;
+    }
+    /* PBKDF2-HMAC-SHA256 */
+    else if (algo == 1)
+    {
+    #if defined (__CRRST_INPUT_FORMAT_CATKEY_ASCII__)
+        /* Hashing with password string - Hash("123456") */
+        return CRRST_INPUT_FORMAT_CATKEY_ASCII;
+
+    #elif defined (__CRRST_INPUT_FORMAT_CATKEY_BCD__)
+        /* Hashing with BCD formatted passwrod - Hash({0x21,0x43,0x65,0xFF,0xFF,0xFF,0xFF,0xFF}) */
+        // When calculating hash value,
+        //   remember to add padding 0xFF for total SML_MAX_SUPPORT_KEY_LEN bytes (8 in default)
+        return CRRST_INPUT_FORMAT_CATKEY_BCD;
+
+    #else
+        /* Default: Hashing with password string - Hash("123456") */
+        return CRRST_INPUT_FORMAT_CATKEY_ASCII;
+    #endif
+    }
+
+    return CRRST_INPUT_FORMAT_CATKEY_BCD;
+}
+
+
+/*******************************************************************************
+ * FUNCTION  
+ *  
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *
+ * RETURN
+ *  
+ * GLOBALS AFFECTED
+ *  
+ *******************************************************************************/
+kal_bool sml_crrst_catkey_verify(smu_carrier_match_control_key_struct *crrst_key, kal_uint8 *key, kal_uint8 key_len)
+{
+    kal_bool result = KAL_FALSE;
+
+    if (crrst_key->algo == SML_KEY_ALGO_BCD)
+    {
+        result = kal_mem_cmp(&(crrst_key->key[0]),key,key_len) == 0 ? KAL_TRUE : KAL_FALSE;
+    }
+    else if (crrst_key->algo == SML_KEY_ALGO_PBKDF2_HMAC_SHA256_SALT128)
+    {
+        kal_uint8 i = 0;
+        kal_uint32 blob_iter_count = 0;
+
+        kal_uint8 *local_key_ptr = NULL;
+        kal_uint8 local_key_len = 0;
+        kal_uint8 key_string[SML_MAX_SUPPORT_KEY_LEN*2+1] = {0};
+        crrst_input_format_of_catkey_for_algo_enum catkey_type = CRRST_INPUT_FORMAT_CATKEY_UNKNOWN;
+
+        /* Get input key format */
+        catkey_type = custom_crrst_input_format_of_catkey_for_algo(crrst_key->algo);
+
+        // Change trace. MD_TRC_INFO_SML_INPUT_FORMAT_OF_CATKEY(catkey_type);
+
+        if (catkey_type == CRRST_INPUT_FORMAT_CATKEY_ASCII)
+        {
+            /* Hashing with ASCII string */
+            // Generate key string from BCD key
+            local_key_len = convert_to_digit_with_len(key, key_string, SML_MAX_SUPPORT_KEY_LEN);
+            local_key_ptr = key_string;
+        }
+        else
+        {
+            /* Hashing directly with reversed BCD key */
+            local_key_len = key_len;
+            local_key_ptr = key;
+        }
+
+        /* Get iter count */
+        for (i = 0; i < NVRAM_SML_S_MAX_SUPPORT_INTER_CNT_LEN - 1; i++)
+        {
+            blob_iter_count += crrst_key->iter_cnt[i];
+            blob_iter_count = (blob_iter_count << 8);
+        }
+
+        blob_iter_count += crrst_key->iter_cnt[NVRAM_SML_S_MAX_SUPPORT_INTER_CNT_LEN-1];
+
+        if (blob_iter_count != 0)   /* blob has valid key data */
+        {
+            kal_uint32 verify_result = cust_sec_hck_verify(TYPE_HCK_PBKDF2_HMAC_SHA256_SALT128,
+                                                           (kal_char *)local_key_ptr,
+                                                           (kal_uint32)local_key_len,
+                                                           crrst_key->salt,
+                                                           blob_iter_count,
+                                                           crrst_key->key);
+
+            if (verify_result == ERR_SEC_CHECK_HCK_SUCCESS)
+            {
+                result = KAL_TRUE;
+            }
+            else
+            {
+                result = KAL_FALSE;
+            }
+        }
+    }
+    else
+    {
+        // Unknown algorithm
+        result = KAL_FALSE;
+    }
+
+    return result;
+}
+
+#ifndef __DISABLE_CRRST_LOCK__
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_Unlock
+ * DESCRIPTION
+ *  This function unlock the desired category
+ * PARAMETERS
+ *  IN          cat
+ *  IN          * key
+ *  IN          key_len
+ *  IN          source
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+ *******************************************************************************/
+kal_bool sml_crrst_Unlock(kal_uint8 *key,
+                     kal_uint8 key_len,
+                     kal_uint8 source)
+{
+    nvram_ef_smu_crrst_obj_struct *p = &pCRRSTg[source];
+    smu_carrier_match_control_key_struct *crrst_key = NULL;
+    kal_uint16 length = 0;
+    kal_bool result = KAL_FALSE;
+
+    crrst_key = (smu_carrier_match_control_key_struct *) (*p->getItem)(0, SMU_CRRST_KEY,&length, source);
+
+    if ((crrst_key->state == SMU_CRRST_KEY_STATE_LOCKED) &&
+        (crrst_key->retry_count > 0 || crrst_key->max_retry_count == 0)) 
+    {
+        if (KAL_TRUE == sml_crrst_catkey_verify(crrst_key, key, key_len))
+        {
+            result = KAL_TRUE;
+            crrst_key->state = SMU_CRRST_KEY_STATE_UNLOCKED;
+            crrst_key->retry_count = crrst_key->max_retry_count;
+        }
+        else
+        {
+            crrst_key->retry_count = (crrst_key->retry_count == 0) ? 0 : crrst_key->retry_count - 1;
+        }
+    }
+
+    return result;
+}
+#endif /* __DISABLE_CRRST_LOCK__ */
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_Lock
+ * DESCRIPTION
+ *  This function Lock the desired category
+ * PARAMETERS
+ *  IN          cat
+ *  IN          * key
+ *  IN          key_len
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+ *******************************************************************************/
+kal_bool sml_crrst_Lock(kal_uint8 *key,
+                   kal_uint8 key_len,
+                   kal_uint8 source)
+{
+    nvram_ef_smu_crrst_obj_struct *p = &pCRRSTg[source];
+    smu_carrier_match_control_key_struct *crrst_key = NULL;
+    kal_uint16 length = 0;
+    kal_bool result = KAL_FALSE;
+
+    crrst_key = (smu_carrier_match_control_key_struct *) (*p->getItem)(0, SMU_CRRST_KEY,&length, source);
+    
+    if ((crrst_key->state == SMU_CRRST_KEY_STATE_UNLOCKED) &&
+        (crrst_key->retry_count > 0 || crrst_key->max_retry_count == 0))
+    {
+        if (KAL_TRUE == sml_crrst_catkey_verify(crrst_key, key, key_len))
+        {
+            result = KAL_TRUE;
+            crrst_key->state = SMU_CRRST_KEY_STATE_LOCKED;
+            crrst_key->retry_count = crrst_key->max_retry_count;
+        }
+        else
+        {
+            crrst_key->retry_count = (crrst_key->retry_count == 0) ? 0 : crrst_key->retry_count - 1;
+        }
+    }
+
+    return result;
+}
+
+ /*******************************************************************************
+  * FUNCTION
+  *  sml_crrst_Add
+  * DESCRIPTION
+  *  This function is used to add code into the desired category
+  * PARAMETERS
+  *  IN 		 cat
+  *  IN 		 * code
+  *  IN 		 len
+  *  OUT		 * remain
+  * RETURN
+  *  kal_bool
+  * GLOBALS AFFECTED
+  *  SMU_CRRST_OBJ
+  *******************************************************************************/
+kal_bool sml_crrst_Add( smu_crrst_cat_enum cat,
+                   kal_uint8 list,
+                   kal_uint8 *code,
+                   kal_uint8 len,
+                   kal_uint8 source)
+{
+    nvram_ef_smu_crrst_obj_struct *p = &pCRRSTg[source];
+    smu_carrier_match_category_meta_struct *meta = NULL;
+    kal_uint8 *pdata = NULL;
+    kal_uint8 remain = 0;
+    kal_uint16 length = 0, offset = 0;
+    kal_bool result = KAL_FALSE;
+    sml_ctx_enum crrst_list, meta_list;
+
+#ifndef __DISABLE_CRRST_LOCK__
+    smu_carrier_match_control_key_struct *crrst_key = NULL;
+
+    crrst_key = (smu_carrier_match_control_key_struct *) (*p->getItem)(cat,SMU_CRRST_KEY,&length, source);
+    if (crrst_key->state == SMU_CRRST_KEY_STATE_LOCKED)
+    {
+        return KAL_FALSE;
+    }
+#endif
+
+    crrst_list = (list == 0 ? SMU_CRRST_WHITE_LIST : SMU_CRRST_BLACK_LIST);
+    meta_list = (crrst_list == SMU_CRRST_WHITE_LIST ? SMU_CRRST_WHITE_LIST_META : SMU_CRRST_BLACK_LIST_META);
+
+    meta = (smu_carrier_match_category_meta_struct *) (*p->getItem)(cat,meta_list,&length, source);
+    pdata = (kal_uint8 *) (*p->getItem)(cat,crrst_list,&length, source);
+
+    switch(cat)
+    {
+        case SMU_CRRST_CAT_N:
+            offset = (meta->num) * SMU_CARRIER_MATCH_SIZE_OF_CAT_N;
+            remain = (length - offset) / SMU_CARRIER_MATCH_SIZE_OF_CAT_N;
+        break;
+
+        case SMU_CRRST_CAT_SPN:
+            offset = (meta->num) * SMU_CARRIER_MATCH_SIZE_OF_CAT_SPN;
+            remain = (length - offset) / SMU_CARRIER_MATCH_SIZE_OF_CAT_SPN;
+        break;
+
+        case SMU_CRRST_CAT_IMSI_PREFIX:
+            offset = (meta->num) * SMU_CARRIER_MATCH_SIZE_OF_CAT_IMSI_PREFIX;
+            remain = (length - offset) / SMU_CARRIER_MATCH_SIZE_OF_CAT_IMSI_PREFIX;
+        break;
+
+        case SMU_CRRST_CAT_GID1:
+            offset = (meta->num) * SMU_CARRIER_MATCH_SIZE_OF_CAT_GID1;
+            remain = (length - offset) / SMU_CARRIER_MATCH_SIZE_OF_CAT_GID1;
+        break;
+
+        case SMU_CRRST_CAT_GID2:
+            offset = (meta->num) * SMU_CARRIER_MATCH_SIZE_OF_CAT_GID2;
+            remain = (length - offset) / SMU_CARRIER_MATCH_SIZE_OF_CAT_GID2;
+        break;
+
+        default:
+        break;
+    }
+
+    if (remain > 0)
+    {
+        kal_mem_cpy((kal_uint8 *)(pdata+offset), code, len);
+        meta->num ++;
+        result = KAL_TRUE;
+    }
+    else
+    {
+        result = KAL_FALSE;
+    }
+
+    return result;
+}
+
+/*******************************************************************************
+* FUNCTION
+*  sml_crrst_Remove
+* DESCRIPTION
+*  This function is used to remove code from the desired category
+* PARAMETERS
+*  IN   cat
+*  IN   * code
+*  IN   len
+*  OUT   * remain
+* RETURN
+*  kal_bool
+* GLOBALS AFFECTED
+*  SMU_CRRST_OBJ
+*******************************************************************************/
+kal_bool sml_crrst_Remove( smu_crrst_cat_enum cat,
+                                kal_uint8 list,
+                                kal_uint8 *code,
+                                kal_uint8 len,
+                                kal_uint8 source)
+{
+    /* Currently AP does not use this interface of removing specific BlackList data. Reserved for future use */
+
+    return KAL_FALSE;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_Disable
+ * DESCRIPTION
+ *  This function is used to disable the carrier restriction facility
+ * PARAMETERS
+ *  IN          cat
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+ *******************************************************************************/
+kal_bool sml_crrst_Disable(kal_uint8 *key,kal_uint8 key_len,kal_uint8 source)
+{
+    nvram_ef_smu_crrst_obj_struct *p = &pCRRSTg[source];
+    kal_uint16 length = 0;
+    smu_carrier_restriction_state_enum *state = NULL;
+
+#ifndef __DISABLE_CRRST_LOCK__
+    smu_carrier_match_control_key_struct *crrst_key = NULL;
+
+    crrst_key = (smu_carrier_match_control_key_struct *) (*p->getItem)(0,SMU_CRRST_KEY,&length, source);
+
+    ASSERT( key_len <= SML_MAX_SUPPORT_KEY_LEN );
+
+    if (SMU_CRRST_KEY_STATE_LOCKED == crrst_key->state)
+    {
+        if (crrst_key->retry_count == 0 &&
+            crrst_key->max_retry_count != 0)
+        {
+            return KAL_FALSE;
+        }
+        else if (KAL_FALSE == sml_crrst_catkey_verify(crrst_key, key, key_len))
+        {
+            crrst_key->retry_count = (crrst_key->retry_count == 0) ? 0 : crrst_key->retry_count - 1;
+            return KAL_FALSE;
+        }
+        else
+        {
+            crrst_key->retry_count = crrst_key->max_retry_count;
+        }
+    }
+#endif
+
+    state = (smu_carrier_restriction_state_enum *) (*p->getItem)(0,SMU_CRRST_STATE,&length, source);
+    *state = SMU_CARRIER_RESTRICTION_DISABLED;
+
+    return KAL_TRUE;
+}
+
+/*******************************************************************************
+* FUNCTION
+*  sml_crrst_Enable
+* DESCRIPTION
+*  This function is used to enable the carrier restriction facility
+* PARAMETERS
+*  IN 		 cat
+* RETURN
+*  kal_bool
+* GLOBALS AFFECTED
+*  SMU_CRRST_OBJ
+*******************************************************************************/
+kal_bool sml_crrst_Enable(kal_uint8 *key,kal_uint8 key_len,kal_uint8 source)
+{
+    nvram_ef_smu_crrst_obj_struct *p = &pCRRSTg[source];
+    kal_uint16 length = 0;
+    smu_carrier_restriction_state_enum *state = NULL;
+
+#ifndef __DISABLE_CRRST_LOCK__
+    smu_carrier_match_control_key_struct *crrst_key = NULL;
+
+    crrst_key = (smu_carrier_match_control_key_struct *) (*p->getItem)(0,SMU_CRRST_KEY,&length, source);
+
+    ASSERT( key_len <= SML_MAX_SUPPORT_KEY_LEN );
+
+    if (SMU_CRRST_KEY_STATE_LOCKED == crrst_key->state)
+    {
+        if (crrst_key->retry_count == 0 &&
+            crrst_key->max_retry_count != 0)
+        {
+            return KAL_FALSE;
+        }
+        else if (KAL_FALSE == sml_crrst_catkey_verify(crrst_key, key, key_len))
+        {
+            crrst_key->retry_count = (crrst_key->retry_count == 0) ? 0 : crrst_key->retry_count - 1;
+            return KAL_FALSE;
+        }
+        else
+        {
+            crrst_key->retry_count = crrst_key->max_retry_count;
+        }
+    }
+#endif
+
+    state = (smu_carrier_restriction_state_enum *) (*p->getItem)(0,SMU_CRRST_STATE,&length, source);
+    *state = SMU_CARRIER_RESTRICTION_ENABLED;
+
+    return KAL_TRUE;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_Remove_All
+ * DESCRIPTION
+ *  This function is used to remove all the carrier restriction data
+ * PARAMETERS
+ *  IN          cat
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+ *******************************************************************************/
+kal_bool sml_crrst_Remove_All(kal_uint8 source)
+{
+    nvram_ef_smu_crrst_obj_struct * p = &pCRRSTg[source];
+    smu_carrier_match_category_meta_struct * meta = NULL;
+    kal_uint8 * pdata = NULL;
+    kal_uint16 length = 0;
+    kal_uint8 i = 0;
+
+#ifndef __DISABLE_CRRST_LOCK__
+    smu_carrier_match_control_key_struct *crrst_key = NULL;
+
+    crrst_key = (smu_carrier_match_control_key_struct *) (*p->getItem)(0,SMU_CRRST_KEY,&length, source);
+    if (crrst_key->state == SMU_CRRST_KEY_STATE_LOCKED)
+    {
+        return KAL_FALSE;
+    }
+#endif
+
+    for (i=SMU_CRRST_CAT_N; i<SMU_CRRST_CAT_SIZE; i++)
+    {
+        meta = (smu_carrier_match_category_meta_struct *) (*p->getItem)(i,SMU_CRRST_BLACK_LIST_META,&length, source);
+        pdata = (kal_uint8 *) (*p->getItem)(i,SMU_CRRST_BLACK_LIST,&length, source);
+        kal_mem_set(pdata,0xFF,length);
+        meta->num = 0;
+
+        meta = (smu_carrier_match_category_meta_struct *) (*p->getItem)(i,SMU_CRRST_WHITE_LIST_META,&length, source);
+        pdata = (kal_uint8 *) (*p->getItem)(i,SMU_CRRST_WHITE_LIST,&length, source);
+        kal_mem_set(pdata,0xFF,length);
+        meta->num = 0;
+    }
+
+    return KAL_TRUE;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_Remove_WhiteList
+ * DESCRIPTION
+ *  This function is used to remove all white list carrier restriction data
+ * PARAMETERS
+ *  IN          cat
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+ *******************************************************************************/
+kal_bool sml_crrst_Remove_WhiteList(kal_uint8 source)
+{
+    nvram_ef_smu_crrst_obj_struct * p = &pCRRSTg[source];
+    smu_carrier_match_category_meta_struct * meta = NULL;
+    kal_uint8 * pdata = NULL;
+    kal_uint16 length = 0;
+    kal_uint8 i = 0;
+
+#ifndef __DISABLE_CRRST_LOCK__
+    smu_carrier_match_control_key_struct *crrst_key = NULL;
+
+    crrst_key = (smu_carrier_match_control_key_struct *) (*p->getItem)(0,SMU_CRRST_KEY,&length, source);
+    if (crrst_key->state == SMU_CRRST_KEY_STATE_LOCKED)
+    {
+        return KAL_FALSE;
+    }
+#endif
+
+    for (i=SMU_CRRST_CAT_N; i<SMU_CRRST_CAT_SIZE; i++)
+    {
+        meta = (smu_carrier_match_category_meta_struct *) (*p->getItem)(i,SMU_CRRST_WHITE_LIST_META,&length, source);
+        pdata = (kal_uint8 *) (*p->getItem)(i,SMU_CRRST_WHITE_LIST,&length, source);
+        kal_mem_set(pdata,0xFF,length);
+        meta->num = 0;
+    }
+
+    return KAL_TRUE;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_Remove_BlackList
+ * DESCRIPTION
+ *  This function is used to remove all black list carrier restriction data
+ * PARAMETERS
+ *  IN          cat
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+ *******************************************************************************/
+kal_bool sml_crrst_Remove_BlackList(kal_uint8 source)
+{
+    nvram_ef_smu_crrst_obj_struct * p = &pCRRSTg[source];
+    smu_carrier_match_category_meta_struct * meta = NULL;
+    kal_uint8 * pdata = NULL;
+    kal_uint16 length = 0;
+    kal_uint8 i = 0;
+
+#ifndef __DISABLE_CRRST_LOCK__
+    smu_carrier_match_control_key_struct *crrst_key = NULL;
+
+    crrst_key = (smu_carrier_match_control_key_struct *) (*p->getItem)(0,SMU_CRRST_KEY,&length, source);
+    if (crrst_key->state == SMU_CRRST_KEY_STATE_LOCKED)
+    {
+        return KAL_FALSE;
+    }
+#endif
+
+    for (i=SMU_CRRST_CAT_N; i<SMU_CRRST_CAT_SIZE; i++)
+    {
+        meta = (smu_carrier_match_category_meta_struct *) (*p->getItem)(i,SMU_CRRST_BLACK_LIST_META,&length, source);
+        pdata = (kal_uint8 *) (*p->getItem)(i,SMU_CRRST_BLACK_LIST,&length, source);
+        kal_mem_set(pdata,0xFF,length);
+        meta->num = 0;
+    }
+
+    return KAL_TRUE;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_Save
+ * DESCRIPTION
+ *  This function saves the SMU_CRRST_OBJ to NVRAM LID (NVRAM_WRITE_REQ)
+ * PARAMETERS
+ *  OUT          pLid
+ * RETURN
+ *  kal_uint16  Obj size
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+ *******************************************************************************/
+kal_uint16 sml_crrst_Save( void *pLid, kal_uint8 source )
+{
+    nvram_ef_smu_crrst_obj_struct *p = &pCRRSTg[source];
+    kal_uint16 length = sizeof(smu_carrier_match_context_struct);
+
+    (*p->take)(pLid, source);
+
+    return length;
+}
+
+
+ /*******************************************************************************
+  * FUNCTION
+  *  sml_crrst_Status
+  * DESCRIPTION
+  *  This function is used to retrieve the carrier restriction data
+  * PARAMETERS
+  *  IN 		 cat
+  *  IN 		 * code
+  *  IN 		 len
+  *  OUT		 * remain
+  * RETURN
+  *  kal_bool
+  * GLOBALS AFFECTED
+  *  SMU_CRRST_OBJ
+  *******************************************************************************/
+kal_bool sml_crrst_Status(smu_crrst_state_enum *state,
+                          kal_uint8 *multi_sim_policy,
+                          kal_uint8 *allowed_carriers_prioritized,
+                          smu_carrier_restriction_list_struct *white_list,
+                          smu_carrier_restriction_list_struct *black_list,
+                          kal_uint8 source)
+{
+    nvram_ef_smu_crrst_obj_struct *p = &pCRRSTg[source];
+    kal_uint16 length = 0;
+    smu_carrier_match_control_key_struct *crrst_key = NULL;
+    smu_carrier_restriction_state_enum *crrst_state = NULL;
+    smu_carrier_restriction_list_struct *list = NULL;
+    kal_uint8 *mcp = NULL;
+    kal_uint8 *acp = NULL;
+
+    crrst_state = (smu_carrier_restriction_state_enum *) (*p->getItem)(0, SMU_CRRST_STATE, &length, source);
+    if (*crrst_state == SMU_CARRIER_RESTRICTION_ENABLED)
+    {
+        crrst_key = (smu_carrier_match_control_key_struct *) (*p->getItem)(0,SMU_CRRST_KEY,&length, source);
+        if (crrst_key->state == SMU_CRRST_KEY_STATE_LOCKED)
+        {
+            *state = SMU_CRRST_STATE_LOCKED;
+        }
+        else
+        {
+            *state = SMU_CRRST_STATE_UNLOCKED;
+        }
+    }
+    else
+    {
+        *state = SMU_CRRST_STATE_DISABLED;
+        return KAL_TRUE;
+    }
+
+    mcp = (kal_uint8 *) (*p->getItem)(0,SMU_CRRST_MULTI_SIM_POLICY,&length, source);
+    *multi_sim_policy = *mcp;
+    acp = (kal_uint8 *)(*p->getItem)(0, SMU_CRRST_ALLOWED_CARRIERS_PRIORITIZED, &length, source);
+    *allowed_carriers_prioritized = *acp;
+
+    list = (smu_carrier_restriction_list_struct *)(*p->getList)(SMU_CRRST_WHITE_LIST, &length, source);
+    kal_mem_cpy(white_list, list, length);
+
+    list = (smu_carrier_restriction_list_struct *)(*p->getList)(SMU_CRRST_BLACK_LIST, &length, source);
+    kal_mem_cpy(black_list, list, length);
+
+    return KAL_TRUE;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_crrst_Update_MSP_ACP
+ * DESCRIPTION
+ *  This function is used to update multi SIM policy and allowed carriers prioritized data
+ * PARAMETERS
+ *  IN          source
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMU_CRRST_OBJ
+ *******************************************************************************/
+kal_bool sml_crrst_Update_MSP_ACP(kal_uint8 *key,
+                                           kal_uint8 key_len,
+                                           kal_uint8 multi_sim_policy,
+                                           kal_uint8 allowed_carriers_prioritized,
+                                           kal_uint8 source)
+{
+    nvram_ef_smu_crrst_obj_struct * p = &pCRRSTg[source];
+#ifndef __DISABLE_CRRST_LOCK__
+    kal_uint16 length = 0;
+#endif
+    kal_uint16 plength = 0;
+
+#ifndef __DISABLE_CRRST_LOCK__
+    smu_carrier_match_control_key_struct *crrst_key = NULL;
+
+    crrst_key = (smu_carrier_match_control_key_struct *) (*p->getItem)(0,SMU_CRRST_KEY,&length, source);
+
+    ASSERT( key_len <= SML_MAX_SUPPORT_KEY_LEN );
+
+    if (SMU_CRRST_KEY_STATE_LOCKED == crrst_key->state)
+    {
+		if (crrst_key->retry_count == 0 && 
+			crrst_key->max_retry_count != 0)
+		{
+			return KAL_FALSE;
+		}
+        else if (KAL_FALSE == sml_crrst_catkey_verify(crrst_key, key, key_len))
+        {
+			crrst_key->retry_count = (crrst_key->retry_count == 0) ? 0 : crrst_key->retry_count - 1;
+            return KAL_FALSE;
+        }
+		else
+		{
+			crrst_key->retry_count = crrst_key->max_retry_count;
+        }
+    }
+#endif
+
+    plength = sizeof(multi_sim_policy);
+    (*p->putItem)(0, SMU_CRRST_MULTI_SIM_POLICY, &multi_sim_policy, &plength, source);
+
+    plength = sizeof(allowed_carriers_prioritized);
+    (*p->putItem)(0, SMU_CRRST_ALLOWED_CARRIERS_PRIORITIZED, &allowed_carriers_prioritized, &plength, source);
+
+    return KAL_TRUE;
+}
+
+
+/*******************************************************************************
+ * FUNCTION  
+ *  
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  IN          
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  
+ *******************************************************************************/ 
+ kal_bool sml_UpdateCrrstCatKeyData(kal_uint8 algo_type,
+                                     kal_uint32 max_retry_count,
+                                     kal_uint8 *hck,
+                                     kal_uint8 *salt,
+                                     kal_uint8 *iter_cnt,
+                                     kal_uint8 source)
+{
+    kal_uint16 length = 0;
+    nvram_ef_smu_crrst_obj_struct * p = &pCRRSTg[source];
+    
+    smu_carrier_match_control_key_struct *crrst_key = NULL;
+
+    crrst_key = (smu_carrier_match_control_key_struct *) (*p->getItem)(0, SMU_CRRST_KEY, &length, source);
+    if (crrst_key->state == SMU_CRRST_KEY_STATE_LOCKED)
+    {
+        // CRRST ADD KEY FAIL. MD_TRC_INFO_SML_ALGO_TYPE_UPDATE("FAIL", algo_type);
+        return KAL_FALSE;
+    }
+    
+    crrst_key->algo = algo_type;
+	crrst_key->max_retry_count = max_retry_count;
+    crrst_key->retry_count = max_retry_count;
+    kal_mem_cpy(crrst_key->key, hck, NVRAM_SML_S_MAX_SUPPORT_HCK_LEN);
+    
+    if (algo_type != 0)
+    {
+        kal_mem_cpy(crrst_key->salt, salt, NVRAM_SML_S_MAX_SUPPORT_SALT_LEN);
+        kal_mem_cpy(crrst_key->iter_cnt, iter_cnt, NVRAM_SML_S_MAX_SUPPORT_INTER_CNT_LEN);
+    }
+    
+    // CRRST ADD KEY SUCCESS. MD_TRC_INFO_SML_ALGO_TYPE_UPDATE("SUCCESS", algo_type);
+    return KAL_TRUE;
+}
+#endif /* __CARRIER_RESTRICTION__ */
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_GetLockState
+ * DESCRIPTION
+ *  This method is used to get SLB lock state
+ * PARAMETERS
+ *  OUT       lock state
+ *  IN          source
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  none
+ *******************************************************************************/
+void sml_GetLockState(kal_uint8 *lock_state, kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint16 length;
+    kal_uint8 *slb_state;
+
+    slb_state = (kal_uint8 *)(*p->getItem)(SML_CAT_C, SML_TMO_CAT_STATE, &length, source);  // First param is not used in TMO
+
+    kal_mem_cpy(lock_state, slb_state, 1);
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_GetUnlockTimeLeft
+ * DESCRIPTION
+ *  This method is used to get SLB unlock time left in seconds
+ * PARAMETERS
+ *  IN          source
+ * RETURN
+ *  unlock time left
+ * GLOBALS AFFECTED
+ *  none
+ *******************************************************************************/
+kal_uint32 sml_GetUnlockTimeLeft(kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint16 length;
+    kal_uint8 *slb_end_time;
+    kal_uint32 duration_seconds = 0;
+    kal_uint8 i;
+
+    slb_end_time = (kal_uint8 *)(*p->getItem)(SML_CAT_C, SML_TMO_CAT_END_TIME, &length, source); // First param is not used in TMO
+
+    for (i = 0; i < (SML_TMO_SIZE_OF_END_TIME - 1); i++)
+    {
+        duration_seconds += slb_end_time[i];
+        duration_seconds = (duration_seconds << 8);
+    }
+    duration_seconds += slb_end_time[SML_TMO_SIZE_OF_END_TIME-1];
+
+    MD_TRC_INFO_SMU_GET_UNLOCK_TIME_LEFT(duration_seconds, sml_tmo_seconds_to_expire);
+
+    if (sml_tmo_seconds_to_expire >= duration_seconds)
+    {
+        return 0;
+    }
+    else
+    {
+        return (duration_seconds - sml_tmo_seconds_to_expire);
+    }
+}
+
+
+// TMO SML --- end
+
+// ATT SML --- start
+
+/* time to temporary unlock expiry in seconds */
+kal_uint32 sml_att_seconds_to_expire = 0;
+extern kal_bool smu_sml_att_timer_expiry_callback(void *param);
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_CheckTempUnlock
+ * DESCRIPTION
+ *  This method is to check if temporary unlock expires
+ * PARAMETERS
+ *  IN          source
+ * RETURN
+ *  TRUE        Temporary unlock expires
+ *  FALSE       Temporary unlock does not expire
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_att_CheckTempUnlock(kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint8 *state, *end_time;
+    kal_uint16 length;
+    kal_uint32 duration_seconds = 0;
+    kal_uint8 i;
+
+    state = (kal_uint8 *)(*p->getItem)(SML_CAT_C, SML_ATT_CAT_STATE, &length, source);
+    end_time = (kal_uint8 *)(*p->getItem)(SML_CAT_C, SML_ATT_CAT_END_TIME, &length, source);
+
+    for (i = 0; i < SML_ATT_SIZE_OF_END_TIME-1; i++)
+    {
+        duration_seconds += end_time[i];
+        duration_seconds = (duration_seconds << 8);
+    }
+    duration_seconds += end_time[SML_ATT_SIZE_OF_END_TIME-1];
+
+    MD_TRC_INFO_SML_CHECK_TEMP_UNLOCK(sml_att_seconds_to_expire, duration_seconds);
+
+    if ((sml_att_seconds_to_expire + (SML_ATT_TIMEOUT_PERIODIC_CHECK/KAL_TICKS_1_SEC)) >= duration_seconds)
+    {
+        *state = SML_ATT_STATE_PERMANENT_LOCK;
+        // Should reset SLB/NVRAM in following action
+        return KAL_TRUE;
+    }
+    else
+    {
+        sml_att_seconds_to_expire += (SML_ATT_TIMEOUT_PERIODIC_CHECK/KAL_TICKS_1_SEC);
+        (*p->putItem)(SML_CAT_C, SML_ATT_CAT_UNLOCK_TIME_COUNTER, &sml_att_seconds_to_expire, &length, source);
+        // Should write back to NVRAM in following action
+        return KAL_FALSE;
+    }
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_checkValidity
+ * DESCRIPTION
+ *  This method is to check the validity of the SML object
+ * PARAMETERS
+ *  IN          pObj    SML object
+ * RETURN
+ *  TRUE        Pass the validity check
+ *  FALSE       Fail the validity check
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_att_checkValidity(void *pObj, kal_uint8 source)
+{
+    sml_att_context_struct *pSmlObj = (sml_att_context_struct *) pObj;
+    kal_uint8 *pData = NULL;
+    kal_bool result = KAL_FALSE;
+    kal_uint32 data_len;
+    kal_uint8 imei_bcd[8+1];
+    kal_uint8 imei_ascii[SML_ATT_SIZE_OF_IMEI + 1];
+
+#ifdef UNIT_TEST    //Integrity check doesn't work on modis. Modify for UT.
+    return KAL_TRUE;
+#else
+
+    if (nvram_get_imei_value(8, imei_bcd, (1 + source)) == KAL_TRUE)
+    {
+        if (imei_bcd[0] == 0xff)
+        {
+            /* ALPS04880174: If IMEI not yet written to device do not calculate/validate the MAC.
+             * After writing the IMEI perform the Reboot for proper MAC calculation in bootup
+             */
+            MD_TRC_WARNING_SML_IMEI_NOT_YET_WRITTEN_TO_DEVICE();
+            return KAL_TRUE;
+        }
+
+        // ch2-ch1, last digit is 0
+        imei_bcd[7] = imei_bcd[7] & 0x0f;
+        imei_bcd[8] = 0xff;
+        convert_to_digit((kal_uint8 *)imei_bcd, imei_ascii);
+        kal_prompt_trace(MOD_SMU, "UE IMEI:   %s", imei_ascii);
+        kal_prompt_trace(MOD_SMU, "BLOB IMEI: %s", &(pSmlObj->imei[0]));
+        if (kal_mem_cmp(&(pSmlObj->imei[0]), imei_ascii, SML_ATT_SIZE_OF_IMEI) == 0)
+        {
+            result = KAL_TRUE;
+        }
+    }
+
+    if (result == KAL_FALSE)
+    {
+        //IMEI mismatch
+        MD_TRC_WARNING_SML_CHECK_IMEI_FAILED();
+        return KAL_FALSE;
+    }
+
+    if (pSmlObj == NULL)
+    {
+        return KAL_FALSE;
+    }
+
+    pData = sml_att_ReconstructBlob(pSmlObj, &data_len);
+
+    if (pData == NULL)
+    {
+        return KAL_FALSE;
+    }
+
+    if (pSmlObj->protection_scheme == SML_PROTECTION_SCHEME_HMAC_SHA256)
+    {
+        t_cust_chl_sym_key key = {0};
+        kal_uint32 ret;
+
+        ret = CustCHL_Get_Sym_Key(CUST_ATT_SHARED_KEY2, &key);
+        if (ret == CUST_CHL_ERROR_NONE)
+        {
+            //sml_tmo_printkey(&key);
+            //sml_Dump("verify mac", &(pSmlObj->verification_code[0]), SML_ATT_SIZE_OF_MAC);
+
+            ret = CustCHL_Verify_MAC(CUST_CHL_ALG_MAC_SHA256, pData, data_len,
+                                     &pSmlObj->verification_code[0], &key.m_key[0], key.m_key_len);
+
+            MD_TRC_INFO_SMU_VERIFY_MAC(ret);
+        }
+        result = (ret == CUST_CHL_ERROR_NONE) ? KAL_TRUE : KAL_FALSE;
+    }
+    else if (pSmlObj->protection_scheme == SML_PROTECTION_SCHEME_RSA2048)
+    {
+        t_cust_chl_asym_key key;
+        kal_uint32 ret;
+
+        ret = CustCHL_Get_Asym_Key(CUST_ATT_PUB_KEY1, &key);
+        if (ret == CUST_CHL_ERROR_NONE)
+        {
+            ret = CustCHL_Verify_PSS_Signature(CUST_CHL_ALG_RSA_PSS_SHA256, pData, data_len,
+                                               &pSmlObj->verification_code[0], &key);
+
+            MD_TRC_INFO_SMU_RSA_PSS_VERIFY_SIGNATURE_CUST(ret);
+        }
+        result = (ret == CUST_CHL_ERROR_NONE) ? KAL_TRUE : KAL_FALSE;
+    }
+    else
+    {
+        result = KAL_FALSE;
+    }
+
+    free_ctrl_buffer(pData);
+
+    return result;
+#endif
+}
+
+#ifndef ATEST_ENABLE
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_UpdateNwTimeAndCheckTempLock
+ * DESCRIPTION
+ *  This method is to update newtork time and check if temporary lock expires
+ * PARAMETERS
+ *  IN          source
+ *  IN          nw_time_zone
+ *  IN          nw_time
+ * RETURN
+ *  TRUE        Temporary unlock expires
+ *  FALSE       Temporary unlock does not expire
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_att_UpdateNwTimeAndCheckTempLock(kal_uint8 source, kal_uint8 nw_time_zone, nw_time_zone_time_struct *nw_time)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint8 *start_time, *end_time;
+    kal_uint8 *state = NULL;
+    kal_uint16 length;
+    kal_uint32 current_seconds = 0;
+    kal_uint64 start_seconds = 0;
+    kal_uint32 start_seconds_u32 = 0;
+    kal_uint32 duration_seconds = 0;
+    kal_uint8 i;
+
+    state = (kal_uint8 *)(*p->getItem)(SML_CAT_C, SML_ATT_CAT_STATE, &length, source);
+    start_time = (kal_uint8 *)(*p->getItem)(SML_CAT_C, SML_ATT_CAT_START_TIME, &length, source);
+    end_time = (kal_uint8 *)(*p->getItem)(SML_CAT_C, SML_ATT_CAT_END_TIME, &length, source);
+
+    if (*state != SML_ATT_STATE_TEMPORARY_UNLOCK)
+    {
+        return KAL_FALSE;
+    }
+
+    /* calculate start time and duration in seconds */
+    start_seconds = 0;
+    for (i = 0; i < SML_ATT_SIZE_OF_START_TIME-1; i++)
+    {
+        start_seconds += start_time[i];
+        start_seconds = (start_seconds << 8);
+    }
+    start_seconds += start_time[SML_ATT_SIZE_OF_START_TIME-1];
+    start_seconds /= 1000;  /* from milliseconds to seconds */
+
+    start_seconds_u32 = (kal_uint32)start_seconds;
+
+    duration_seconds = 0;
+    for (i = 0; i < SML_ATT_SIZE_OF_END_TIME-1; i++)
+    {
+        duration_seconds += end_time[i];
+        duration_seconds = (duration_seconds << 8);
+    }
+    duration_seconds += end_time[SML_ATT_SIZE_OF_END_TIME-1];
+
+    /* calculate current time in seconds */
+    current_seconds = sml_rsu_nwTimeToSeconds(nw_time_zone, nw_time);
+
+    MD_TRC_INFO_SML_TEMP_UNLOCK_TIME(start_seconds_u32, duration_seconds, current_seconds);
+
+    //kal_prompt_trace(MOD_SMU,"start_seconds_u32= %x", start_seconds_u32);
+    //kal_prompt_trace(MOD_SMU,"duration_seconds= %x", (kal_uint32)duration_seconds);
+    //kal_prompt_trace(MOD_SMU,"current_seconds= %x", (kal_uint32)current_seconds);
+
+    if (current_seconds >= (start_seconds_u32+duration_seconds))
+    {
+        MD_TRC_INFO_SML_NW_TIME_EXPIRED();
+        /* expired */
+        //*state = SML_STATE_PERMANENT_LOCK;
+        //sml_tmo_seconds_to_expire = 0;
+        return KAL_TRUE;
+    }
+    else
+    {
+        /* update unlock time for power off accuracy: start ---> unlock time ---> NITZ ---> power off/on ---> end */
+        sml_att_seconds_to_expire = current_seconds - start_seconds_u32;
+        (*p->putItem)(SML_CAT_C, SML_ATT_CAT_UNLOCK_TIME_COUNTER, &sml_att_seconds_to_expire, &length, source);
+
+        smu_nvram_write(NVRAM_EF_SML_ATT_LID, SML_ATT_NVRAM_ACCESS_ID_UNLOCK_EXPIRE, KAL_FALSE);
+
+        return KAL_FALSE;
+    }
+}
+#endif
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_FirstLoad
+ * DESCRIPTION
+ *  This function check if it is the first loads of SML obj from NVRAM LID. If so,
+ *  calculate the verification code and store it
+ * PARAMETERS
+ *  IN          pLid
+ * RETURN
+ *  kal_bool    TRUE: first load
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_att_FirstLoad( void *pLid, kal_uint8 source )
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint32 i;
+    sml_att_context_struct * pObj = NULL;
+    kal_uint8 *pData = NULL;
+    kal_uint32 data_len;
+    kal_bool isFirstLoad = KAL_TRUE;
+    kal_uint8 imei_bcd[8+1];
+    kal_uint8 imei_ascii[SML_ATT_SIZE_OF_IMEI + 1];
+
+    pObj = (sml_att_context_struct *) pLid;
+
+    /* the verification code will be all zero if it is the first time to load */
+    for (i = 0; i < SML_ATT_SIZE_OF_VERIFICATION_CODE; i++)
+    {
+        if (pObj->verification_code[i] != 0)
+        {
+            isFirstLoad = KAL_FALSE;
+            break;
+        }
+    }
+
+    if (isFirstLoad == KAL_TRUE)
+    {
+        kal_uint32 ret = CUST_CHL_ERROR_NONE;
+
+        if (nvram_get_imei_value(8, imei_bcd, (1 + source)) == KAL_TRUE)
+        {
+            if (imei_bcd[0] == 0xff)
+            {
+                /* ALPS04880174: If IMEI not yet written to device do not calculate/validate the MAC.
+                 * After writing the IMEI perform the Reboot for proper MAC calculation in bootup
+                 */
+                MD_TRC_WARNING_SML_IMEI_NOT_YET_WRITTEN_TO_DEVICE();
+
+                /* Clean the old ones */
+                (*p->destory)(source);
+
+                /* Load the new one */
+                (*p->give)((void *)pObj, source);
+
+                return isFirstLoad;
+            }
+
+            // ch2-ch1, last digit is 0
+            imei_bcd[7] = imei_bcd[7] & 0x0f;
+            imei_bcd[8] = 0xff;
+            convert_to_digit((kal_uint8 *)imei_bcd, imei_ascii);
+            kal_mem_cpy(&(pObj->imei[0]), imei_ascii, SML_ATT_SIZE_OF_IMEI);
+        }
+
+        pData = sml_att_ReconstructBlob(pObj, &data_len);
+
+        if (pData == NULL)
+        {
+            // This error will be traced in sml_tmo_Load
+            return KAL_FALSE;
+        }
+
+        if (pObj->protection_scheme == SML_PROTECTION_SCHEME_HMAC_SHA256)
+        {
+            t_cust_chl_sym_key key = {0};
+
+            ret = CustCHL_Get_Sym_Key(CUST_ATT_SHARED_KEY2, &key);
+            if (ret == CUST_CHL_ERROR_NONE)
+            {
+                t_cust_chl_mac_u mac;
+
+                //sml_tmo_printkey(&key);
+                ret = CustCHL_Calculate_MAC(CUST_CHL_ALG_MAC_SHA256, pData, data_len,
+                                            &key.m_key[0], key.m_key_len, &mac);
+
+                //sml_Dump("calculate mac", &(mac.m_u8[0]), mac.m_len);
+
+                if (ret == CUST_CHL_ERROR_NONE)
+                {
+                    kal_mem_cpy(&pObj->verification_code[0], &mac.m_u8[0], mac.m_len);
+
+                    // Test validation
+                    if (sml_att_checkValidity((void*)pObj, source) == KAL_FALSE)
+                    {
+                        MD_TRC_WARNING_SML_LOAD_CHECK_VALIDITY_FAILED();
+                    }
+                }
+            }
+        }
+        else
+        {
+            /* To-Do for signature */
+        }
+
+        free_ctrl_buffer(pData);
+
+        if (ret == CUST_CHL_ERROR_NONE)
+        {
+            /* Clean the old ones */
+            (*p->destory)(source);
+
+            /* Load the new one */
+            (*p->give)((void *)pObj, source);
+        }
+    }
+
+    return isFirstLoad;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_Load
+ * DESCRIPTION
+ *  This function loads the SML obj from NVRAM LID (NVRAM_READ_CNF)
+ * PARAMETERS
+ *  IN          pLid
+ * RETURN
+ *  kal_uint16  Obj size
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_uint16 sml_att_Load( void *pLid, kal_uint8 source )
+{
+
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+
+    kal_uint16 length = sizeof(sml_att_context_struct);
+
+    if (sml_att_checkValidity(pLid, source) == KAL_FALSE)
+    {
+        MD_TRC_WARNING_SML_LOAD_CHECK_VALIDITY_FAILED();
+        length = SML_ATT_INVALID_CONTEXT_OBJ_LENGTH;
+    }
+
+    /* Clean the old ones */
+    (*p->destory)(source);
+
+    /* Load the new one */
+    (*p->give)(pLid, source);
+
+    return length;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_give
+ * DESCRIPTION
+ *  This method copys the LID files read from NVRAM to the SML obj
+ * PARAMETERS
+ *  IN          * pLidToObj
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+*******************************************************************************/
+static void sml_att_give( void *pLidToObj, kal_uint8 source )
+{
+    sml_att_context_struct * pObj = NULL;
+
+    if(NULL != pSMLg[source].pObj)
+    {
+
+        kal_sys_trace("SML: object is exist!");
+
+        pSMLg[source].pObj = NULL;
+
+    }
+
+    pObj = &(sml_att_cntxt_obj[source]);
+
+    kal_mem_cpy(pObj,
+                pLidToObj,
+                sizeof(sml_att_context_struct)
+                );
+
+    pSMLg[source].pObj = pObj;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_take
+ * DESCRIPTION
+ *  This method copys the contex of the SML object to the provided NVRAM LID.
+ * PARAMETERS
+ *  OUT         * pObjToLid
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void sml_att_take( void *pObjToLid, kal_uint8 source )
+{
+    sml_att_context_struct * pObj = (sml_att_context_struct *) pSMLg[source].pObj;
+
+    kal_mem_cpy(pObjToLid,
+                pObj,
+                sizeof(sml_att_context_struct)
+                );
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_destory
+ * DESCRIPTION
+ *  This method free the SML object in memory if it is not used.
+ * PARAMETERS
+ *  void
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void sml_att_destory(kal_uint8 source)
+{
+    pSMLg[source].pObj = NULL;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_getItem
+ * DESCRIPTION
+ *  This method returns the structure pointer and length of the structure
+ *  of the desired SML object items.
+ * PARAMETERS
+ *  IN          cat
+ *  IN          item
+ *  OUT         *length
+ * RETURN
+ *  void *
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void * sml_att_getItem( sml_cat_enum category,
+                               sml_ctx_enum item,
+                               kal_uint16 *plength,
+                               kal_uint8 source)
+{
+    sml_att_context_struct *pObj = (sml_att_context_struct *) pSMLg[source].pObj;
+
+    ASSERT(NULL != pObj);
+
+    switch(item)
+    {
+        case SML_ATT_CAT_VERSION:
+            *plength = SML_ATT_SIZE_OF_VERSION;
+            return (kal_uint32 *) &(pObj->version[0]);
+
+        case SML_ATT_CAT_PERTECTION_SCHEME:
+            *plength = sizeof(kal_uint8);
+            return (kal_uint32 *) &(pObj->protection_scheme);
+
+        case SML_ATT_CAT_STATE:
+            *plength = sizeof(kal_uint8);
+             return (kal_uint8 *) &(pObj->state);
+
+        case SML_ATT_CAT_LENGTH:
+            *plength = SML_ATT_SIZE_OF_LENGTH;
+            return (kal_uint16 *) &(pObj->length[0]);
+
+        case SML_ATT_CAT_NUM_PLMN:
+            *plength = SML_ATT_SIZE_OF_NUM_PLMN;
+            return (kal_uint16 *) &(pObj->num_of_plmn[0]);
+
+        case SML_ATT_CAT_PLMN_LIST:
+            *plength = SML_ATT_SIZE_OF_PLMN_LIST;
+            return (kal_uint8 *) &(pObj->plmn_list[0]);
+
+        case SML_ATT_CAT_NUM_GID:
+            *plength = SML_ATT_SIZE_OF_NUM_GID;
+            return (kal_uint16 *) &(pObj->num_of_gid[0]);
+
+        case SML_ATT_CAT_GID_LIST:
+            *plength = SML_ATT_SIZE_OF_GID_LIST;
+            return (kal_uint8 *) &(pObj->gid_list[0]);
+
+        case SML_ATT_CAT_START_TIME:
+            *plength = SML_ATT_SIZE_OF_START_TIME;
+            return (kal_uint32 *) &(pObj->start_time[0]);
+
+        case SML_ATT_CAT_END_TIME:
+            *plength = SML_ATT_SIZE_OF_END_TIME;
+            return (kal_uint32 *) &(pObj->end_time[0]);
+
+        case SML_ATT_CAT_IMEI:
+            *plength = SML_ATT_SIZE_OF_IMEI;
+            return (kal_uint8 *) &(pObj->imei[0]);
+
+        case SML_ATT_CAT_VERIFICATION_CODE:
+            *plength = SML_ATT_SIZE_OF_VERIFICATION_CODE;
+            return (kal_uint8 *) &(pObj->verification_code[0]);
+
+        case SML_ATT_CAT_UNLOCK_TIME_COUNTER:
+            *plength = SML_ATT_SIZE_OF_UNLOCK_TIME;
+            return (kal_uint32 *) &(pObj->unlock_time[0]);
+
+        default:
+            break;
+    }
+
+    return NULL;
+
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_putItem
+ * DESCRIPTION
+ *  This method set the desired items of the SML object.
+ * PARAMETERS
+ *  IN          cat
+ *  IN          item
+ *  IN          *pItem
+ *  IN          *plength
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void sml_att_putItem( sml_cat_enum cat,
+                             sml_ctx_enum item,
+                             void *pItem,
+                             kal_uint16 *plength,
+                             kal_uint8 source)
+{
+    sml_att_context_struct *pObj = (sml_att_context_struct *) pSMLg[source].pObj;
+
+    ASSERT(NULL != pObj);
+
+    switch(item)
+    {
+        case SML_ATT_CAT_UNLOCK_TIME_COUNTER:
+
+            kal_mem_cpy(&(pObj->unlock_time[0]),
+                        pItem,
+                        4
+                        );
+            break;
+
+        default:
+            break;
+    }
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_ReconstructBlob
+ * DESCRIPTION
+ *  This function re-construct BLOB of variable length (mcc-mnc-gid)
+ * PARAMETERS
+ *  IN          *pObj
+ *  OUT       pLen
+ * RETURN
+ *  kal_uint8 * re-construct data for mac-signature
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_uint8 *sml_att_ReconstructBlob( sml_att_context_struct *pObj, kal_uint32 *pLen )
+{
+    kal_uint8 *pData = NULL;
+    kal_uint32 blob_len, data_len;
+    kal_uint32 sizeN, sizeM;
+    kal_uint32 idx, len;
+
+    blob_len = sml_GetCount(&(pObj->length[0]));
+    sizeN = sml_GetCount(&(pObj->num_of_plmn[0])) * SML_ATT_SIZE_OF_MCC_MNC;
+    sizeM = sml_GetCount(&(pObj->num_of_gid[0])) * SML_ATT_SIZE_OF_GID;
+
+    if (pObj->protection_scheme == SML_PROTECTION_SCHEME_HMAC_SHA256)
+    {
+        data_len = blob_len - SML_ATT_SIZE_OF_MAC;
+    }
+    else if (pObj->protection_scheme == SML_PROTECTION_SCHEME_RSA2048)
+    {
+        data_len = blob_len - SML_ATT_SIZE_OF_SIGNATURE;
+    }
+    else
+    {
+        data_len = 0;
+    }
+
+    *pLen = data_len;
+
+    if (data_len == 0)
+    {
+        return pData;
+    }
+
+    pData = (kal_uint8 *)get_ctrl_buffer(data_len);
+
+    // version + protection scheme + state + num of plmn + plmn list size
+    len = SML_ATT_SIZE_OF_VERSION + 1 + 1 + SML_ATT_SIZE_OF_LENGTH + SML_ATT_SIZE_OF_NUM_PLMN + sizeN;
+    kal_mem_cpy(pData, (kal_uint8 *)pObj, len);
+
+    // num of gid + gid list size
+    idx = len;
+    len = SML_ATT_SIZE_OF_NUM_GID + sizeM;
+    kal_mem_cpy((pData + idx), (kal_uint8 *)&(pObj->num_of_gid[0]), len);
+
+    // from reserved to imei
+    idx = idx + len;
+    len = data_len - idx;
+    kal_mem_cpy((pData + idx), (kal_uint8 *)&(pObj->reserved[0]), len);
+
+    //sml_Dump("re-construct blob", pData, data_len);
+
+    return pData;
+
+}
+
+kal_uint8 *sml_att_get_modem_config_ReconstructBlob( sml_att_context_struct *pObj, kal_uint16 *pLen, kal_uint8 *pData )
+{
+    kal_uint16 blob_len;
+    kal_uint16 sizeN, sizeM;
+    kal_uint16 idx, len;
+
+    blob_len = sml_GetCount(&(pObj->length[0]));
+    sizeN = sml_GetCount(&(pObj->num_of_plmn[0])) * SML_ATT_SIZE_OF_MCC_MNC;
+    sizeM = sml_GetCount(&(pObj->num_of_gid[0])) * SML_ATT_SIZE_OF_GID;
+
+    *pLen = blob_len;
+
+    if (blob_len == 0)
+    {
+        return pData;
+    }
+
+    // version + protection scheme + state + num of plmn + plmn list size
+    len = SML_ATT_SIZE_OF_VERSION + 1 + 1 + SML_ATT_SIZE_OF_LENGTH + SML_ATT_SIZE_OF_NUM_PLMN + sizeN;
+    kal_mem_cpy(pData, (kal_uint8 *)pObj, len);
+
+    // num of gid + gid list size
+    idx = len;
+    len = SML_ATT_SIZE_OF_NUM_GID + sizeM;
+    kal_mem_cpy((pData + idx), (kal_uint8 *)&(pObj->num_of_gid[0]), len);
+
+    // from reserved to imei
+    idx = idx + len;
+    len = blob_len - idx;
+    kal_mem_cpy((pData + idx), (kal_uint8 *)&(pObj->reserved[0]), len);
+
+    return pData;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_ConstructBlob
+ * DESCRIPTION
+ *  This function construct full size Bolb from a variant length Blob
+ * PARAMETERS
+ *  IN          *pObj
+ *  OUT       pLen
+ * RETURN
+ *  kal_uint8 * construct data
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+extern kal_uint8 *sml_att_ConstructBlob( kal_uint8 *pObj, kal_uint16 slb_len)
+{
+    kal_uint16 sizeN, sizeM;
+    kal_uint16 length = 0;
+    kal_uint16 idx;
+    sml_att_context_struct *pBlob;
+
+    idx = SML_ATT_SIZE_OF_VERSION + 1 + 1 + SML_ATT_SIZE_OF_LENGTH;    // version, protection scheme, state, length
+    sizeN = sml_GetCount(&(pObj[idx])) * SML_ATT_SIZE_OF_MCC_MNC;
+
+    idx = idx + SML_ATT_SIZE_OF_NUM_PLMN + sizeN;                  // num of mcc-mnc, N
+    sizeM = sml_GetCount(&(pObj[idx])) * SML_ATT_SIZE_OF_GID;
+
+    if ((sizeN > (SML_ATT_MAX_PLMN_NUMBER*SML_ATT_SIZE_OF_MCC_MNC)) || (sizeM > (SML_ATT_MAX_GID_NUMBER*SML_ATT_SIZE_OF_GID)))
+    {
+        return NULL;
+    }
+
+    pBlob = (sml_att_context_struct *)get_ctrl_buffer(SML_ATT_MAX_SLB_SIZE);
+    kal_mem_set(pBlob, 0, SML_ATT_MAX_SLB_SIZE);
+
+    length = SML_ATT_SIZE_OF_VERSION + 1 + 1 + SML_ATT_SIZE_OF_LENGTH + SML_ATT_SIZE_OF_NUM_PLMN + sizeN;
+    kal_mem_cpy(pBlob, &(pObj[0]), length);
+
+    length = SML_ATT_SIZE_OF_NUM_GID + sizeM;
+    kal_mem_cpy(&(pBlob->num_of_gid[0]), &(pObj[idx]), length);
+
+    idx = idx + length;
+    length = slb_len - idx;
+    kal_mem_cpy(&(pBlob->reserved[0]), &(pObj[idx]), length);
+
+    return (kal_uint8 *)pBlob;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_Save
+ * DESCRIPTION
+ *  This function saves the SML obj to NVRAM LID (NVRAM_WRITE_REQ)
+ * PARAMETERS
+ *  OUT          pLid
+ * RETURN
+ *  kal_uint16  Obj size
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_uint16 sml_att_Save( void *pLid, kal_uint8 source )
+{
+
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+
+    kal_uint16 length = sizeof(sml_att_context_struct);
+
+    (*p->take)(pLid, source);
+
+    return length;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_Check
+ * DESCRIPTION
+ *  This function is used to check if the code is in the Pass list
+ * PARAMETERS
+ *  IN          cat
+ *  IN          *code
+ *  IN          len
+ *  OUT          *remain
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_att_Check( sml_cat_enum cat,
+                        kal_uint8 *imsi,
+                        kal_uint8 *gid1,
+                        kal_uint8 *gid2,
+                        kal_uint8 sim_mnc_len,
+                        kal_uint8 *remain,
+                        kal_uint8 source)
+{
+
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint8 *pState = NULL;
+    kal_uint8 *pData_plmn = NULL;
+    kal_uint8 *pData_gid = NULL;
+    kal_uint16 length = 0;
+    kal_uint8 code[SML_ATT_SIZE_OF_MCC_MNC_GID] = {0};
+    kal_uint8 code_len = 0;
+    kal_uint8 compare_length = 0;
+    kal_uint16 num_plmn = 0;
+    kal_uint16 num_gid = 0;
+    kal_uint16 i, j;
+    kal_uint8 custom_exception[3][SML_ATT_SIZE_OF_MCC_MNC] = {{0x31, 0x03, 0x10, 0x00},
+                                                              {0x31, 0x03, 0x00, 0x00},
+                                                              {0x00, 0x10, 0x10, 0x00}};
+
+    /* Check the integration of SIM Lock blob first */
+    if ((p == NULL) || (p != NULL && sml_att_checkValidity(p->pObj, source) == KAL_FALSE))
+    {
+        MD_TRC_WARNING_SML_CHECK_VALIDITY_FAILED();
+        return KAL_FALSE;
+    }
+
+    pState = (kal_uint8 *)(*p->getItem)(cat, SML_ATT_CAT_STATE, &length, source);
+
+    *remain = 0xFF;    /* ATT SIM lock doesn't need retry counter */
+
+    if (*pState == SML_ATT_STATE_TEMPORARY_UNLOCK)
+    {
+        kal_uint8 *counter = NULL;
+        kal_uint32 time_in_sec = 0;
+        kal_uint8 i;
+
+        counter = (kal_uint8 *)(*p->getItem)(cat, SML_ATT_CAT_UNLOCK_TIME_COUNTER, &length, source);
+
+        for (i = 0; i < (SML_ATT_SIZE_OF_UNLOCK_TIME - 1); i++)
+        {
+            time_in_sec += counter[(SML_ATT_SIZE_OF_UNLOCK_TIME-1-i)];
+            time_in_sec = (time_in_sec << 8);
+        }
+        time_in_sec += counter[0];
+
+        sml_att_seconds_to_expire += *counter;
+
+        if (smu_sml_att_timer_expiry_callback(NULL) == KAL_TRUE)
+        {
+            // Time expired -> back to LOCK , reset counter
+            *pState = SML_ATT_STATE_PERMANENT_LOCK;
+        }
+        else
+        {
+            return KAL_TRUE;
+        }
+    }
+
+    if (*pState == SML_ATT_STATE_PERMANENT_UNLOCK)
+    {
+        /* always pass if it is not locked! */
+        return KAL_TRUE;
+    }
+
+    if (*pState == SML_ATT_STATE_PERMANENT_LOCK)
+    {
+        code_len = sml_att_GetCode(cat, imsi, gid1, gid2, sim_mnc_len, NULL, code);
+        compare_length = SML_ATT_SIZE_OF_MCC_MNC + SML_ATT_SIZE_OF_GID;
+
+        num_gid = sml_GetCount(((*p->getItem)(cat, SML_ATT_CAT_NUM_GID, &length, source)));
+        pData_gid = (kal_uint8 *)(*p->getItem)(cat, SML_ATT_CAT_GID_LIST, &length, source);
+    }
+    else /* SML_STATE_PARTIAL_UNLOCK */
+    {
+        /* GID is not necessary in partial unlock */
+        code_len = sml_att_GetCode(cat, imsi, NULL, NULL, sim_mnc_len, NULL, code);
+        compare_length = SML_ATT_SIZE_OF_MCC_MNC;
+    }
+
+    /* if found match in mcc-mnc, then compare gid if permanent lock */
+    num_plmn = sml_GetCount(((*p->getItem)(cat, SML_ATT_CAT_NUM_PLMN, &length, source)));
+    pData_plmn = (kal_uint8 *)(*p->getItem)(cat, SML_ATT_CAT_PLMN_LIST, &length, source);
+
+    MD_TRC_INFO_SMU_CHECK_LENGTH(code_len, compare_length, sim_mnc_len);
+
+    sml_Dump("code", code, SML_ATT_SIZE_OF_MCC_MNC_GID);
+    sml_Dump("plmn list", pData_plmn, (SML_ATT_SIZE_OF_MCC_MNC*num_plmn));
+    sml_Dump("gid1 list", pData_gid, (SML_ATT_SIZE_OF_GID*num_gid));
+    sml_Dump("ignore list", *custom_exception, (3*SML_ATT_SIZE_OF_MCC_MNC));
+
+    for (i = 0; i < num_plmn; i++)
+    {
+        if (kal_mem_cmp(code, (pData_plmn + (i*SML_ATT_SIZE_OF_MCC_MNC)), SML_ATT_SIZE_OF_MCC_MNC) == 0)
+        {
+            if (compare_length == SML_ATT_SIZE_OF_MCC_MNC)   // partial
+            {
+                return KAL_TRUE;
+            }
+            else
+            {
+                // permanent but ignore gid1
+                for (j = 0; j < 3; j++)
+                {
+                    if (kal_mem_cmp(code, &custom_exception[j], SML_ATT_SIZE_OF_MCC_MNC) == 0)
+                    {
+                        MD_TRC_INFO_SMU_CHECK_IGNORE_PID1(
+                                        custom_exception[j][0], custom_exception[j][1],
+                                        custom_exception[j][2], custom_exception[j][3]);
+                        return KAL_TRUE;
+                    }
+                }
+
+                // no gid should be checked
+                if (num_gid == 0)
+                {
+                    MD_TRC_INFO_SML_NO_GID();
+                    return KAL_TRUE;
+                }
+
+                for (j = 0; j < num_gid; j++)
+                {
+                    if (kal_mem_cmp(&code[SML_ATT_SIZE_OF_MCC_MNC], (pData_gid + (j*SML_ATT_SIZE_OF_GID)), SML_ATT_SIZE_OF_GID) == 0)
+                    {
+                        return KAL_TRUE;
+                    }
+                }
+            }
+        }
+    }
+
+    return KAL_FALSE;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_Catcode
+ * DESCRIPTION
+ *  This function is used to compose the code of each category
+ * PARAMETERS
+ *  IN          cat
+ *  IN          *imsi
+ *  IN          *gid1
+ *  IN          *gid2
+ *  IN          mnc_len
+ *  OUT          *code
+ * RETURN
+ *  kal_uint8   code length
+ * GLOBALS AFFECTED
+ *  NONE
+ *******************************************************************************/
+kal_uint8 sml_att_Catcode( sml_cat_enum cat,
+                           kal_uint8 *imsi,
+                           kal_uint8 *gid1,
+                           kal_uint8 *gid2,
+                           kal_uint8 mnc_len,
+                           kal_uint8 *code )
+{
+    kal_uint8 code_len = 0;
+
+    if (imsi == NULL)
+    {
+        return 0;
+    }
+
+    if(mnc_len == 3)
+    {
+        /* MCC/MNC */
+        code[0] = (imsi[1]&0xF0) | (imsi[2]&0x0F);
+        code[1] = (imsi[2]&0xF0) | (imsi[3]&0x0F);
+        code[2] = (imsi[3]&0xF0) | (imsi[4]&0x0F);
+        code[3] = 0;
+
+    }
+    else
+    {
+        kal_uint8 test_plmn[] = {0x00, 0x1F, 0x01};
+
+        /* MCC/MNC */
+        // 123 45 => 123F4500
+        code[0] = (imsi[1]&0xF0) | (imsi[2]&0x0F);
+        code[1] = (imsi[2]&0xF0) | 0x0F;
+        code[2] = ((imsi[3] << 4)&0xF0) | ((imsi[3] >> 4)&0x0F);
+        code[3] = 0;
+
+        /* Handle test sim case */
+        if (kal_mem_cmp(test_plmn, code, sizeof(test_plmn)) == 0)
+        {
+            // 001 01 should be coded as 00101000, rather than 001F0100
+            code[1] = 0x10;
+            code[2] = 0x10;
+        }
+    }
+
+    // ATT use 2 byte GID1
+    if (gid1 != NULL)
+    {
+        /* GID */
+        code[4] = gid1[0];
+        code[5] = gid1[1];
+        code_len = SML_ATT_SIZE_OF_MCC_MNC_GID;
+    }
+    else
+    {
+        code_len = SML_ATT_SIZE_OF_MCC_MNC;
+    }
+
+    return code_len;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_GetCode
+ * DESCRIPTION
+ *  This function is used to compose the code of each category  whether
+ *  mnc length is 2 or 3
+ * PARAMETERS
+ *  cat         [IN]    category of the SIM-ME-Lock
+ *  imsi        [IN]    imsi of the code source
+ *  gid1        [IN]    gid1 of the code source
+ *  gid2        [IN]    gid2 of the code source
+ *  sim_mnc_len [IN]    the mnc length decided by SIM
+ *  pdata       [IN]    the saved code for comparing
+ *  code        [OUT]   the composed code according to all input parameters
+ *
+ * RETURN
+ *  kal_uint16 file size
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+
+kal_uint8 sml_att_GetCode( sml_cat_enum cat,
+                           kal_uint8 * imsi,
+                           kal_uint8 * gid1,
+                           kal_uint8 * gid2,
+                           kal_uint8 sim_mnc_len,
+                           kal_uint8 * pdata,
+                           kal_uint8 * code)
+{
+    kal_uint8 mnc_len=0;
+
+    if (SML_MNC_LENGTH_NEST == 1)
+    {
+        mnc_len = sim_mnc_len;
+    }
+    else
+    {
+        ASSERT(0); /* It is not possible to tell the MNC lengh in TMO SIM lock blob */
+    }
+
+    return sml_att_Catcode(cat, imsi, gid1, gid2, mnc_len, code);
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_GetVersion
+ * DESCRIPTION
+ *  This method is used to get SLB version
+ * PARAMETERS
+ *  OUT         SLB version
+ *  IN          source
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  none
+ *******************************************************************************/
+void sml_att_GetVersion(kal_uint8 *version, kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint16 length;
+    kal_uint8 *slb_ver;
+
+    slb_ver = (kal_uint8 *) (*p->getItem)(SML_CAT_C, SML_ATT_CAT_VERSION, &length, source);
+
+    kal_mem_cpy(version, slb_ver, SML_ATT_SIZE_OF_VERSION);
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_GetLockState
+ * DESCRIPTION
+ *  This method is used to get SLB lock state
+ * PARAMETERS
+ *  OUT       lock state
+ *  IN          source
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  none
+ *******************************************************************************/
+void sml_att_GetLockState(kal_uint8 *lock_state, kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint16 length;
+    kal_uint8 *slb_state;
+
+    slb_state = (kal_uint8 *)(*p->getItem)(SML_CAT_C, SML_ATT_CAT_STATE, &length, source);  // First param is not used in TMO
+
+    kal_mem_cpy(lock_state, slb_state, 1);
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_att_GetUnlockTimeLeft
+ * DESCRIPTION
+ *  This method is used to get SLB unlock time left in seconds
+ * PARAMETERS
+ *  IN          source
+ * RETURN
+ *  unlock time left
+ * GLOBALS AFFECTED
+ *  none
+ *******************************************************************************/
+kal_uint32 sml_att_GetUnlockTimeLeft(kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint16 length;
+    kal_uint8 *slb_end_time;
+    kal_uint32 duration_seconds = 0;
+    kal_uint8 i;
+
+    slb_end_time = (kal_uint8 *)(*p->getItem)(SML_CAT_C, SML_ATT_CAT_END_TIME, &length, source); // First param is not used in TMO
+
+    for (i = 0; i < (SML_ATT_SIZE_OF_END_TIME - 1); i++)
+    {
+        duration_seconds += slb_end_time[i];
+        duration_seconds = (duration_seconds << 8);
+    }
+    duration_seconds += slb_end_time[SML_ATT_SIZE_OF_END_TIME-1];
+
+    MD_TRC_INFO_SMU_GET_UNLOCK_TIME_LEFT(duration_seconds, sml_att_seconds_to_expire);
+
+    if (sml_att_seconds_to_expire >= duration_seconds)
+    {
+        return 0;
+    }
+    else
+    {
+        return (duration_seconds - sml_att_seconds_to_expire);
+    }
+}
+
+// ATT SML --- end
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_give
+ * DESCRIPTION
+ *  This method copys the LID files read from NVRAM to the SML obj
+ * PARAMETERS
+ *  IN          * pLidToObj
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void sml_give( void *pLidToObj, kal_uint8 source )
+{
+
+    kal_uint32 magic_head = 0;
+
+    kal_uint32 magic_tail = 0;
+    sml_context_s_struct* pObj = NULL;
+    sml_context_struct * tmp_pObj = NULL;
+    kal_uint8 i = 0;
+
+    if(NULL != pSMLg[source].pObj)
+    {
+
+        kal_sys_trace("SML: object is exist!");
+
+//        free_ctrl_buffer(pSMLg[source].pObj);
+
+        pSMLg[source].pObj = NULL;
+
+    }
+
+//  pObj = (sml_context_struct *) get_ctrl_buffer(sizeof(sml_context_struct));
+
+    if (custom_sml_is_secured_simme_cntxt_enabled() == KAL_TRUE)
+    {
+        if (sml_query_slot_lock_context_rule() == SML_LOCK_SUB_RULE_SLOT_INDEPENDENT_RULE)
+        {
+            pObj = &(sml_cntxt_s_obj[source]);
+        }
+        else
+        {
+            pObj = &(sml_cntxt_s_obj[0]);
+        }
+
+        kal_mem_cpy(pObj,
+                    pLidToObj,
+                    sizeof(sml_context_s_struct)
+                    );
+    }
+    else
+    {
+        if (sml_query_slot_lock_context_rule() == SML_LOCK_SUB_RULE_SLOT_INDEPENDENT_RULE)
+        {
+            pObj = &(sml_cntxt_s_obj[source]);
+        }
+        else
+        {
+            pObj = &(sml_cntxt_s_obj[0]);
+        }
+
+        tmp_pObj = get_ctrl_buffer(sizeof(sml_context_struct));
+
+        kal_mem_cpy(tmp_pObj,
+                    pLidToObj,
+                    sizeof(sml_context_struct)
+                    );
+
+        pObj->magic_head = tmp_pObj->magic_head;
+
+        for (i = 0; i < SML_SUPPORT_CAT_SIZE; i++)
+        {
+            pObj->cat[i].state = tmp_pObj->cat[i].state;
+            pObj->cat[i].retry_count = tmp_pObj->cat[i].retry_count;
+            pObj->cat[i].autolock_count = tmp_pObj->cat[i].autolock_count;
+            pObj->cat[i].num = tmp_pObj->cat[i].num;
+
+            pObj->key[i].state = tmp_pObj->key[i].state;
+            kal_mem_cpy(pObj->key[i].key, tmp_pObj->key[i].key, NVRAM_SML_MAX_SUPPORT_KEY_LEN);
+        }
+
+        kal_mem_cpy(pObj->code_cat_n, tmp_pObj->code_cat_n, SML_CFG_CAT_N_SIZE);
+        kal_mem_cpy(pObj->code_cat_ns, tmp_pObj->code_cat_ns, SML_CFG_CAT_NS_SIZE);
+        kal_mem_cpy(pObj->code_cat_sp, tmp_pObj->code_cat_sp, SML_CFG_CAT_SP_SIZE);
+        kal_mem_cpy(pObj->code_cat_c, tmp_pObj->code_cat_c, SML_CFG_CAT_C_SIZE);
+        kal_mem_cpy(pObj->code_cat_sim, tmp_pObj->code_cat_sim, SML_CFG_CAT_SIM_SIZE);
+        kal_mem_cpy(pObj->code_cat_ns_sp, tmp_pObj->code_cat_ns_sp, SML_CFG_CAT_NS_SP_SIZE);
+        kal_mem_cpy(pObj->code_cat_sim_c, tmp_pObj->code_cat_sim_c, SML_CFG_CAT_SIM_C_SIZE);
+
+        kal_mem_cpy(pObj->range_cat_ns, tmp_pObj->range_cat_ns, SML_CAT_NS_RANGE_SIZE);
+
+        pObj->magic_tail = tmp_pObj->magic_tail;
+
+        free_ctrl_buffer(tmp_pObj);
+    }
+
+    /* Check magic head and tail */
+    magic_head = pObj->magic_head;
+
+    magic_tail = pObj->magic_tail;
+
+#ifdef __MTK_TARGET__
+//  Mark for temporary solution of SIM-ME-Lock
+    ASSERT((magic_head == sizeof(sml_context_struct))
+           && (magic_tail == SML_MAGIC_TAIL_VALUE));
+#endif
+    pSMLg[source].pObj = pObj;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_take
+ * DESCRIPTION
+ *  This method copys the contex of the SML object to the provided NVRAM LID.
+ * PARAMETERS
+ *  OUT         * pObjToLid
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void sml_take( void *pObjToLid, kal_uint8 source )
+{
+    sml_context_struct * tmp_pObj = NULL;
+    sml_context_s_struct * pObj = (sml_context_s_struct *) pSMLg[source].pObj;
+    kal_uint8 i = 0;
+
+    if (custom_sml_is_secured_simme_cntxt_enabled() == KAL_TRUE)
+    {
+        kal_mem_cpy(pObjToLid,
+                    pObj,
+                    sizeof(sml_context_s_struct)
+                    );
+    }
+    else
+    {
+        tmp_pObj = get_ctrl_buffer(sizeof(sml_context_struct));
+
+        tmp_pObj->magic_head = pObj->magic_head;
+
+        for (i = 0; i < SML_SUPPORT_CAT_SIZE; i++)
+        {
+            tmp_pObj->cat[i].state = pObj->cat[i].state;
+            tmp_pObj->cat[i].retry_count = pObj->cat[i].retry_count;
+            tmp_pObj->cat[i].autolock_count = pObj->cat[i].autolock_count;
+            tmp_pObj->cat[i].num = pObj->cat[i].num;
+
+            tmp_pObj->key[i].state = pObj->key[i].state;
+            kal_mem_cpy(tmp_pObj->key[i].key, pObj->key[i].key, NVRAM_SML_MAX_SUPPORT_KEY_LEN);
+        }
+
+        kal_mem_cpy(tmp_pObj->code_cat_n, pObj->code_cat_n, SML_CFG_CAT_N_SIZE);
+        kal_mem_cpy(tmp_pObj->code_cat_ns, pObj->code_cat_ns, SML_CFG_CAT_NS_SIZE);
+        kal_mem_cpy(tmp_pObj->code_cat_sp, pObj->code_cat_sp, SML_CFG_CAT_SP_SIZE);
+        kal_mem_cpy(tmp_pObj->code_cat_c, pObj->code_cat_c, SML_CFG_CAT_C_SIZE);
+        kal_mem_cpy(tmp_pObj->code_cat_sim, pObj->code_cat_sim, SML_CFG_CAT_SIM_SIZE);
+        kal_mem_cpy(tmp_pObj->code_cat_ns_sp, pObj->code_cat_ns_sp, SML_CFG_CAT_NS_SP_SIZE);
+        kal_mem_cpy(tmp_pObj->code_cat_sim_c, pObj->code_cat_sim_c, SML_CFG_CAT_SIM_C_SIZE);
+
+        kal_mem_cpy(tmp_pObj->range_cat_ns, pObj->range_cat_ns, SML_CAT_NS_RANGE_SIZE);
+
+        tmp_pObj->magic_tail = pObj->magic_tail;
+
+        kal_mem_cpy(pObjToLid,
+                    tmp_pObj,
+                    sizeof(sml_context_struct)
+                    );
+
+        free_ctrl_buffer(tmp_pObj);
+    }
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_destory
+ * DESCRIPTION
+ *  This method free the SML object in memory if it is not used.
+ * PARAMETERS
+ *  void
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void sml_destory(kal_uint8 source)
+{
+    pSMLg[source].pObj = NULL;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_getItem
+ * DESCRIPTION
+ *  This method returns the structure pointer and length of the structure
+ *  of the desired SML object items.
+ * PARAMETERS
+ *  IN          cat
+ *  IN          item
+ *  OUT         *length
+ * RETURN
+ *  void *
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void * sml_getItem( sml_cat_enum category,
+                           sml_ctx_enum item,
+                           kal_uint16 *plength,
+                           kal_uint8 source)
+{
+    SML_CONTEXT_STRUCT *pObj = (SML_CONTEXT_STRUCT *) pSMLg[source].pObj;
+
+    ASSERT(NULL != pObj);
+
+    switch(item)
+    {
+        case SML_MAGIC_HEAD:
+        case SML_MAGIC_TAIL:
+            //ASSERT(0);
+            break;
+
+        case SML_CAT_META:
+
+            *plength = sizeof(SML_CAT_META_STRUCT);
+            return (SML_CAT_META_STRUCT *) &(pObj->cat[category]);
+
+            break;
+
+        case SML_CAT_KEY:
+
+            *plength = sizeof(SML_CTRL_KEY_STRUCT);
+            return (SML_CTRL_KEY_STRUCT *) &(pObj->key[category]);
+
+            break;
+
+    #ifdef __SML_PUK__
+        case SML_CAT_PUK_KEY:
+
+            *plength = sizeof(SML_PUK_KEY_STRUCT);
+            return (SML_PUK_KEY_STRUCT *) &(pObj->puk_key[category]);
+
+            break;
+    #endif
+
+        case SML_CAT_CODE:
+
+            switch(category)
+            {
+                case SML_CAT_N:
+
+                    *plength = SML_CFG_CAT_N_SIZE;
+                    return (kal_uint8 *) &(pObj->code_cat_n[0]);
+
+                    break;
+
+                case SML_CAT_NS:
+
+                    *plength = SML_CFG_CAT_NS_SIZE;
+                    return (kal_uint8 *) &(pObj->code_cat_ns[0]);
+
+                    break;
+
+                case SML_CAT_SP:
+
+                    *plength = SML_CFG_CAT_SP_SIZE;
+                    return (kal_uint8 *) &(pObj->code_cat_sp[0]);
+
+                    break;
+
+                case SML_CAT_C:
+
+                    *plength = SML_CFG_CAT_C_SIZE;
+                    return (kal_uint8 *) &(pObj->code_cat_c[0]);
+
+                    break;
+
+                case SML_CAT_SIM:
+
+                    *plength = SML_CFG_CAT_SIM_SIZE;
+                    return (kal_uint8 *) &(pObj->code_cat_sim[0]);
+
+                    break;
+
+                case SML_CAT_NS_SP:
+
+                    *plength = SML_CFG_CAT_NS_SP_SIZE;
+                    return (kal_uint8 *) &(pObj->code_cat_ns_sp[0]);
+
+                    break;
+
+                case SML_CAT_SIM_C:
+
+                    *plength = SML_CFG_CAT_SIM_C_SIZE;
+                    return (kal_uint8 *) &(pObj->code_cat_sim_c[0]);
+
+                    break;
+
+                default:
+                    /* do nothing */
+                    break;
+            }
+            break;
+
+        case SML_CAT_RANGE:
+
+            switch(category)
+            {
+                case SML_CAT_NS:
+
+                    *plength = SML_CAT_NS_RANGE_SIZE;
+                    return (kal_uint8 *) &(pObj->range_cat_ns[0]);
+
+                    break;
+
+                case SML_CAT_N:
+                case SML_CAT_SP:
+                case SML_CAT_C:
+                case SML_CAT_SIM:
+                case SML_CAT_NS_SP:
+                case SML_CAT_SIM_C:
+
+                    *plength = 0;
+                    return NULL;
+
+                    break;
+
+                default:
+                    /* do nothing */
+                    break;
+            }
+            break;
+
+        default:
+            break;
+    }
+
+    return NULL;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_putItem
+ * DESCRIPTION
+ *  This method set the desired items of the SML object.
+ * PARAMETERS
+ *  IN          cat
+ *  IN          item
+ *  IN          *pItem
+ *  IN          *plength
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void sml_putItem( sml_cat_enum cat,
+                         sml_ctx_enum item,
+                         void *pItem,
+                         kal_uint16 *plength,
+                         kal_uint8 source)
+{
+    SML_CONTEXT_STRUCT *pObj = (SML_CONTEXT_STRUCT *) pSMLg[source].pObj;
+
+    ASSERT(NULL != pObj);
+
+    switch(item)
+    {
+        case SML_MAGIC_HEAD:
+        case SML_MAGIC_TAIL:
+            //ASSERT(0);
+            break;
+
+        case SML_CAT_META:
+
+            //ASSERT(*plength == sizeof(sml_category_meta_struct));
+            kal_mem_cpy(&(pObj->cat[cat]), pItem, *plength);
+            break;
+
+        case SML_CAT_KEY:
+
+            //ASSERT(*plength == sizeof(sml_control_key_struct));
+            kal_mem_cpy(&(pObj->key[cat]), pItem, *plength);
+            break;
+
+    #ifdef __SML_PUK__
+        case SML_CAT_PUK_KEY:
+
+            kal_mem_cpy(&(pObj->puk_key[cat]), pItem, *plength);
+            break;
+    #endif
+
+        case SML_CAT_CODE:
+
+            switch(cat)
+            {
+                case SML_CAT_N:
+
+                    //ASSERT(*plength <= SML_CFG_CAT_N_SIZE);
+                    kal_mem_cpy(&(pObj->code_cat_n[0]), pItem, *plength);
+                    break;
+
+                case SML_CAT_NS:
+
+                    //ASSERT(*plength <= SML_CFG_CAT_NS_SIZE);
+                    kal_mem_cpy(&(pObj->code_cat_ns[0]), pItem, *plength);
+                    break;
+
+                case SML_CAT_SP:
+
+                    //ASSERT(*plength <= SML_CFG_CAT_SP_SIZE);
+                    kal_mem_cpy(&(pObj->code_cat_sp[0]), pItem, *plength);
+
+                    break;
+
+                case SML_CAT_C:
+
+                    //ASSERT(*plength <= SML_CFG_CAT_C_SIZE);
+                    kal_mem_cpy(&(pObj->code_cat_c[0]), pItem, *plength);
+                    break;
+
+                case SML_CAT_SIM:
+
+                    //ASSERT(*plength <= SML_CFG_CAT_SIM_SIZE);
+                    kal_mem_cpy(&(pObj->code_cat_sim[0]), pItem, *plength);
+                    break;
+
+                case SML_CAT_NS_SP:
+
+                    //ASSERT(*plength <= SML_CFG_CAT_NS_SP_SIZE);
+                    kal_mem_cpy(&(pObj->code_cat_ns_sp[0]), pItem, *plength);
+                    break;
+
+                case SML_CAT_SIM_C:
+
+                    //ASSERT(*plength <= SML_CFG_CAT_SIM_C_SIZE);
+                    kal_mem_cpy(&(pObj->code_cat_sim_c[0]), pItem, *plength);
+                    break;
+
+                default:
+                    /* do nothing */
+                    break;
+            }
+            break;
+
+        case SML_CAT_RANGE:
+
+            switch(cat)
+            {
+                case SML_CAT_NS:
+
+                    //ASSERT(*plength <= SML_CAT_NS_RANGE_SIZE);
+                    kal_mem_cpy(&(pObj->range_cat_ns[0]), pItem, *plength);
+                    break;
+
+                case SML_CAT_N:
+                case SML_CAT_SP:
+                case SML_CAT_C:
+                case SML_CAT_SIM:
+                case SML_CAT_NS_SP:
+                case SML_CAT_SIM_C:
+                default:
+                    /* do nothing */
+                    break;
+            }
+            break;
+
+        default:
+            break;
+    }
+}
+
+/* Define the Global handler of SML */
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Load
+ * DESCRIPTION
+ *  This function loads the SML obj from NVRAM LID (NVRAM_READ_CNF)
+ * PARAMETERS
+ *  IN          pLid
+ * RETURN
+ *  kal_uint16  Obj size
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_uint16 sml_Load( void *pLid, kal_uint8 source )
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint8 *decrypt_pdu_ptr = NULL;
+    kal_uint16 length = 0;
+
+    if (custom_sml_is_secured_simme_cntxt_enabled() == KAL_TRUE)
+    {
+        length = sizeof(sml_context_s_struct);
+    }
+    else
+    {
+        length = sizeof(sml_context_struct);
+    }
+
+    decrypt_pdu_ptr = get_ctrl_buffer(length);
+
+    custom_sml_decryption(pLid, length, decrypt_pdu_ptr, length);
+
+    if ((NULL != (*p->destory)) && (NULL != (*p->give)))
+    {
+        /* Clean the old ones */
+        (*p->destory)(source);
+
+        /* Load the new one */
+        (*p->give)(decrypt_pdu_ptr, source);
+    }
+    else
+    {
+        length = 0;
+    }
+
+    free_ctrl_buffer(decrypt_pdu_ptr);
+
+    return length;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Save
+ * DESCRIPTION
+ *  This function saves the SML obj to NVRAM LID (NVRAM_WRITE_REQ)
+ * PARAMETERS
+ *  OUT          pLid
+ * RETURN
+ *  kal_uint16  Obj size
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_uint16 sml_Save( void *pLid, kal_uint8 source )
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint8 *plaintext_pdu_ptr = NULL;
+    kal_uint16 length = 0;
+
+    if (custom_sml_is_secured_simme_cntxt_enabled() == KAL_TRUE)
+    {
+        length = sizeof(sml_context_s_struct);
+    }
+    else
+    {
+        length = sizeof(sml_context_struct);
+    }
+
+    plaintext_pdu_ptr = get_ctrl_buffer(length);
+
+    (*p->take)(plaintext_pdu_ptr, source);
+
+    custom_sml_encryption(plaintext_pdu_ptr, length, pLid, length);
+
+    free_ctrl_buffer(plaintext_pdu_ptr);
+
+    return length;
+}
+
+kal_uint32 sml_GetDefaultRetryCount(sml_cat_enum cat, kal_uint32 max_retry_count)
+{
+    kal_uint32 defaultRetryCount = SML_MAX_RETRY_COUNT;
+
+    if (max_retry_count != 0)
+    {
+        defaultRetryCount = max_retry_count;
+    }
+    else
+    {
+        switch (cat)
+        {
+            case SML_CAT_N:
+
+                defaultRetryCount = SML_RETRY_COUNT_N_CAT;
+                break;
+
+            case SML_CAT_NS:
+
+                defaultRetryCount = SML_RETRY_COUNT_NS_CAT;
+                break;
+
+            case SML_CAT_SP:
+
+                defaultRetryCount = SML_RETRY_COUNT_SP_CAT;
+                break;
+
+            case SML_CAT_C:
+
+                defaultRetryCount = SML_RETRY_COUNT_C_CAT;
+                break;
+
+            case SML_CAT_SIM:
+
+                defaultRetryCount = SML_RETRY_COUNT_SIM_CAT;
+                break;
+
+            case SML_CAT_NS_SP:
+
+                defaultRetryCount = SML_RETRY_COUNT_NS_CAT;
+                break;
+
+            case SML_CAT_SIM_C:
+
+                defaultRetryCount = SML_RETRY_COUNT_SIM_CAT;
+                break;
+
+            default:
+                defaultRetryCount = SML_MAX_RETRY_COUNT;
+                break;
+        }
+    }
+
+    return defaultRetryCount;
+}
+
+kal_bool sml_catkey_verify( sml_op_enum op, SML_CTRL_KEY_STRUCT *catkey, kal_uint8 *key, kal_uint8 key_len, kal_uint8 source )
+{
+    kal_bool result = KAL_FALSE;
+    sml_key_input_type_enum input_type = SML_INPUT_WITH_PLAINKEY;
+
+    input_type = custom_sml_query_key_input_type((sml_key_algo_enum)catkey->algo, op);
+
+    if (input_type == SML_INPUT_WITH_HCK)
+    {
+        // Input is already hashed raw data
+        // only needs direct comparison
+        result = kal_mem_cmp(&(catkey->key[0]),key,key_len) == 0 ? KAL_TRUE : KAL_FALSE;
+    }
+
+    else if (catkey->algo == SML_KEY_ALGO_BCD)
+    {
+        result = kal_mem_cmp(&(catkey->key[0]),key,key_len) == 0 ? KAL_TRUE : KAL_FALSE;
+    }
+    else if (catkey->algo == SML_KEY_ALGO_PBKDF2_HMAC_SHA256_SALT128)
+    {
+        kal_uint8 i = 0;
+        kal_uint32 blob_iter_count = 0;
+
+        kal_uint8 *local_key_ptr = NULL;
+        kal_uint8 local_key_len = 0;
+        kal_uint8 key_string[SML_MAX_SUPPORT_KEY_LEN*2+1] = {0};
+        sml_input_format_of_catkey_for_algo_enum catkey_type = SML_INPUT_FORMAT_CATKEY_UNKNOWN;
+
+        /* Get input key format */
+        catkey_type = custom_sml_input_format_of_catkey_for_algo(catkey->algo);
+
+        MD_TRC_INFO_SML_INPUT_FORMAT_OF_CATKEY(catkey_type);
+
+        if (catkey_type == SML_INPUT_FORMAT_CATKEY_ASCII)
+        {
+            /* Hashing with ASCII string */
+            // Generate key string from BCD key
+            local_key_len = convert_to_digit_with_len(key, key_string, SML_MAX_SUPPORT_KEY_LEN);
+            local_key_ptr = key_string;
+        }
+        else
+        {
+            /* Hashing directly with reversed BCD key */
+            local_key_len = key_len;
+            local_key_ptr = key;
+        }
+
+        /* Get iter count */
+        for (i = 0; i < NVRAM_SML_S_MAX_SUPPORT_INTER_CNT_LEN - 1; i++)
+        {
+            blob_iter_count += catkey->inter_cnt[i];
+            blob_iter_count = (blob_iter_count << 8);
+        }
+
+        blob_iter_count += catkey->inter_cnt[NVRAM_SML_S_MAX_SUPPORT_INTER_CNT_LEN-1];
+
+        if (blob_iter_count != 0)   /* blob has valid key data */
+        {
+            kal_uint32 verify_result = cust_sec_hck_verify (TYPE_HCK_PBKDF2_HMAC_SHA256_SALT128,
+                                          (kal_char *)local_key_ptr,
+                                          (kal_uint32)local_key_len,
+                                          catkey->salt,
+                                          blob_iter_count,
+                                          catkey->key);
+
+            if (verify_result == ERR_SEC_CHECK_HCK_SUCCESS)
+            {
+                result = KAL_TRUE;
+            }
+            else
+            {
+                result = KAL_FALSE;
+            }
+        }
+    }
+    else
+    {
+        // Unknown algorithm
+        result = KAL_FALSE;
+    }
+
+
+    if (result == KAL_TRUE)
+    {
+        MD_TRC_INFO_SML_KEY_VERIFY_PASS_INFO_CUST();
+    }
+    else
+    {
+        MD_TRC_INFO_SML_KEY_VERIFY_FAIL_INFO_CUST();
+    }
+
+    return result;
+}
+
+void sml_catkey_update( sml_op_enum op, SML_CTRL_KEY_STRUCT *catkey, kal_uint8 *key, kal_uint8 key_len, kal_uint8 source )
+{
+    kal_bool is_key_updated = KAL_FALSE;
+    sml_key_input_type_enum input_type = SML_INPUT_WITH_PLAINKEY;
+
+    MD_TRC_FUNC_SML_CATKEY_UPDATE();
+
+    if ((catkey == NULL) || (key == NULL))
+    {
+        return;
+    }
+
+    input_type = custom_sml_query_key_input_type((sml_key_algo_enum)catkey->algo, op);
+
+    if (input_type == SML_INPUT_WITH_HCK)
+    {
+        // Input is already hashed raw data
+        // directly copy
+        kal_mem_cpy(catkey->key, key, key_len);
+
+        is_key_updated = KAL_TRUE;
+    }
+
+    else if (catkey->algo == SML_KEY_ALGO_BCD)
+    {
+        kal_mem_cpy(catkey->key, key, key_len);
+
+        is_key_updated = KAL_TRUE;
+    }
+    else if (catkey->algo == SML_KEY_ALGO_PBKDF2_HMAC_SHA256_SALT128)
+    {
+        kal_uint8 i = 0;
+        kal_uint32 blob_iter_count = 0;
+
+        kal_uint8 *local_key_ptr = NULL;
+        kal_uint8 local_key_len = 0;
+        kal_uint8 key_string[SML_MAX_SUPPORT_KEY_LEN*2+1] = {0};
+        sml_input_format_of_catkey_for_algo_enum catkey_type = SML_INPUT_FORMAT_CATKEY_UNKNOWN;
+
+        kal_uint8 *hck_calc = get_ctrl_buffer(64);
+
+        kal_mem_set(hck_calc, 0, 64);
+
+        /* Get input key format */
+        catkey_type = custom_sml_input_format_of_catkey_for_algo(catkey->algo);
+
+        MD_TRC_INFO_SML_INPUT_FORMAT_OF_CATKEY(catkey_type);
+
+        if (catkey_type == SML_INPUT_FORMAT_CATKEY_ASCII)
+        {
+            /* Hashing with ASCII string */
+            // Generate key string from BCD key
+            local_key_len = convert_to_digit_with_len(key, key_string, SML_MAX_SUPPORT_KEY_LEN);
+            local_key_ptr = key_string;
+        }
+        else
+        {
+            /* Hashing directly with reversed BCD key */
+            local_key_len = key_len;
+            local_key_ptr = key;
+        }
+
+        /* Get iter count */
+        for (i = 0; i < NVRAM_SML_S_MAX_SUPPORT_INTER_CNT_LEN - 1; i++)
+        {
+            blob_iter_count += catkey->inter_cnt[i];
+            blob_iter_count = (blob_iter_count << 8);
+        }
+
+        blob_iter_count += catkey->inter_cnt[NVRAM_SML_S_MAX_SUPPORT_INTER_CNT_LEN-1];
+
+        if (blob_iter_count != 0)   /* blob has valid key data */
+        {
+            kal_uint32 hck_calc_result = 0;
+
+            hck_calc_result = PKCS5_PBKDF2_HMAC_SHA256((kal_char *)local_key_ptr, (kal_uint32)local_key_len,
+                                                       catkey->salt, 16,
+                                                       blob_iter_count, 32,
+                                                       hck_calc);
+
+            if (hck_calc_result == 1)
+            {
+                // Success
+                kal_mem_set(catkey->key, 0xFF, CAT_KEY_MAX_SUPPORT_LEN);
+                kal_mem_cpy(catkey->key, hck_calc, 32);
+
+                is_key_updated = KAL_TRUE;
+            }
+        }
+
+        free_ctrl_buffer(hck_calc);
+    }
+    else
+    {
+        // Unknown algorithm, do not update
+    }
+
+    if (is_key_updated == KAL_TRUE)
+    {
+        MD_TRC_INFO_SML_KEY_UPDATE_SUCCESS();
+    }
+
+    return;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Unlock
+ * DESCRIPTION
+ *  This function unlock the desired category
+ * PARAMETERS
+ *  IN          cat
+ *  IN          * key
+ *  IN          key_len
+ *  IN          source
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_Unlock( sml_cat_enum cat,      // category
+                     kal_uint8 *key,
+                     kal_uint8 key_len,
+                     kal_uint8 source)      // 0:SIM1, 1:SIM2
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+
+    SML_CAT_META_STRUCT *meta = NULL;
+    SML_CTRL_KEY_STRUCT *catkey = NULL;
+#ifdef __SML_PUK__
+    SML_PUK_KEY_STRUCT *puk = NULL;
+#endif
+
+    kal_uint16 length = 0;
+    kal_uint32 max_retry_count = 0;
+    kal_bool result = KAL_FALSE;
+
+    meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat, SML_CAT_META, &length, source);
+    catkey = (SML_CTRL_KEY_STRUCT *) (*p->getItem)(cat, SML_CAT_KEY, &length, source);
+#ifdef __SML_PUK__
+    puk = (SML_PUK_KEY_STRUCT *) (*p->getItem)(cat, SML_CAT_PUK_KEY, &length, source);
+#endif
+
+    if (sbp_query_md_feature_by_ps(SBP_ENABLE_SML_MAX_RETRY_COUNT, source) == KAL_TRUE)
+    {
+        nvram_ef_sml_obj_struct *pMRC = &pSMLMRCg[source];
+        kal_uint8 *mrc_ptr;
+
+        mrc_ptr = (kal_uint8 *)(*pMRC->getItem)(cat, SML_CAT_MAX_RETRY_COUNT, &length, source);
+
+        max_retry_count = *mrc_ptr;
+    }
+    else
+    {
+        max_retry_count = meta->max_retry_count;
+    }
+
+    if((meta->state == SML_STATE_LOCK)&&(meta->retry_count > 0))
+    {
+        result = sml_catkey_verify(SML_OP_UNLOCK, catkey, key, key_len, source);
+
+        if(KAL_FALSE == result)
+        {
+
+            /* Fail! Passwd not match! return KAL_FALSE; */
+            if (max_retry_count != 0)  // MAX_RETRY_COUNT == 0 means unlimited retry.
+            {
+                meta->retry_count--;
+            }
+        }
+        else
+        {
+            /* Success! return KAL_TRUE; */
+            meta->state = SML_STATE_UNLOCK;
+            meta->retry_count = sml_GetDefaultRetryCount(cat, max_retry_count);
+
+        #ifdef __SML_PUK__
+            puk->retry_count = puk->max_retry_count;
+        #endif
+        }
+
+    }
+
+    return result;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Lock
+ * DESCRIPTION
+ *  This function Lock the desired category
+ * PARAMETERS
+ *  IN          cat
+ *  IN          * key
+ *  IN          key_len
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_Lock( sml_cat_enum cat,
+                   kal_uint8 *key,
+                   kal_uint8 key_len,
+                   kal_uint8 source)
+{
+
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+
+    SML_CAT_META_STRUCT *meta = NULL;
+
+    SML_CTRL_KEY_STRUCT *catkey = NULL;
+
+
+    kal_uint16 length = 0;
+
+    kal_bool result = KAL_FALSE;
+
+    meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat,SML_CAT_META,&length, source);
+
+    catkey = (SML_CTRL_KEY_STRUCT *) (*p->getItem)(cat,SML_CAT_KEY,&length, source);
+
+    /*
+     * Perform Key state check. If the key is default SET, it must be equal
+     * to the key provided by the user. If it is not, the key will be set as
+     * the key provided by the user.
+     */
+
+    //ASSERT( key_len <= SML_MAX_SUPPORT_KEY_LEN );
+
+    if( SML_KEY_SET == catkey->state )
+    {
+        result = sml_catkey_verify(SML_OP_LOCK, catkey, key, key_len, source);
+    }
+    else
+    {
+        result = KAL_TRUE;
+    }
+
+    /* Change the SML state if the category is not empty */
+
+    if( (SML_STATE_UNLOCK == meta->state)
+        &&(KAL_TRUE == result) )
+    {
+        if( meta->num > 0 )
+        {
+            if( SML_KEY_EMPTY == catkey->state )
+            {
+                sml_catkey_update(SML_OP_LOCK, catkey, key, key_len, source);
+            }
+
+            meta->state = SML_STATE_LOCK;
+        }
+        else
+        {
+            kal_sys_trace("SML: The category is empty!");
+
+            result = KAL_FALSE;
+        }
+
+    }
+    else
+    {
+        result = KAL_FALSE;
+    }
+
+    return result;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Add
+ * DESCRIPTION
+ *  This function is used to add code into the desired category
+ * PARAMETERS
+ *  IN          cat
+ *  IN          * code
+ *  IN          len
+ *  IN          * key
+ *  IN          key_len
+ *  OUT         * remain
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_Add( sml_cat_enum cat,
+                  kal_uint8 *code,
+                  kal_uint8 len,
+                  kal_uint8 *key,
+                  kal_uint8 key_len,
+                  kal_uint8 *remain,
+                  kal_uint8 source)
+{
+
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+
+    SML_CAT_META_STRUCT *meta = NULL;
+
+    SML_CTRL_KEY_STRUCT *catkey = NULL;
+
+    kal_uint8 *pdata = NULL;
+
+    kal_uint16 length = 0, offset = 0;
+
+    kal_bool result = KAL_FALSE;
+
+    meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat,SML_CAT_META,&length, source);
+    catkey = (SML_CTRL_KEY_STRUCT *) (*p->getItem)(cat,SML_CAT_KEY,&length, source);
+    pdata = (kal_uint8 *) (*p->getItem)(cat,SML_CAT_CODE,&length, source);
+
+    switch(cat)
+    {
+
+        case SML_CAT_N:
+
+            //ASSERT(SML_SIZE_OF_CAT_N == len);
+
+            offset = (meta->num) * SML_SIZE_OF_CAT_N;
+
+            *remain = (length - offset) / SML_SIZE_OF_CAT_N;
+
+        break;
+
+        case SML_CAT_NS:
+
+            //ASSERT(SML_SIZE_OF_CAT_NS == len);
+
+            offset = (meta->num) * SML_SIZE_OF_CAT_NS;
+
+            *remain = (length - offset) / SML_SIZE_OF_CAT_NS;
+
+        break;
+
+        case SML_CAT_SP:
+
+            //ASSERT(SML_SIZE_OF_CAT_SP == len);
+
+            offset = (meta->num) * SML_SIZE_OF_CAT_SP;
+
+            *remain = (length - offset) / SML_SIZE_OF_CAT_SP;
+
+        break;
+
+        case SML_CAT_C:
+
+            //ASSERT(SML_SIZE_OF_CAT_C == len);
+
+            offset = (meta->num) * SML_SIZE_OF_CAT_C;
+
+            *remain = (length - offset) / SML_SIZE_OF_CAT_C;
+
+        break;
+
+        case SML_CAT_SIM:
+
+           //ASSERT(SML_SIZE_OF_CAT_SIM == len);
+
+           offset = (meta->num) * SML_SIZE_OF_CAT_SIM;
+
+            *remain = (length - offset) / SML_SIZE_OF_CAT_SIM;
+
+        break;
+
+        case SML_CAT_NS_SP:
+
+            //ASSERT(SML_SIZE_OF_LINK_NS_SP == len);
+
+            offset = (meta->num) * SML_SIZE_OF_LINK_NS_SP;
+
+            *remain = (length - offset) / SML_SIZE_OF_LINK_NS_SP;
+
+        break;
+
+        case SML_CAT_SIM_C:
+
+            //ASSERT(SML_SIZE_OF_LINK_SIM_C == len);
+
+            offset = (meta->num) * SML_SIZE_OF_LINK_SIM_C;
+
+            *remain = (length - offset) / SML_SIZE_OF_LINK_SIM_C;
+
+        break;
+
+        default:
+
+        break;
+
+    }
+
+    /*
+     * Perform Key state check. If the key is default SET, it must be equal
+     * to the key provided by the user. If it is not, the key will be set as
+     * the key provided by the user.
+     */
+
+    //ASSERT( key_len <= SML_MAX_SUPPORT_KEY_LEN );
+
+    if( SML_KEY_SET == catkey->state )
+    {
+        result = sml_catkey_verify(SML_OP_ADD, catkey, key, key_len, source);
+    }
+    else
+    {
+        result = KAL_TRUE;
+    }
+
+    /* Check if the space is available */
+    if( (*remain > 0)
+        && (SML_STATE_UNLOCK == meta->state)
+        && (KAL_TRUE == result) )
+    {
+        if(SML_KEY_EMPTY == catkey->state)
+        {
+            sml_catkey_update(SML_OP_ADD, catkey, key, key_len, source);
+        }
+
+        kal_mem_cpy((kal_uint8 *)(pdata+offset),
+                    code,
+                    len
+                    );
+
+        meta->num ++;
+
+        (*remain)--;
+
+        meta->state = SML_STATE_LOCK;
+    }
+    else
+    {
+        kal_sys_trace("SML: Add fail!");
+
+        result = KAL_FALSE;
+    }
+
+    return result;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Remove
+ * DESCRIPTION
+ *  This function is used to remove the desired category
+ * PARAMETERS
+ *  IN          cat
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_Remove( sml_cat_enum cat, kal_uint8 source )
+{
+
+    nvram_ef_sml_obj_struct * p = &pSMLg[source];
+
+    SML_CAT_META_STRUCT * meta = NULL;
+
+    SML_CTRL_KEY_STRUCT * catkey = NULL;
+
+    kal_uint8 * pdata = NULL;
+
+    kal_uint16 length = 0;
+
+    kal_bool result = KAL_FALSE;
+
+    meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat,SML_CAT_META,&length, source);
+    catkey = (SML_CTRL_KEY_STRUCT *) (*p->getItem)(cat,SML_CAT_KEY,&length, source);
+    pdata = (kal_uint8 *) (*p->getItem)(cat,SML_CAT_CODE,&length, source);
+
+    if( SML_STATE_UNLOCK == meta->state )
+    {
+
+        kal_mem_set(pdata,0xFF,length);
+
+        if( SML_KEY_EMPTY == catkey->state )
+        {
+            kal_mem_set(catkey->key, 0xFF, CAT_KEY_MAX_SUPPORT_LEN);
+        }
+
+        meta->num = 0;
+
+        result = KAL_TRUE;
+    }
+
+    return result;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Disable
+ * DESCRIPTION
+ *  This function is used to disable the desired category
+ * PARAMETERS
+ *  IN          cat
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_Disable( sml_cat_enum cat, kal_uint8 source )
+{
+
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+
+    SML_CAT_META_STRUCT *meta = NULL;
+
+    kal_uint16 length = 0;
+
+    kal_bool result = KAL_FALSE;
+
+    meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat,SML_CAT_META,&length, source);
+
+    if( SML_STATE_UNLOCK == meta->state )
+    {
+
+        meta->state = SML_STATE_DISABLE;
+
+        result = KAL_TRUE;
+
+    }
+
+    return result;
+
+}
+
+/*******************************************************************************
+ * FUNCTION  
+ *  sml_UpdateAutoLock
+ * DESCRIPTION
+ *  
+ * PARAMETERS
+ *  IN  
+ * RETURN
+ *  TRUE if success FALSE otherwise
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/ 
+kal_bool sml_UpdateAutoLock(sml_cat_enum cat, kal_uint8 *key, kal_uint8 key_len, kal_uint8 count, kal_uint8 source)
+{
+    kal_uint8 remain = 0;
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+
+    SML_CAT_META_STRUCT *meta = NULL;
+
+    SML_CTRL_KEY_STRUCT *catkey = NULL;
+
+    kal_uint16 length = 0, offset = 0; 
+
+    kal_bool result = KAL_FALSE;
+    
+    meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat,SML_CAT_META,&length, source);
+    catkey = (SML_CTRL_KEY_STRUCT *) (*p->getItem)(cat,SML_CAT_KEY,&length, source);
+    (*p->getItem)(cat,SML_CAT_CODE,&length, source);
+
+    switch(cat)
+    {
+        
+        case SML_CAT_N:
+
+            offset = (meta->num) * SML_SIZE_OF_CAT_N;
+            
+            remain = (length - offset) / SML_SIZE_OF_CAT_N;
+                    
+        break;
+        
+        case SML_CAT_NS:
+
+            offset = (meta->num) * SML_SIZE_OF_CAT_NS;        
+
+            remain = (length - offset) / SML_SIZE_OF_CAT_NS;        
+            
+        break;
+        
+        case SML_CAT_SP:
+
+            offset = (meta->num) * SML_SIZE_OF_CAT_SP;        
+
+            remain = (length - offset) / SML_SIZE_OF_CAT_SP;        
+            
+        break;
+
+        case SML_CAT_C:
+                        
+            offset = (meta->num) * SML_SIZE_OF_CAT_C;   
+
+            remain = (length - offset) / SML_SIZE_OF_CAT_C;                
+            
+        break;
+        
+        case SML_CAT_SIM:
+           
+           offset = (meta->num) * SML_SIZE_OF_CAT_SIM;  
+
+            remain = (length - offset) / SML_SIZE_OF_CAT_SIM;               
+            
+        break;
+        
+        case SML_CAT_NS_SP:
+
+            offset = (meta->num) * SML_SIZE_OF_LINK_NS_SP;   
+
+            remain = (length - offset) / SML_SIZE_OF_LINK_NS_SP;                    
+            
+        break;
+        
+        case SML_CAT_SIM_C:
+            
+            offset = (meta->num) * SML_SIZE_OF_LINK_SIM_C;   
+
+            remain = (length - offset) / SML_SIZE_OF_LINK_SIM_C;                
+            
+        break;    
+        
+        default:
+            
+        break;
+        
+    }           
+
+
+    
+    if( SML_KEY_SET == catkey->state )
+    {
+        result = sml_catkey_verify(SML_OP_UPDATE_AUTOLOCK_COUNT, catkey, key, key_len, source);
+    }
+    else
+    {
+        result = KAL_TRUE;
+    }    
+    
+    /* Check if the space is available */
+    if( (remain >= count)
+        && (SML_STATE_UNLOCK == meta->state)
+        && (KAL_TRUE == result) )
+    {
+        if(SML_KEY_EMPTY == catkey->state)
+        {
+            sml_catkey_update(SML_OP_UPDATE_AUTOLOCK_COUNT, catkey, key, key_len, source);
+        }
+
+        meta->autolock_count = count;
+
+        if (count != 0)
+        {
+            meta->state = SML_STATE_AUTOLOCK;
+        }
+
+        MD_TRC_INFO_SML_AUTOLOCK_COUNT_UPDATE("SUCCESS", count);
+    }
+    else
+    {
+        kal_sys_trace("SML: Update Autolock Count fail!");
+    
+        result = KAL_FALSE;
+    }
+    
+    return result;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Reset
+ * DESCRIPTION
+ *  This function is used to reset the retry counter
+ * PARAMETERS
+ *  IN          cat
+ *  IN          * key
+ *  IN          key_len
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_Reset( sml_cat_enum cat,
+                    kal_uint8 *key,
+                    kal_uint8 key_len,
+                    kal_uint8 source)
+{
+    kal_bool result = KAL_FALSE;
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+    return result;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Status
+ * DESCRIPTION
+ *  This function is used to query the status of the category
+ * PARAMETERS
+ *  IN          cat
+ *  OUT         *state
+ *  OUT         *retry_count
+ *  OUT         *num_of_sets
+ *  OUT         *space_of_sets
+ *  OUT         *key_state
+ *  OUT         *auto_lock_count
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+void sml_Status( sml_cat_enum cat,
+                 sml_state_enum *state,
+                 kal_uint32 *retry_count,
+                 kal_uint8 *num_of_sets,
+                 kal_uint8 *space_of_sets,
+                 sml_key_state_enum *key_state,
+                 kal_uint8 *auto_lock_count,
+                 kal_uint8 source)
+{
+
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+
+    SML_CAT_META_STRUCT *meta = NULL;
+
+    SML_CTRL_KEY_STRUCT *catkey = NULL;
+
+//    kal_uint8 *pdata = NULL;
+
+    kal_uint16 length = 0, offset = 0;
+
+    meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat,SML_CAT_META,&length, source);
+    catkey = (SML_CTRL_KEY_STRUCT *) (*p->getItem)(cat,SML_CAT_KEY,&length, source);
+    (*p->getItem)(cat,SML_CAT_CODE,&length, source); //to get the code length for later use
+
+    if(state)
+        *state = meta->state;
+
+    if(retry_count)
+        *retry_count = meta->retry_count;
+
+    if(num_of_sets)
+        *num_of_sets = meta->num;
+
+    if(key_state)
+        *key_state = catkey->state;
+
+    if(auto_lock_count)
+        *auto_lock_count = meta->autolock_count;
+
+    if(space_of_sets)
+    {
+        switch(cat)
+        {
+
+            case SML_CAT_N:
+
+            offset = (meta->num) * SML_SIZE_OF_CAT_N;
+
+            *space_of_sets = (length - offset) / SML_SIZE_OF_CAT_N;
+
+            break;
+
+            case SML_CAT_NS:
+
+            offset = (meta->num) * SML_SIZE_OF_CAT_NS;
+
+            *space_of_sets  = (length - offset) / SML_SIZE_OF_CAT_NS;
+
+            break;
+
+            case SML_CAT_SP:
+
+            offset = (meta->num) * SML_SIZE_OF_CAT_SP;
+
+            *space_of_sets  = (length - offset) / SML_SIZE_OF_CAT_SP;
+
+            break;
+
+            case SML_CAT_C:
+
+            offset = (meta->num) * SML_SIZE_OF_CAT_C;
+
+            *space_of_sets  = (length - offset) / SML_SIZE_OF_CAT_C;
+
+            break;
+
+            case SML_CAT_SIM:
+
+            offset = (meta->num) * SML_SIZE_OF_CAT_SIM;
+
+            *space_of_sets  = (length - offset) / SML_SIZE_OF_CAT_SIM;
+
+            break;
+
+            case SML_CAT_NS_SP:
+
+            offset = (meta->num) * SML_SIZE_OF_LINK_NS_SP;
+
+            *space_of_sets  = (length - offset) / SML_SIZE_OF_LINK_NS_SP;
+
+            break;
+
+            case SML_CAT_SIM_C:
+
+            offset = (meta->num) * SML_SIZE_OF_LINK_SIM_C;
+
+            *space_of_sets  = (length - offset) / SML_SIZE_OF_LINK_SIM_C;
+
+            break;
+
+            default:
+
+            break;
+
+        }
+    }
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Autolock
+ * DESCRIPTION
+ *  This function is used to autolock the desired category
+ * PARAMETERS
+ *  IN          cat
+ *  IN          *code
+ *  IN          len
+ *  OUT          *remain
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_Autolock( sml_cat_enum cat,
+                       kal_uint8 *code,
+                       kal_uint8 len,
+                       kal_uint8 *remain,
+                       kal_uint8 source)
+{
+
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+
+    SML_CAT_META_STRUCT *meta = NULL;
+
+    kal_uint8 *pdata = NULL;
+
+    kal_uint16 length = 0, offset = 0;
+
+    kal_bool result = KAL_FALSE;
+
+    meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat,SML_CAT_META,&length, source);
+    pdata = (kal_uint8 *) (*p->getItem)(cat,SML_CAT_CODE,&length, source);
+
+    if((meta->state != SML_STATE_AUTOLOCK)||
+       (meta->autolock_count == 0))
+    {
+
+        *remain = 0;
+
+        return KAL_FALSE;
+
+    }
+
+    switch(cat)
+    {
+
+        case SML_CAT_N:
+
+            if(SML_SIZE_OF_CAT_N == len)
+            {
+
+                offset = (meta->num) * SML_SIZE_OF_CAT_N;
+
+                *remain = (length - offset) / SML_SIZE_OF_CAT_N;
+
+                result = KAL_TRUE;
+
+            }
+
+        break;
+
+        case SML_CAT_NS:
+
+            if(SML_SIZE_OF_CAT_NS == len)
+            {
+
+                offset = (meta->num) * SML_SIZE_OF_CAT_NS;
+
+                *remain = (length - offset) / SML_SIZE_OF_CAT_NS;
+
+                result = KAL_TRUE;
+
+            }
+
+        break;
+
+        case SML_CAT_SP:
+
+            if(SML_SIZE_OF_CAT_SP == len)
+            {
+
+                offset = (meta->num) * SML_SIZE_OF_CAT_SP;
+
+                *remain = (length - offset) / SML_SIZE_OF_CAT_SP;
+
+                result = KAL_TRUE;
+
+            }
+
+        break;
+
+        case SML_CAT_C:
+
+            if(SML_SIZE_OF_CAT_C == len)
+            {
+
+                offset = (meta->num) * SML_SIZE_OF_CAT_C;
+
+                *remain = (length - offset) / SML_SIZE_OF_CAT_C;
+
+                result = KAL_TRUE;
+
+            }
+
+        break;
+
+        case SML_CAT_SIM:
+
+           if(SML_SIZE_OF_CAT_SIM == len)
+           {
+
+                offset = (meta->num) * SML_SIZE_OF_CAT_SIM;
+
+                *remain = (length - offset) / SML_SIZE_OF_CAT_SIM;
+
+                result = KAL_TRUE;
+           }
+
+        break;
+
+        case SML_CAT_NS_SP:
+
+            if(SML_SIZE_OF_LINK_NS_SP == len)
+            {
+
+                offset = (meta->num) * SML_SIZE_OF_LINK_NS_SP;
+
+                *remain = (length - offset) / SML_SIZE_OF_LINK_NS_SP;
+
+                result = KAL_TRUE;
+
+            }
+
+        break;
+
+        case SML_CAT_SIM_C:
+
+            if(SML_SIZE_OF_LINK_SIM_C == len)
+            {
+
+                offset = (meta->num) * SML_SIZE_OF_LINK_SIM_C;
+
+                *remain = (length - offset) / SML_SIZE_OF_LINK_SIM_C;
+
+                result = KAL_TRUE;
+
+            }
+
+        break;
+
+        default:
+
+        break;
+
+    }
+
+    if(result == KAL_FALSE)
+    {
+
+        *remain = meta->autolock_count;
+
+        return KAL_FALSE;
+
+    }
+
+    /* Check if the space is available */
+    if(*remain > 0)
+    {
+
+        kal_mem_cpy((kal_uint8 *)(pdata+offset),
+                    code,
+                    len
+                    );
+
+        meta->num ++;
+
+        meta->autolock_count--;
+
+        if(meta->autolock_count == 0)
+        {
+
+            meta->state = SML_STATE_LOCK;
+
+            kal_sys_trace("SML: Autolock finished!");
+
+        }
+
+        *remain = meta->autolock_count;
+
+        result = KAL_TRUE;
+
+    }
+    else
+    {
+
+        kal_sys_trace("SML: Autolock fail! Clean remain count!");
+
+        meta->autolock_count = 0;
+
+        meta->state = SML_STATE_LOCK;
+
+        result = KAL_TRUE;
+
+    }
+
+    return result;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Check
+ * DESCRIPTION
+ *  This function is used to check if the code is in the Pass list
+ * PARAMETERS
+ *  IN          cat
+ *  IN          *imsi
+ *  IN          *gid1
+ *  IN          *gid2
+ *  IN          num_cnl
+ *  IN          *cnl
+ *  IN          *dck
+ *  IN          sim_mnc_len
+ *  IN          *remain
+ *  IN          source
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_Check( sml_cat_enum cat,       // category
+                    kal_uint8 *imsi,        // 9 bytes array, read from SIM, mandatory file
+                    kal_uint8 *gid1,        // 20 bytes array, read from SIM, NULL means gid1 invalid(file not exist)
+                    kal_uint8 *gid2,        // 20 bytes array, read from SIM, NULL means gid2 invalid(file not exist)
+                    kal_uint16 num_cnl,     // How many bytes of cnl, read from SIM, 0 means cnl invalid(file not exist)
+                    kal_uint8 *cnl,         // 240 bytes array, length is depend on num_cnl, read from SIM
+                    kal_uint8 *dck,         // 4 bytes array, read from SIM, NULL means dck invalid(file not exist)
+                    kal_uint8 sim_mnc_len,  // MNC length, read from SIM
+                    kal_uint32 *remain,      // remain retry count
+                    kal_uint8 source)       // 0:SIM1, 1:SIM2
+{
+
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    SML_CAT_META_STRUCT *meta = NULL;
+    kal_uint8 *pdata = NULL;
+    kal_uint8 idx = 0;
+    kal_uint16 length = 0, offset = 0;
+    kal_bool result = KAL_FALSE;
+    kal_uint8 code_len = 0;
+    kal_uint8 code[10] = {0xFF};
+    kal_uint8 size_of_cat = 0;
+
+    meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat, SML_CAT_META, &length, source);
+    pdata = (kal_uint8 *) (*p->getItem)(cat, SML_CAT_CODE, &length, source);
+
+    *remain = meta->retry_count;
+
+    if (SML_STATE_LOCK != meta->state)
+    {
+        /* ALWAYS PASSED if the category is not locked! */
+        return KAL_TRUE;
+    }
+
+    switch(cat)
+    {
+        case SML_CAT_N:
+        {
+            size_of_cat = SML_SIZE_OF_CAT_N;
+            break;
+        }
+        case SML_CAT_NS:
+        {
+            size_of_cat = SML_SIZE_OF_CAT_NS;
+            break;
+        }
+        case SML_CAT_SP:
+        {
+            size_of_cat = SML_SIZE_OF_CAT_SP;
+            break;
+        }
+        case SML_CAT_C:
+        {
+            size_of_cat = SML_SIZE_OF_CAT_C;
+            break;
+        }
+        case SML_CAT_SIM:
+        {
+            size_of_cat = SML_SIZE_OF_CAT_SIM;
+            break;
+        }
+        case SML_CAT_NS_SP:
+        {
+            size_of_cat = SML_SIZE_OF_LINK_NS_SP;
+            break;
+        }
+        case SML_CAT_SIM_C:
+        {
+            size_of_cat = SML_SIZE_OF_LINK_SIM_C;
+            break;
+        }
+        default:
+            break;
+    }
+
+    for (idx = 0; idx < meta->num; idx++)
+    {
+        offset = idx * size_of_cat;
+        code_len = sml_GetCode(cat,
+                               imsi, gid1, gid2, sim_mnc_len,
+                               (pdata+offset),
+                               code,
+                               source);
+
+        if (size_of_cat == code_len)
+        {
+            kal_uint8 len = 0;
+            kal_uint8 i = 0;
+            kal_uint8 *pdata_ptr = NULL;
+            pdata_ptr = (kal_uint8 *)(pdata+offset);
+
+            if (SML_CAT_NS == cat)
+            {
+                len = SML_SIZE_OF_CAT_NS;
+            }
+            else
+            {
+                len = SML_SIZE_OF_CAT_N;
+            }
+
+            for (i = 0; i<len; i++)
+            {
+                if ((pdata_ptr[i] & 0x0F) == 0x0F)
+                {
+                    code[i] = code[i] | 0x0F;
+                }
+
+                if ((pdata_ptr[i] & 0xF0) == 0xF0)
+                {
+                    code[i] = code[i] | 0xF0;
+                }
+            }
+
+            if (kal_mem_cmp(code, (pdata+offset), code_len)==0)
+            {
+                result = KAL_TRUE;
+                break;
+            }
+        }
+    }
+
+    return result;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Catcode
+ * DESCRIPTION
+ *  This function is used to compose the code of each category
+ * PARAMETERS
+ *  IN          cat
+ *  IN          *imsi
+ *  IN          *gid1
+ *  IN          *gid2
+ *  IN          mnc_len
+ *  OUT          *code
+ *  IN          source
+ * RETURN
+ *  kal_uint8   code length
+ * GLOBALS AFFECTED
+ *  NONE
+ *******************************************************************************/
+kal_uint8 sml_Catcode( sml_cat_enum cat,
+                       kal_uint8 *imsi,
+                       kal_uint8 *gid1,
+                       kal_uint8 *gid2,
+                       kal_uint8 mnc_len,
+                       kal_uint8 *code,
+                       kal_uint8 source )
+{
+
+    if(mnc_len == 3)
+    {
+        code[0] = (imsi[1] & 0xF0) | (imsi[2] & 0x0F);
+        code[1] = (imsi[2] & 0xF0) | (imsi[3] & 0x0F);
+        code[2] = (imsi[3] & 0xF0) | (imsi[4] & 0x0F);
+        code[3] = (imsi[4] & 0xF0) | (imsi[5] & 0x0F);
+    }
+    else
+    {
+        code[0] = (imsi[1] & 0xF0) | (imsi[2] & 0x0F);
+        code[1] = (imsi[2] & 0xF0) | (imsi[3] & 0x0F);
+        code[2] = (imsi[3] & 0xF0) | 0x0F;
+        code[3] = ((imsi[4] & 0x0F) << 4) | ((imsi[4] & 0xF0) >> 4);
+    }
+
+    switch(cat)
+    {
+
+        case SML_CAT_N:
+
+            return SML_SIZE_OF_CAT_N;
+
+        break;
+
+        case SML_CAT_NS:
+
+            return SML_SIZE_OF_CAT_NS;
+
+        break;
+
+        case SML_CAT_SP:
+
+            if(gid1)
+            {
+                code[3] = gid1[0];
+
+                return SML_SIZE_OF_CAT_SP;
+
+            }
+
+        break;
+
+        case SML_CAT_C:
+
+            if (gid1 && gid2 )
+            {
+                code[3] = gid1[0];
+                code[4] = gid2[0];
+
+                return SML_SIZE_OF_CAT_C;
+            }
+
+        break;
+
+        case SML_CAT_SIM:
+
+            kal_mem_cpy(code,&(imsi[1]),8);
+
+            return SML_SIZE_OF_CAT_SIM;
+
+        break;
+
+        case SML_CAT_NS_SP:
+
+            if(gid1)
+            {
+
+                code[4] = gid1[0];
+
+                return SML_SIZE_OF_LINK_NS_SP;
+
+            }
+
+        break;
+
+        case SML_CAT_SIM_C:
+
+            kal_mem_cpy(code,&(imsi[1]),8);
+
+            if(gid1 && gid2)
+            {
+
+                code[8] = gid1[0];
+
+                code[9] = gid2[0];
+
+                return SML_SIZE_OF_LINK_SIM_C;
+
+            }
+
+        break;
+
+        default:
+
+        break;
+
+    }
+
+    return 0;
+
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_GetCode
+ * DESCRIPTION
+ *  This function is used to compose the code of each category  whether
+ *  mnc length is 2 or 3
+ * PARAMETERS
+ *  cat         [IN]    category of the SIM-ME-Lock
+ *  imsi        [IN]    imsi of the code source
+ *  gid1        [IN]    gid1 of the code source
+ *  gid2        [IN]    gid2 of the code source
+ *  sim_mnc_len [IN]    the mnc length decided by SIM
+ *  pdata       [IN]    the saved code for comparing
+ *  code        [OUT]   the composed code according to all input parameters
+ *  source      [IN]
+ *
+ * RETURN
+ *  kal_uint16 file size
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_uint8 sml_GetCode( sml_cat_enum cat,
+                       kal_uint8 * imsi,
+                       kal_uint8 * gid1,
+                       kal_uint8 * gid2,
+                       kal_uint8 sim_mnc_len,
+                       kal_uint8 * pdata,
+                       kal_uint8 * code,
+                       kal_uint8 source)
+{
+    kal_uint8 mnc_len=0;
+
+    if (SML_MNC_LENGTH_NEST == 1)     //Get mnc length from SIM
+    {
+        if ((sim_mnc_len == 2) || (sim_mnc_len == 3))
+        {
+           mnc_len = sim_mnc_len;
+        }
+        else // error handling for EFAD not existng
+        {
+            if (((*(pdata+2)) & 0x0F) == 0x0F)
+            {
+                mnc_len = 2;
+            }
+            else
+            {
+                mnc_len = 3;
+            }
+        }
+    }
+    else
+    {
+        if (((*(pdata+2)) & 0x0F) == 0x0F)
+        {
+            mnc_len = 2;
+        }
+        else
+        {
+            mnc_len = 3;
+        }
+    }
+    return sml_Catcode(cat, imsi, gid1, gid2, mnc_len, code, source);
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Process_autolock
+ * DESCRIPTION
+ *  This function is used process autolock function
+ * PARAMETERS
+ *  IN          cat
+ *  OUT         *state
+ *  OUT         *retry_count
+ *  OUT         *num_of_sets
+ *  OUT         *space_of_sets
+ *  OUT         *key_state
+ *  OUT         *auto_lock_count
+ * RETURN
+ *  kal_bool    result
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_Process_autolock( kal_uint8 * imsi,
+                               kal_uint8 * gid1,
+                               kal_uint8 * gid2,
+                               kal_uint8 num_mnc,
+                               kal_uint8 * remain_count,
+                               kal_uint8 source)
+{
+
+    kal_bool result = KAL_FALSE;
+
+    sml_cat_enum cat = SML_CAT_N;
+
+    kal_uint8 code[10] = {0xFF}, len = 0, count = 0;
+
+    kal_mem_set( (kal_uint8 *) &(code[0]), 0xFF, 10);
+
+    *remain_count = 0;
+
+    for(cat = SML_CAT_N; cat < SML_CAT_SIZE; cat++)
+    {
+        /* Because this is ADD operation, there is no code in NVRAM for sml_GetCode to refer mnc length.
+           This function just uses num_mnc from SIM to construct the code
+        */
+        len = sml_Catcode( cat,
+                           imsi,
+                           gid1,
+                           gid2,
+                           num_mnc,
+                           code,
+                           source );
+
+        if(KAL_TRUE == sml_Autolock( cat,
+                                     code,
+                                     len,
+                                     &count,
+                                     source
+                                     ))
+        {
+
+            result = KAL_TRUE;
+
+        }
+
+        if(count > *remain_count)
+        {
+
+            *remain_count = count;
+
+        }
+
+    }
+
+    return result;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Is_autolock
+ * DESCRIPTION
+ *  This function is used to query if there is autolock shall be processed
+ * PARAMETERS
+ *  void
+ * RETURN
+ *  kal_uint8    result
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_Is_autolock(kal_uint8 source)
+{
+
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+
+    SML_CAT_META_STRUCT *meta = NULL;
+
+    sml_cat_enum cat = SML_CAT_N;
+
+    kal_uint16 length = 0;
+
+    kal_bool result = KAL_FALSE;
+
+    for(cat = SML_CAT_N; cat < SML_CAT_SIZE; cat++)
+    {
+        meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat,
+                                                          SML_CAT_META,
+                                                          &length,
+                                                          source);
+
+        if(meta->state == SML_STATE_AUTOLOCK)
+        {
+            result = KAL_TRUE;
+            break;
+        }
+    }
+
+    return result;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Verify
+ * DESCRIPTION
+ *  This function is used to verify the SML lock keys
+ * PARAMETERS
+ *  void
+ * RETURN
+ *  kal_bool    result
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_Verify( sml_cat_enum cat,
+                      kal_uint8 * key,
+                      kal_uint8 len,
+                      kal_uint32 * retry_count,
+                      kal_uint8 source)
+{
+
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+
+    SML_CAT_META_STRUCT *meta = NULL;
+
+    SML_CTRL_KEY_STRUCT *catkey = NULL;
+
+    kal_bool result = KAL_FALSE;
+
+    kal_uint16 length = 0;
+
+    kal_uint32 max_retry_count;
+
+    meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat,SML_CAT_META,&length, source);
+    catkey = (SML_CTRL_KEY_STRUCT *) (*p->getItem)(cat,SML_CAT_KEY,&length, source);
+
+    if (sbp_query_md_feature_by_ps(SBP_ENABLE_SML_MAX_RETRY_COUNT, source) == KAL_TRUE)
+    {
+        nvram_ef_sml_obj_struct *pMRC = &pSMLMRCg[source];
+        kal_uint8 *mrc_ptr;
+
+        mrc_ptr = (kal_uint8 *)(*pMRC->getItem)(cat, SML_CAT_MAX_RETRY_COUNT, &length, source);
+
+        max_retry_count = *mrc_ptr;
+    }
+    else
+    {
+        max_retry_count = meta->max_retry_count;
+    }
+
+    result = sml_catkey_verify(SML_OP_VERIFY, catkey, key, len, source);
+
+    if (KAL_TRUE == result)
+    {
+        meta->retry_count = sml_GetDefaultRetryCount(cat, max_retry_count);
+
+        if (KAL_TRUE == custom_sml_cat_verify_pass_permanent_unlock())
+        {
+            meta->state = SML_STATE_UNLOCK;
+        }
+    }
+    else
+    {
+        if (max_retry_count != 0)
+        {
+            meta->retry_count--;
+        }
+    }
+
+    *retry_count = meta->retry_count;
+
+    return result;
+
+}
+
+/* END: PH sml_context_struct (NVRAM_EF_SML_LID) */
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Testsim_op_mode
+ * DESCRIPTION
+ *  This function is used to query the testsim handling rule
+ * PARAMETERS
+ *  void
+ * RETURN
+ *  SML_TESTSIM_ALW_REJECT  0
+ *  SML_TESTSIM_ALW_ALLOW   1
+ *  SML_TESTSIM_INI_ALLOW   2
+ * GLOBALS AFFECTED
+ *  NONE
+ *******************************************************************************/
+kal_uint8 sml_Testsim_op_mode(void)
+{
+
+    return SML_TESTSIM_OP_MODE;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_is_Masterkey_enable
+ * DESCRIPTION
+ *  This function is used to query the Masterkey handling rule
+ * PARAMETERS
+ *  void
+ * RETURN
+ * kal_bool
+ * GLOBALS AFFECTED
+ *  NONE
+ *******************************************************************************/
+
+kal_bool sml_is_Masterkey_enable(void)
+{
+
+    return SML_MASTER_KEY_ENABLE;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_Verify_OTA
+ * DESCRIPTION
+ *  This function is used to process OTA
+ * PARAMETERS
+ *  void
+ * RETURN
+ *  kal_bool    result
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_Verify_OTA( sml_cat_enum cat,
+                          kal_uint8 * key,
+                          kal_uint8 len,
+                          kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+
+    SML_CAT_META_STRUCT *meta = NULL;
+
+    SML_CTRL_KEY_STRUCT *catkey = NULL;
+
+    kal_bool result = KAL_FALSE;
+
+    kal_uint16 length = 0;
+
+    kal_uint32 max_retry_count;
+
+    meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat,SML_CAT_META,&length, source);
+    catkey = (SML_CTRL_KEY_STRUCT *) (*p->getItem)(cat,SML_CAT_KEY,&length, source);
+
+    if (meta->retry_count == 0)
+        return KAL_FALSE;
+
+    if (sbp_query_md_feature_by_ps(SBP_ENABLE_SML_MAX_RETRY_COUNT, source) == KAL_TRUE)
+    {
+        nvram_ef_sml_obj_struct *pMRC = &pSMLMRCg[source];
+        kal_uint8 *mrc_ptr;
+
+        mrc_ptr = (kal_uint8 *)(*pMRC->getItem)(cat, SML_CAT_MAX_RETRY_COUNT, &length, source);
+
+        max_retry_count = *mrc_ptr;
+    }
+    else
+    {
+        max_retry_count = meta->max_retry_count;
+    }
+
+    result = sml_catkey_verify(SML_OP_VERIFY, catkey, key, len, source);
+
+    if(result == KAL_TRUE)
+    {
+        if(SML_STATE_LOCK == meta->state)
+        {
+            meta->state = SML_STATE_UNLOCK;
+        }
+
+        meta->retry_count = sml_GetDefaultRetryCount(cat, max_retry_count);
+    }
+    else
+    {
+
+        result = KAL_FALSE;
+
+    }
+
+    return result;
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_CheckVisa
+ * DESCRIPTION
+ *  This function is used to handle special Block SIM cards
+ * PARAMETERS
+ *  IN          *imsi
+ *  IN          mnc_len
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  NONE
+ *******************************************************************************/
+kal_bool sml_CheckVisa(const kal_uint8 * imsi, kal_uint8 mnc_len)
+{
+
+    const kal_uint8 *  code_ptr = &(smlVISA[0]);
+
+    kal_uint8 code[3] = {0};
+
+
+    code[0] = (imsi[1] & 0xF0) | (imsi[2] & 0x0F);
+
+    code[1] = (imsi[2] & 0xF0) | (imsi[3] & 0x0F);
+
+    if(3 == mnc_len)
+    {
+
+        code[2] = (imsi[3] & 0xF0) | (imsi[4] & 0x0F);
+
+    }
+    else
+    {
+
+        code[2] = (imsi[3] & 0xF0) | 0x0F;
+
+    }
+
+    while(0xFF != *code_ptr) /* Break if first byte is 0xFF */
+    {
+
+        if(0==kal_mem_cmp(code_ptr,code,3))
+        {
+
+            return KAL_TRUE;
+
+        }
+
+        code_ptr += 3;
+
+    }
+
+    return KAL_FALSE;
+
+
+}
+
+
+/*[MAUI_01634719] mtk01612: common API to query state*/
+kal_uint8 sml_query_state( sml_cat_enum cat, kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = pSMLg;
+
+    SML_CAT_META_STRUCT *meta = NULL;
+
+//    sml_control_key_struct *catkey = NULL;
+
+    kal_uint16 length = 0;
+
+    meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat,SML_CAT_META,&length, source);
+//    catkey = (sml_control_key_struct *) (*p->getItem)(cat,SML_CAT_KEY,&length, source);
+
+    return meta->state;
+}
+
+#ifdef __CHANGE_SML_KEY__
+extern kal_bool sml_ChangePW(sml_cat_enum cat,
+                             kal_uint32 * lock_count,
+                             kal_uint8 *key1,
+                             kal_uint8 *key2,
+                             kal_uint8 len,
+                             kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    SML_CAT_META_STRUCT * meta = NULL;
+    SML_CTRL_KEY_STRUCT * catkey = NULL;
+    kal_uint8 * pdata = NULL;
+    kal_uint16 length = 0;
+    kal_bool result = KAL_FALSE;
+    kal_uint32 max_retry_count;
+
+    meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat,SML_CAT_META,&length, source);
+    catkey = (SML_CTRL_KEY_STRUCT *) (*p->getItem)(cat,SML_CAT_KEY,&length, source);
+
+    if (sbp_query_md_feature_by_ps(SBP_ENABLE_SML_MAX_RETRY_COUNT, source) == KAL_TRUE)
+    {
+        nvram_ef_sml_obj_struct *pMRC = &pSMLMRCg[source];
+        kal_uint8 *mrc_ptr;
+
+        mrc_ptr = (kal_uint8 *)(*pMRC->getItem)(cat, SML_CAT_MAX_RETRY_COUNT, &length, source);
+
+        max_retry_count = *mrc_ptr;
+    }
+    else
+    {
+        max_retry_count = meta->max_retry_count;
+    }
+
+    if(meta->retry_count>0 && SML_KEY_SET==catkey->state && SML_STATE_UNLOCK ==meta->state)
+    {
+        result = sml_catkey_verify(SML_OP_CHANGE_PWD, catkey, key1, len, source);
+
+        if(result == KAL_FALSE)
+        {
+            if (max_retry_count != 0)
+            {
+                meta->retry_count--;
+            }
+        }
+        else
+        {
+            kal_mem_cpy(catkey->key,key2,len);//change key
+
+            meta->retry_count = sml_GetDefaultRetryCount(cat, max_retry_count);
+        }
+    }
+
+    *lock_count  = meta->retry_count;
+    return result;
+}
+#endif
+
+extern kal_uint16 sml_tmo_getSize()
+{
+    return SML_TMO_MAX_SLB_SIZE;
+}
+
+extern kal_uint16 sml_att_getSize()
+{
+    return SML_ATT_MAX_SLB_SIZE;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  smu_is_write_protect2
+ * DESCRIPTION
+ *  This is a callback function for NVRAM to check whether write protect2 or not
+ *  The custom_smu_is_write_protect2 retrun true only for files owned by SMU module
+ * PARAMETERS
+ *  nvram_lid_enum file_idx
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  NONE
+ *******************************************************************************/
+kal_bool smu_is_write_protect2(nvram_lid_enum file_idx)
+{
+    //Add more condition here
+    return custom_smu_is_write_protect2(file_idx);
+}
+/*******************************************************************************
+ * FUNCTION
+ *  sml_mrc_give
+ * DESCRIPTION
+ *  This method copys the LID files read from NVRAM to the SML_MRC_OBJ
+ * PARAMETERS
+ *  IN          * pLidToObj
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SML_MRC_OBJ
+*******************************************************************************/
+static void sml_mrc_give(void *pLidToObj, kal_uint8 source)
+{
+    sml_max_retry_count_struct * pObj = NULL;
+
+    if(NULL != pSMLMRCg[source].pObj)
+    {
+        pSMLMRCg[source].pObj = NULL;
+    }
+
+    pObj = &(sml_mrc_cntxt_obj[source]);
+
+    kal_mem_cpy(pObj,
+                pLidToObj,
+                sizeof(sml_max_retry_count_struct)
+                );
+
+    pSMLMRCg[source].pObj = pObj;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_mrc_take
+ * DESCRIPTION
+ *  This method copys the context of the SML_MRC_OBJ to the provided NVRAM LID.
+ * PARAMETERS
+ *  OUT         * pObjToLid
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SML_MRC_OBJ
+ *******************************************************************************/
+static void sml_mrc_take(void *pObjToLid, kal_uint8 source)
+{
+    sml_max_retry_count_struct * pObj = (sml_max_retry_count_struct *) pSMLMRCg[source].pObj;
+
+    kal_mem_cpy(pObjToLid,
+                pObj,
+                sizeof(sml_max_retry_count_struct)
+                );
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_mrc_destory
+ * DESCRIPTION
+ *  This method free the SML_MRC_OBJ in memory if it is not used.
+ * PARAMETERS
+ *  void
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SML_MRC_OBJ
+ *******************************************************************************/
+static void sml_mrc_destory(kal_uint8 source)
+{
+    pSMLMRCg[source].pObj = NULL;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_mrc_getItem
+ * DESCRIPTION
+ *  This method returns the structure pointer and length of the structure
+ *  of the desired SML_MRC_OBJ items.
+ * PARAMETERS
+ *  IN          cat
+ *  IN          item
+ *  OUT         *length
+ * RETURN
+ *  void *
+ * GLOBALS AFFECTED
+ *  SML_MRC_OBJ
+ *******************************************************************************/
+static void * sml_mrc_getItem(sml_cat_enum category,
+                           sml_ctx_enum item,
+                           kal_uint16 *plength,
+                           kal_uint8 source)
+{
+    sml_max_retry_count_struct *pObj = (sml_max_retry_count_struct *) pSMLMRCg[source].pObj;
+
+    ASSERT(NULL != pObj);
+
+    switch(item)
+    {
+        case SML_CAT_MAX_RETRY_COUNT:
+            *plength = sizeof(kal_uint8);
+            return (kal_uint8 *) &(pObj->max_retry_count[category]);
+
+        default:
+            break;
+    }
+
+    return NULL;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_mrc_putItem
+ * DESCRIPTION
+ *  This method set the desired items of the SML_MRC_OBJ
+ * PARAMETERS
+ *  IN          cat
+ *  IN          item
+ *  IN          *pItem
+ *  IN          *plength
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SML_MRC_OBJ
+ *******************************************************************************/
+static void sml_mrc_putItem(sml_cat_enum cat,
+                         sml_ctx_enum item,
+                         void *pItem,
+                         kal_uint16 *plength,
+                         kal_uint8 source)
+{
+    sml_max_retry_count_struct *pObj = (sml_max_retry_count_struct *) pSMLMRCg[source].pObj;
+
+    ASSERT(NULL != pObj);
+
+    switch(item)
+    {
+        case SML_CAT_MAX_RETRY_COUNT:
+            kal_mem_cpy(&(pObj->max_retry_count[cat]),
+                        pItem,
+                        *plength);
+            break;
+
+        default:
+            break;
+    }
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_mrc_Save
+ * DESCRIPTION
+ *  This function saves the SML obj to NVRAM LID (NVRAM_WRITE_REQ)
+ * PARAMETERS
+ *  OUT          pLid
+ * RETURN
+ *  kal_uint16  Obj size
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_uint16 sml_mrc_Save(void *pLid, kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLMRCg[source];
+
+    kal_uint16 length = sizeof(nvram_sml_max_retry_count_struct);
+
+    (*p->take)(pLid, source);
+
+    return length;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_get_lock_codes
+ * DESCRIPTION
+ *  This function is used to retrieve SIM-ME lock codes for all categories
+ * PARAMETERS
+ *  OUT         *num_of_sets
+ *  OUT         *code_cat_n
+ *  OUT         *code_cat_ns
+ *  OUT         *code_cat_sp
+ *  OUT         *code_cat_c
+ *  OUT         *code_cat_sim
+ *  OUT         *code_cat_ns_sp
+ *  OUT         *code_cat_sim_c
+ *  IN            source
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  None
+ *******************************************************************************/
+void sml_get_lock_codes(kal_uint8 * num_of_sets,
+                        kal_uint8 * code_cat_n,
+                        kal_uint8 * code_cat_ns,
+                        kal_uint8 * code_cat_sp,
+                        kal_uint8 * code_cat_c,
+                        kal_uint8 * code_cat_sim,
+                        kal_uint8 * code_cat_ns_sp,
+                        kal_uint8 * code_cat_sim_c,
+                        kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    SML_CAT_META_STRUCT *meta = NULL;
+    kal_uint8 *pdata = NULL;
+    kal_uint16 length = 0;
+    sml_cat_enum cat = SML_CAT_N;
+
+    for (cat = SML_CAT_N; cat < SML_CAT_SIZE; cat++)
+    {
+        meta = (SML_CAT_META_STRUCT *) (*p->getItem)(cat,SML_CAT_META,&length, source);
+        pdata = (kal_uint8 *) (*p->getItem)(cat,SML_CAT_CODE,&length, source);
+
+        num_of_sets[cat] = meta->num;
+
+        switch (cat)
+        {
+            case SML_CAT_N:
+                kal_mem_cpy(code_cat_n, pdata, length);
+                break;
+
+            case SML_CAT_NS:
+                kal_mem_cpy(code_cat_ns, pdata, length);
+                break;
+
+            case SML_CAT_SP:
+                kal_mem_cpy(code_cat_sp, pdata, length);
+                break;
+
+            case SML_CAT_C:
+                kal_mem_cpy(code_cat_c, pdata, length);
+                break;
+
+            case SML_CAT_SIM:
+                kal_mem_cpy(code_cat_sim, pdata, length);
+                break;
+
+            case SML_CAT_NS_SP:
+                kal_mem_cpy(code_cat_ns_sp, pdata, length);
+                break;
+
+            case SML_CAT_SIM_C:
+                kal_mem_cpy(code_cat_sim_c, pdata, length);
+                break;
+
+            default:
+                break;
+        }
+    }
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_sl_give
+ * DESCRIPTION
+ *  This method copys the LID files read from NVRAM to the SML obj
+ * PARAMETERS
+ *  IN          * pLidToObj
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+*******************************************************************************/
+static void sml_sl_give( void *pLidToObj, kal_uint8 source )
+{
+    sml_sl_blob_context_struct * pObj = NULL;
+
+    if(NULL != pSMLg[source].pObj)
+    {
+        kal_sys_trace("SML: object is exist!");
+        pSMLg[source].pObj = NULL;
+    }
+
+    pObj = &(sml_sl_cntxt_obj[source]);
+
+    kal_mem_cpy(pObj,
+                pLidToObj,
+                sizeof(sml_sl_blob_context_struct)
+                );
+
+    pSMLg[source].pObj = pObj;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_sl_take
+ * DESCRIPTION
+ *  This method copys the contex of the SML object to the provided NVRAM LID.
+ * PARAMETERS
+ *  OUT         * pObjToLid
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void sml_sl_take( void *pObjToLid, kal_uint8 source )
+{
+    sml_sl_blob_context_struct * pObj = (sml_sl_blob_context_struct *) pSMLg[source].pObj;
+
+    kal_mem_cpy(pObjToLid,
+                pObj,
+                sizeof(sml_sl_blob_context_struct)
+                );
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_sl_destory
+ * DESCRIPTION
+ *  This method free the SML object in memory if it is not used.
+ * PARAMETERS
+ *  void
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void sml_sl_destory(kal_uint8 source)
+{
+    pSMLg[source].pObj = NULL;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_sl_getItem
+ * DESCRIPTION
+ *  This method returns the structure pointer and length of the structure
+ *  of the desired SML object items.
+ * PARAMETERS
+ *  IN          cat
+ *  IN          item
+ *  OUT         *length
+ * RETURN
+ *  void *
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void * sml_sl_getItem( sml_cat_enum category,
+                           sml_ctx_enum item,
+                           kal_uint16 *plength,
+                           kal_uint8 source)
+{
+    sml_sl_blob_context_struct *pObj = (sml_sl_blob_context_struct *) pSMLg[source].pObj;
+
+    ASSERT(NULL != pObj);
+
+    switch(item)
+    {
+        case SML_SL_CAT_MAJOR_VERSION:
+            *plength = sizeof(kal_uint8);
+            return (kal_uint8 *) &(pObj->major_version);
+
+        case SML_SL_CAT_MINOR_VERSION:
+            *plength = sizeof(kal_uint8);
+            return (kal_uint8 *) &(pObj->minor_version);
+
+        case SML_SL_CAT_PROTECTION_ALGORITHM:
+            *plength = sizeof(kal_uint8);
+            return (kal_uint8 *) &(pObj->protection_algorithm);
+
+        case SML_SL_CAT_LOCK_OPERATION:
+            *plength = sizeof(kal_uint8);
+            return (kal_uint8 *) &(pObj->lock_operation);
+
+        case SML_SL_CAT_IMEI:
+            *plength = SML_SL_BLOB_IMEI_SIZE;
+            return (kal_uint8 *) &(pObj->imei[0]);
+
+        case SML_SL_CAT_TIME_STAMP:
+            *plength = SML_SL_BLOB_TIME_STAMP_SIZE;
+            return (kal_uint8 *) &(pObj->time_stamp[0]);
+
+        case SML_SL_CAT_LENGTH:
+            *plength = SML_SL_BLOB_LENGTH_SIZE;
+            return (kal_uint16 *) &(pObj->length[0]);
+
+        case SML_SL_CAT_META:
+            *plength = sizeof(sml_sl_blob_meta_struct);
+            return (sml_sl_blob_meta_struct *) &(pObj->cat[category]);
+
+        case SML_SL_CAT_KEY:
+            *plength = sizeof(sml_sl_blob_key_struct);
+            return (sml_sl_blob_key_struct *) &(pObj->key[category]);
+
+        case SML_SL_CAT_SIGNATURE:
+            *plength = SML_SL_BLOB_SIZE_OF_SIGNATURE;
+            return (kal_uint8 *) &(pObj->signature[0]);
+
+        case SML_SL_CAT_CODE:
+            switch(category)
+            {
+                case SML_CAT_N:
+                    *plength = SML_SL_BLOB_CAT_N_SIZE;
+                    return (kal_uint8 *) &(pObj->code_cat_n[0]);
+                    break;
+
+                case SML_CAT_NS:
+                    *plength = SML_SL_BLOB_CAT_NS_SIZE;
+                    return (kal_uint8 *) &(pObj->code_cat_ns[0]);
+                    break;
+
+                case SML_CAT_SP:
+                    *plength = SML_SL_BLOB_CAT_SP_SIZE;
+                    return (kal_uint8 *) &(pObj->code_cat_sp[0]);
+                    break;
+
+                default:
+                    /* do nothing */
+                    break;
+            }
+
+        default:
+            break;
+    }
+
+    return NULL;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_sl_putItem
+ * DESCRIPTION
+ *  This method set the desired items of the SML object.
+ * PARAMETERS
+ *  IN          cat
+ *  IN          item
+ *  IN          *pItem
+ *  IN          *plength
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+static void sml_sl_putItem( sml_cat_enum cat,
+                         sml_ctx_enum item,
+                         void *pItem,
+                         kal_uint16 *plength,
+                         kal_uint8 source)
+{
+    sml_sl_blob_context_struct *pObj = (sml_sl_blob_context_struct *) pSMLg[source].pObj;
+
+    ASSERT(NULL != pObj);
+
+    switch(item)
+    {
+        case SML_SL_CAT_LOCK_OPERATION:
+            kal_mem_cpy(&(pObj->lock_operation),
+                        pItem,
+                        *plength);
+            break;
+
+        default:
+            break;
+    }
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_sl_Save
+ * DESCRIPTION
+ *  This function saves the SML obj to NVRAM LID (NVRAM_WRITE_REQ)
+ * PARAMETERS
+ *  OUT          pLid
+ * RETURN
+ *  kal_uint16  Obj size
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_uint16 sml_sl_Save(void *pLid, kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+
+    kal_uint16 length = sizeof(sml_sl_blob_context_struct);
+
+    (*p->take)(pLid, source);
+
+    return length;
+}
+
+extern kal_uint16 sml_sl_getBlobSize()
+{
+    return SML_SL_MAX_BLOB_SIZE;
+}
+
+extern kal_bool sml_sl_ValidateIMEI(kal_uint8 *imei, kal_uint8 source)
+{
+    kal_uint8 imei_bcd[8+1];
+    kal_uint8 imei_ascii[16+1];
+
+#ifndef UNIT_TEST
+    if (nvram_get_imei_value(8, imei_bcd, (1 + source)) == KAL_TRUE)
+    {
+        imei_bcd[8] = 0xff; // terminating char for convert_to_digit
+        convert_to_digit((kal_uint8 *)imei_bcd, imei_ascii);
+        if(kal_mem_cmp(imei,imei_ascii, SML_SL_BLOB_IMEI_SIZE) == 0)
+        {
+            return KAL_TRUE;
+        }
+    }
+
+    return KAL_FALSE;
+#else
+    return KAL_TRUE;
+#endif /* UNIT_TEST */
+}
+
+extern kal_bool sml_sl_ValidateTimeStamp(kal_uint8 *new_time_stamp, kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint16 length = 0;
+    kal_uint8  *blob_time_stamp;
+    kal_uint64 new_time = 0;
+    kal_uint64 blob_time = 0;
+    kal_uint8 i = 0;
+
+    blob_time_stamp = (kal_uint8 *)(*p->getItem)(0, SML_SL_CAT_TIME_STAMP, &length, source);
+
+    for (i = 0; i < SML_SL_BLOB_TIME_STAMP_SIZE-1; i++)
+    {
+        blob_time += blob_time_stamp[i];
+        blob_time = (blob_time << 8);
+
+        new_time += new_time_stamp[i];
+        new_time = (new_time << 8);
+    }
+
+    blob_time += blob_time_stamp[SML_SL_BLOB_TIME_STAMP_SIZE-1];
+    new_time += new_time_stamp[SML_SL_BLOB_TIME_STAMP_SIZE-1];
+
+    if (new_time > blob_time)
+    {
+        return KAL_TRUE;
+    }
+
+    return KAL_FALSE;
+}
+
+extern kal_bool sml_sl_ValidateConfigData(sml_sl_blob_context_struct *pBlob)
+{
+    kal_uint16 i,j=0;
+    kal_uint16 length = 0;
+    kal_uint8 *data = NULL;
+
+    for (i = SML_CAT_N ; i <= SML_CAT_SP ; i++)
+    {
+        switch (i)
+        {
+            case SML_CAT_N:
+                length = pBlob->cat[i].num * SML_SL_BLOB_SIZE_OF_CAT_N;
+                data = pBlob->code_cat_n;
+                break;
+
+            case SML_CAT_NS:
+                length = pBlob->cat[i].num * SML_SL_BLOB_SIZE_OF_CAT_NS;
+                data = pBlob->code_cat_ns;
+                break;
+
+            case SML_CAT_SP:
+                length = pBlob->cat[i].num * SML_SL_BLOB_SIZE_OF_CAT_SP;
+                data = pBlob->code_cat_sp;
+                break;
+        }
+
+        for (j=0; j<length; j++)
+        {
+            if (!((data[j] >= RMMI_CHAR_0) && (data[j] <= RMMI_CHAR_9)) && (data[j] != RMMI_CHAR_F))
+            {
+                return KAL_FALSE;
+            }
+        }
+    }
+
+    return KAL_TRUE;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_sl_ConstructBlob
+ * DESCRIPTION
+ *  This function construct full size Bolb from a variant length Blob
+ * PARAMETERS
+ *  IN          *pObj
+ *  OUT       pLen
+ * RETURN
+ *  kal_uint8 * construct data
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+extern kal_uint8 *sml_sl_ConstructBlob(kal_uint8 *pObj, kal_uint16 slb_len, kal_uint16 *error_cause, kal_uint8 source)
+{
+    kal_uint16 sizeM, sizeN, sizeP;
+    kal_uint16 length = 0;
+    kal_uint16 idx;
+    sml_sl_blob_context_struct *pBlob;
+    kal_uint8 i = 0;
+
+    pBlob = (sml_sl_blob_context_struct *)get_ctrl_buffer(SML_SL_MAX_BLOB_SIZE);
+    kal_mem_set(pBlob, 0, SML_SL_MAX_BLOB_SIZE);
+
+    /* major_version + minor_version + protection_algorithm + lock_operation */
+    length = 1 + 1 + 1 + 1;
+    kal_mem_cpy(pBlob, &(pObj[0]), length);
+
+    /* imei */
+    kal_mem_cpy(pBlob->imei, &(pObj[length]), SML_SL_BLOB_IMEI_SIZE);
+    length += SML_SL_BLOB_IMEI_SIZE;
+
+    /* time stamp */
+    kal_mem_cpy(pBlob->time_stamp, &(pObj[length]), SML_SL_BLOB_TIME_STAMP_SIZE);
+    length += SML_SL_BLOB_TIME_STAMP_SIZE;
+
+    /* length */
+    kal_mem_cpy(pBlob->length, &(pObj[length]), SML_SL_BLOB_LENGTH_SIZE);
+    length += SML_SL_BLOB_LENGTH_SIZE;
+
+    if (pBlob->protection_algorithm > 1)
+    {
+        *error_cause = RMMI_ERR_SL_BLOB_VALIDATION_FAILED;
+        free_ctrl_buffer(pBlob);
+        return NULL;
+    }
+
+    if (sml_sl_ValidateIMEI(pBlob->imei, source) == KAL_FALSE)
+    {
+        *error_cause = RMMI_ERR_SL_BLOB_IMEI_MISMATCH;
+        free_ctrl_buffer(pBlob);
+        return NULL;
+    }
+
+    if (sml_sl_ValidateTimeStamp(pBlob->time_stamp, source) == KAL_FALSE)
+    {
+        *error_cause = RMMI_ERR_SL_BLOB_VALIDATION_FAILED;
+        free_ctrl_buffer(pBlob);
+        return NULL;
+    }
+
+    idx = length;
+
+    for (i = SML_CAT_N ; i <= SML_CAT_SP ; i++)
+    {
+        pBlob->cat[i].change_flag = pObj[idx++];
+
+        /* iteration_count, salt, hck */
+        kal_mem_cpy(pBlob->key[i].iteration_count, &(pObj[idx]), SML_SL_BLOB_ITERATION_COUNT_SIZE);
+        idx += SML_SL_BLOB_ITERATION_COUNT_SIZE;
+
+        kal_mem_cpy(pBlob->key[i].salt, &(pObj[idx]), SML_SL_BLOB_SALT_SIZE);
+        idx += SML_SL_BLOB_SALT_SIZE;
+
+        kal_mem_cpy(pBlob->key[i].hck, &(pObj[idx]), SML_SL_BLOB_HCK_SIZE);
+        idx += SML_SL_BLOB_HCK_SIZE;
+
+        /* check m,n,p */
+        if (pObj[idx] > 0)
+        {
+            switch (i)
+            {
+                case SML_CAT_N:
+                    sizeM = pObj[idx] * SML_SL_BLOB_SIZE_OF_CAT_N;
+                    if (sizeM > SML_SL_BLOB_CAT_N_SIZE)
+                    {
+                        *error_cause = RMMI_ERR_SL_BLOB_LENGTH_MISMATCH;
+                        free_ctrl_buffer(pBlob);
+                        return NULL;
+                    }
+
+                    pBlob->cat[i].num = pObj[idx++];
+                    kal_mem_cpy(pBlob->code_cat_n, &(pObj[idx]), sizeM);
+                    idx += sizeM;
+                    break;
+
+                case SML_CAT_NS:
+                    sizeN = pObj[idx] * SML_SL_BLOB_SIZE_OF_CAT_NS;
+                    if (sizeN > SML_SL_BLOB_CAT_NS_SIZE)
+                    {
+                        *error_cause = RMMI_ERR_SL_BLOB_LENGTH_MISMATCH;
+                        free_ctrl_buffer(pBlob);
+                        return NULL;
+                    }
+
+                    pBlob->cat[i].num = pObj[idx++];
+                    kal_mem_cpy(pBlob->code_cat_ns, &(pObj[idx]), sizeN);
+                    idx += sizeN;
+                    break;
+
+                case SML_CAT_SP:
+                    sizeP = pObj[idx] * SML_SL_BLOB_SIZE_OF_CAT_SP;
+                    if (sizeP > SML_SL_BLOB_CAT_SP_SIZE)
+                    {
+                        *error_cause = RMMI_ERR_SL_BLOB_LENGTH_MISMATCH;
+                        free_ctrl_buffer(pBlob);
+                        return NULL;
+                    }
+
+                    pBlob->cat[i].num = pObj[idx++];
+                    kal_mem_cpy(pBlob->code_cat_sp, &(pObj[idx]), sizeP);
+                    idx += sizeP;
+                    break;
+            }
+        }
+        else /* m/n/p = 0 */
+        {
+            /* memset ensures pBlob->cat[i].num set to 0 */
+            idx += 1;
+        }
+    }
+
+    if (sml_sl_ValidateConfigData(pBlob) == KAL_FALSE)
+    {
+        *error_cause = RMMI_ERR_SL_BLOB_CONFIG_DATA_INVALID;
+        free_ctrl_buffer(pBlob);
+        return NULL;
+    }
+
+    kal_mem_cpy(pBlob->signature, &(pObj[idx]), SML_SL_BLOB_SIZE_OF_SIGNATURE);
+
+    sml_Dump("constructed blob", (kal_uint8 *)pBlob, SML_SL_MAX_BLOB_SIZE);
+
+    return (kal_uint8 *)pBlob;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_sl_ConstructSmlBlob
+ * DESCRIPTION
+ *  This function updates BLOB based on change_flag param
+ * PARAMETERS
+ *  IN          *pObj
+ *  OUT       pLen
+ * RETURN
+ *  kal_uint8 * construct data
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+extern kal_uint8 *sml_sl_ConstructSmlBlob(sml_sl_blob_context_struct *pObj, kal_uint8 source)
+{
+    kal_uint16 length = 0;
+    sml_sl_blob_context_struct *psmlBlob;
+    kal_uint8 i = 0;
+    kal_uint16 obj_len = 0;
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    sml_sl_blob_meta_struct *cat = NULL;
+    sml_sl_blob_key_struct *key = NULL;
+    kal_uint8 *pdata = NULL;
+
+    psmlBlob = (sml_sl_blob_context_struct *)get_ctrl_buffer(SML_SL_MAX_BLOB_SIZE);
+    kal_mem_set(psmlBlob, 0, SML_SL_MAX_BLOB_SIZE);
+
+    /* major_version + minor_version + protection_algorithm + lock_operation */
+    length = 1 + 1 + 1 + 1;
+    kal_mem_cpy(psmlBlob, &(pObj[0]), length);
+
+    /* imei */
+    kal_mem_cpy(psmlBlob->imei, pObj->imei, SML_SL_BLOB_IMEI_SIZE);
+    length += SML_SL_BLOB_IMEI_SIZE;
+
+    /* time stamp */
+    kal_mem_cpy(psmlBlob->time_stamp, pObj->time_stamp, SML_SL_BLOB_TIME_STAMP_SIZE);
+    length += SML_SL_BLOB_TIME_STAMP_SIZE;
+
+    /* length */
+    kal_mem_cpy(psmlBlob->length, pObj->length, SML_SL_BLOB_LENGTH_SIZE);
+    length += SML_SL_BLOB_LENGTH_SIZE;
+
+    for (i = SML_CAT_N ; i <= SML_CAT_SP ; i++)
+    {
+        /* existing configuration should be used if change_flag=0 */
+        if (pObj->cat[i].change_flag == 0)
+        {
+            cat = (sml_sl_blob_meta_struct *) (*p->getItem)(i, SML_SL_CAT_META, &obj_len, source);
+            key = (sml_sl_blob_key_struct *) (*p->getItem)(i, SML_SL_CAT_KEY, &obj_len, source);
+            pdata = (kal_uint8 *) (*p->getItem)(i, SML_SL_CAT_CODE, &obj_len, source);
+        }
+        else
+        {
+            cat = &(pObj->cat[i]);
+            key = &(pObj->key[i]);
+
+            switch (i)
+            {
+                case SML_CAT_N:
+                    pdata = pObj->code_cat_n;
+                    break;
+
+                case SML_CAT_NS:
+                    pdata = pObj->code_cat_ns;
+                    break;
+
+                case SML_CAT_SP:
+                    pdata = pObj->code_cat_sp;
+                    break;
+            }
+        }
+
+        kal_mem_cpy(&(psmlBlob->cat[i]), cat, sizeof(sml_sl_blob_meta_struct));
+        kal_mem_cpy(&(psmlBlob->key[i]), key, sizeof(sml_sl_blob_key_struct));
+
+        switch (i)
+        {
+            case SML_CAT_N:
+                kal_mem_cpy(psmlBlob->code_cat_n, pdata, SML_SL_BLOB_CAT_N_SIZE);
+                break;
+
+            case SML_CAT_NS:
+                kal_mem_cpy(psmlBlob->code_cat_ns, pdata, SML_SL_BLOB_CAT_NS_SIZE);
+                break;
+
+            case SML_CAT_SP:
+                kal_mem_cpy(psmlBlob->code_cat_sp, pdata, SML_SL_BLOB_CAT_SP_SIZE);
+                break;
+        }
+    }
+
+    kal_mem_cpy(psmlBlob->signature, pObj->signature, SML_SL_BLOB_SIZE_OF_SIGNATURE);
+
+    sml_Dump("constructed sml blob", (kal_uint8 *)psmlBlob, SML_SL_MAX_BLOB_SIZE);
+
+    return (kal_uint8 *)psmlBlob;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_sl_ReconstructBlob
+ * DESCRIPTION
+ *  This function re-construct BLOB of variable length (mcc-mnc-gid)
+ * PARAMETERS
+ *  IN          *pObj
+ *  OUT       pLen
+ * RETURN
+ *  kal_uint8 * re-construct data for signature
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_uint8 *sml_sl_ReconstructBlob(sml_sl_blob_context_struct *pObj, kal_uint32 *pLen)
+{
+    kal_uint8 *pData = NULL;
+    kal_uint32 blob_len, data_len;
+    kal_uint32 sizeM, sizeN, sizeP;
+    kal_uint32 len;
+    kal_uint8 i;
+
+    blob_len = sml_GetCount(&(pObj->length[0]));
+    sizeM = pObj->cat[SML_CAT_N].num * SML_SL_BLOB_SIZE_OF_CAT_N;
+    sizeN = pObj->cat[SML_CAT_NS].num * SML_SL_BLOB_SIZE_OF_CAT_NS;
+    sizeP = pObj->cat[SML_CAT_SP].num * SML_SL_BLOB_SIZE_OF_CAT_SP;
+
+    /* RSA-PSS scheme */
+    if (pObj->protection_algorithm == 1)
+    {
+        data_len = blob_len - SML_SL_BLOB_SIZE_OF_SIGNATURE;
+    }
+    else
+    {
+        return NULL;
+    }
+
+    /* Compute data length: major_version + minor_version + protection_algorithm + lock_operation + IMEI + time_stamp + length */
+    data_len += 1 + 1 + 1 + 1 + SML_SL_BLOB_IMEI_SIZE + SML_SL_BLOB_TIME_STAMP_SIZE + SML_SL_BLOB_LENGTH_SIZE;
+
+    pData = (kal_uint8 *)get_ctrl_buffer(data_len);
+
+    /* major_version + minor_version + protection_algorithm + lock_operation */
+    len = 1 + 1 + 1 + 1;
+    kal_mem_cpy(pData, &(pObj[0]), len);
+
+    /* imei */
+    kal_mem_cpy((pData+len), pObj->imei, SML_SL_BLOB_IMEI_SIZE);
+    len += SML_SL_BLOB_IMEI_SIZE;
+
+    /* time stamp */
+    kal_mem_cpy((pData+len), pObj->time_stamp, SML_SL_BLOB_TIME_STAMP_SIZE);
+    len += SML_SL_BLOB_TIME_STAMP_SIZE;
+
+    /* length */
+    kal_mem_cpy((pData+len), pObj->length, SML_SL_BLOB_LENGTH_SIZE);
+    len += SML_SL_BLOB_LENGTH_SIZE;
+
+    for (i = SML_CAT_N ; i <= SML_CAT_SP ; i++)
+    {
+        pData[len++] = pObj->cat[i].change_flag;
+
+        kal_mem_cpy((pData+len), (kal_uint8 *)&(pObj->key[i].iteration_count[0]), SML_SL_BLOB_ITERATION_COUNT_SIZE);
+        len += SML_SL_BLOB_ITERATION_COUNT_SIZE;
+
+        kal_mem_cpy((pData+len), (kal_uint8 *)&(pObj->key[i].salt[0]), SML_SL_BLOB_SALT_SIZE);
+        len += SML_SL_BLOB_SALT_SIZE;
+
+        kal_mem_cpy((pData+len), (kal_uint8 *)&(pObj->key[i].hck[0]), SML_SL_BLOB_HCK_SIZE);
+        len += SML_SL_BLOB_HCK_SIZE;
+
+        pData[len++] = pObj->cat[i].num;
+
+        switch (i)
+        {
+            case SML_CAT_N:
+                kal_mem_cpy((pData+len), (kal_uint8 *)&(pObj->code_cat_n[0]), sizeM);
+                len += sizeM;
+                break;
+
+            case SML_CAT_NS:
+                kal_mem_cpy((pData+len), (kal_uint8 *)&(pObj->code_cat_ns[0]), sizeN);
+                len += sizeN;
+                break;
+
+            case SML_CAT_SP:
+                kal_mem_cpy((pData+len), (kal_uint8 *)&(pObj->code_cat_sp[0]), sizeP);
+                len += sizeP;
+                break;
+        }
+    }
+
+    *pLen = len;
+    sml_Dump("re-construct blob", pData, len);
+
+    return pData;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_sl_checkValidity
+ * DESCRIPTION
+ *  This method is to check the validity of the SML object
+ * PARAMETERS
+ *  IN          pObj    SML object
+ * RETURN
+ *  TRUE        Pass the validity check
+ *  FALSE       Fail the validity check
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_sl_checkValidity(void *pObj, t_cust_chl_asym_key *key)
+{
+    sml_sl_blob_context_struct *pSmlObj = (sml_sl_blob_context_struct *) pObj;
+    kal_uint8 *pData = NULL;
+    kal_bool result;
+    kal_uint32 data_len;
+
+    if (pSmlObj == NULL)
+    {
+        return KAL_FALSE;
+    }
+
+    if (pSmlObj->protection_algorithm == 1)
+    {
+        kal_uint32 ret;
+
+        pData = sml_sl_ReconstructBlob(pSmlObj, &data_len);
+
+        if (pData == NULL)
+        {
+            return KAL_FALSE;
+        }
+
+    #ifndef UNIT_TEST
+        ret = CustCHL_Verify_PSS_Signature(CUST_CHL_ALG_RSA_PSS_SHA256, pData, data_len,
+                                           &pSmlObj->signature[0], key);
+
+        MD_TRC_INFO_SMU_RSA_PSS_VERIFY_SIGNATURE_CUST(ret);
+    #else
+        ret = CUST_CHL_ERROR_NONE;
+    #endif /* UNIT_TEST */
+        result = (ret == CUST_CHL_ERROR_NONE) ? KAL_TRUE : KAL_FALSE;
+
+        free_ctrl_buffer(pData);
+
+    }
+    else if (pSmlObj->protection_algorithm == 0)
+    {
+        result = KAL_TRUE;
+    }
+    else
+    {
+        result = KAL_FALSE;
+    }
+
+    return result;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_sl_Load
+ * DESCRIPTION
+ *  This function loads the SML obj from NVRAM LID (NVRAM_READ_CNF)
+ * PARAMETERS
+ *  IN          pLid -blob constructed from AT+ESLBLOB
+ *  IN          psmlLid - blob constructed based on change flag, blob to load
+ * RETURN
+ *  kal_uint16  Obj size
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_uint16 sml_sl_Load(void *pLid, void *psmlLid, kal_uint8 source, kal_bool first_load,
+            kal_uint8 * public_key_modulus, kal_uint8 * public_key_exponent)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_uint16 length = sizeof(sml_sl_blob_context_struct);
+    t_cust_chl_asym_key key;
+
+    if (first_load == KAL_TRUE)
+    {
+        sml_sl_blob_context_struct *pSmlObj = (sml_sl_blob_context_struct *) pLid;
+
+        if (sml_sl_ValidateIMEI(pSmlObj->imei, SIM1) == KAL_TRUE)
+        {
+            /* Clean the old ones */
+            (*p->destory)(source);
+
+            /* Load the new one */
+            (*p->give)(pLid, source);
+        }
+        else
+        {
+            MD_TRC_WARNING_SML_SL_BLOB_IMEI_MISMATCH();
+            /* this can hit when BLOB/device IMEI is corrupted or hacked, hence assert */
+            ASSERT(0);
+        }
+    }
+    else
+    {
+        kal_mem_cpy(&key.m_N_key, public_key_modulus, SML_SL_PUBLIC_KEY_MOD_SIZE);
+        kal_mem_cpy(&key.m_E_key, public_key_exponent, SML_SL_PUBLIC_KEY_EXP_SIZE);
+        key.m_N_len = SML_SL_PUBLIC_KEY_MOD_SIZE;
+        key.m_E_len = SML_SL_PUBLIC_KEY_EXP_SIZE;
+
+        if (sml_sl_checkValidity(pLid, &key) == KAL_FALSE)
+        {
+            MD_TRC_WARNING_SML_LOAD_CHECK_VALIDITY_FAILED();
+            length = SML_SL_INVALID_CONTEXT_OBJ_LENGTH;
+
+            return length;
+        }
+
+        (*p->destory)(source);
+        (*p->give)(psmlLid, source);
+    }
+
+    return length;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_sl_Catcode
+ * DESCRIPTION
+ *  This function is used to compose the code of each category
+ * PARAMETERS
+ *  IN          cat
+ *  IN          *imsi
+ *  IN          *gid1
+ *  IN          mnc_len
+ *  OUT          *code
+ * RETURN
+ *  kal_uint8   code length
+ * GLOBALS AFFECTED
+ *  NONE
+ *******************************************************************************/
+kal_uint8 sml_sl_Catcode(sml_cat_enum cat,
+                       kal_uint8 *imsi,
+                       kal_uint8 *gid1,
+                       kal_uint8 mnc_len,
+                       kal_uint8 *code)
+{
+    if(mnc_len == 3)
+    {
+        code[0] = ((imsi[1] & 0xF0) >> 4) + RMMI_CHAR_0;
+        code[1] = (imsi[2] & 0x0F) + RMMI_CHAR_0;
+        code[2] = ((imsi[2] & 0xF0) >> 4) + RMMI_CHAR_0;
+        code[3] = (imsi[3] & 0x0F) + RMMI_CHAR_0;
+        code[4] = ((imsi[3] & 0xF0) >> 4) + RMMI_CHAR_0;
+        code[5] = (imsi[4] & 0x0F) + RMMI_CHAR_0;
+        code[6] = ((imsi[4] & 0xF0) >> 4) + RMMI_CHAR_0;
+        code[7] = (imsi[5] & 0x0F) + RMMI_CHAR_0;
+    }
+    else
+    {
+        code[0] = ((imsi[1] & 0xF0) >> 4) + RMMI_CHAR_0;
+        code[1] = (imsi[2] & 0x0F) + RMMI_CHAR_0;
+        code[2] = ((imsi[2] & 0xF0) >> 4) + RMMI_CHAR_0;
+        code[3] = (imsi[3] & 0x0F) + RMMI_CHAR_0;
+        code[4] = ((imsi[3] & 0xF0) >> 4) + RMMI_CHAR_0;
+        code[5] = RMMI_CHAR_F; // MNC length is 2, so the 3rd digit will be 'F'
+        code[6] = (imsi[4] & 0x0F) + RMMI_CHAR_0;
+        code[7] = ((imsi[4] & 0xF0) >> 4) + RMMI_CHAR_0;
+    }
+
+    switch(cat)
+    {
+        case SML_CAT_N:
+            return SML_SL_BLOB_SIZE_OF_CAT_N;
+        break;
+
+        case SML_CAT_NS:
+            return SML_SL_BLOB_SIZE_OF_CAT_NS;
+        break;
+
+        case SML_CAT_SP:
+            if(gid1)
+            {
+                code[6] = gid1[0] + RMMI_CHAR_0;
+                return SML_SL_BLOB_SIZE_OF_CAT_SP;
+            }
+        break;
+
+    default:
+        break;
+    }
+
+    return 0;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_sl_GetCode
+ * DESCRIPTION
+ *  This function is used to compose the code of each category  whether
+ *  mnc length is 2 or 3
+ * PARAMETERS
+ *  cat         [IN]    category of the SIM-ME-Lock
+ *  imsi        [IN]    imsi of the code source
+ *  gid1        [IN]    gid1 of the code source
+ *  sim_mnc_len [IN]    the mnc length decided by SIM
+ *  pdata       [IN]    the saved code for comparing
+ *  code        [OUT]   the composed code according to all input parameters
+ *
+ * RETURN
+ *  kal_uint16 file size
+ * GLOBALS AFFECTED
+ *  SMLSLOBJ
+ *******************************************************************************/
+kal_uint8 sml_sl_GetCode( sml_cat_enum cat,
+                       kal_uint8 * imsi,
+                       kal_uint8 * gid1,
+                       kal_uint8 sim_mnc_len,
+                       kal_uint8 * pdata,
+                       kal_uint8 * code)
+{
+    kal_uint8 mnc_len=0;
+
+    if (SML_MNC_LENGTH_NEST == 1)
+    {
+        mnc_len = sim_mnc_len;
+    }
+    else
+    {
+        if((*(pdata+5)) == 0x0F)
+        {
+            mnc_len = 2;
+        }
+        else
+        {
+            mnc_len = 3;
+        }
+    }
+    return sml_sl_Catcode(cat, imsi, gid1, mnc_len, code);
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_sl_Check
+ * DESCRIPTION
+ *  This function is used to check if the code is in the Pass list
+ * PARAMETERS
+ *  IN          cat
+ *  IN          *imsi
+ *  IN          *gid1
+ *  IN          sim_mnc_len
+ *  IN          source
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMLSLOBJ
+ *******************************************************************************/
+kal_bool sml_sl_Check(sml_cat_enum cat,       // category
+                    kal_uint8 *imsi,        // 9 bytes array, read from SIM, mandatory file
+                    kal_uint8 *gid1,        // 20 bytes array, read from SIM, NULL means gid1 invalid(file not exist)
+                    kal_uint8 sim_mnc_len,  // MNC length, read from SIM
+                    kal_uint8 source)       // 0:SIM1, 1:SIM2
+{
+
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    sml_sl_blob_meta_struct *meta = NULL;
+    kal_uint8 *pdata = NULL;
+    kal_uint8 idx = 0;
+    kal_uint16 length = 0, offset = 0;
+    kal_bool result = KAL_FALSE;
+    kal_uint8 code_len = 0;
+    kal_uint8 code[10] = {0x00};
+    kal_uint8 size_of_cat = 0;
+
+    meta = (sml_sl_blob_meta_struct *) (*p->getItem)(cat, SML_SL_CAT_META, &length, source);
+    pdata = (kal_uint8 *) (*p->getItem)(cat, SML_SL_CAT_CODE, &length, source);
+
+    if ((meta->change_flag == 0) || (meta->num == 0))
+    {
+        /* no valid configuration data on NVRAM, so sml_Check passed */
+        return KAL_TRUE;
+    }
+
+    switch(cat)
+    {
+        case SML_CAT_N:
+        {
+            size_of_cat = SML_SL_BLOB_SIZE_OF_CAT_N;
+            break;
+        }
+        case SML_CAT_NS:
+        {
+            size_of_cat = SML_SL_BLOB_SIZE_OF_CAT_NS;
+            break;
+        }
+        case SML_CAT_SP:
+        {
+            size_of_cat = SML_SL_BLOB_SIZE_OF_CAT_SP;
+            break;
+        }
+        default:
+            break;
+    }
+
+    for (idx = 0; idx < meta->num; idx++)
+    {
+        offset = idx * size_of_cat;
+        code_len = sml_sl_GetCode(cat,
+                               imsi,
+                               gid1,
+                               sim_mnc_len,
+                               (pdata+offset),
+                               code);
+
+        if (size_of_cat == code_len)
+        {
+            if (kal_mem_cmp(code, (pdata+offset), code_len)==0)
+            {
+                result = KAL_TRUE;
+                break;
+            }
+        }
+    }
+
+    return result;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_sl_Verify
+ * DESCRIPTION
+ *  This function is used to verify the SML lock keys
+ * PARAMETERS
+ *  void
+ * RETURN
+ *  kal_bool    result
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_sl_Verify(sml_cat_enum cat,
+                      kal_uint8 * key,
+                      kal_uint8 len,
+                      kal_uint8 source)
+{
+    nvram_ef_sml_obj_struct *p = &pSMLg[source];
+    kal_bool result = KAL_FALSE;
+    kal_uint16 length = 0;
+    kal_uint8 i = 0;
+    kal_uint32 blob_iter_count = 0;
+    sml_sl_blob_key_struct *catkey = NULL;
+
+    /* Get nvram_hck */
+    catkey = (sml_sl_blob_key_struct *) (*p->getItem)(cat, SML_SL_CAT_KEY, &length, source);
+
+    for (i = 0; i < SML_SL_BLOB_ITERATION_COUNT_SIZE-1; i++)
+    {
+        blob_iter_count += catkey->iteration_count[i];
+        blob_iter_count = (blob_iter_count << 8);
+    }
+
+    blob_iter_count += catkey->iteration_count[SML_SL_BLOB_ITERATION_COUNT_SIZE-1];
+
+    if (blob_iter_count != 0)   /* blob has valid key data */
+    {
+    #ifdef UNIT_TEST
+        result = KAL_TRUE;
+    #else
+        kal_uint32 verify_result = cust_sec_hck_verify (TYPE_HCK_PBKDF2_HMAC_SHA256_SALT128,
+                                                        (kal_char *)key,
+                                                        (kal_uint32)len,
+                                                        catkey->salt,
+                                                        blob_iter_count,
+                                                        catkey->hck);
+        if (verify_result == ERR_SEC_CHECK_HCK_SUCCESS)
+        {
+            MD_TRC_INFO_SML_KEY_VERIFY_PASS_INFO_CUST();
+            result = KAL_TRUE;
+        }
+        else
+        {
+            MD_TRC_INFO_SML_KEY_VERIFY_FAIL_INFO_CUST();
+            result = KAL_FALSE;
+        }
+    #endif /* UNIT_TEST */
+    }
+    else
+    {
+        result = KAL_FALSE;
+    }
+
+    return result;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  smu_CheckHplmnIsLteOnly
+ * DESCRIPTION
+ *  This function is used to check whether HPMN belongs to LTE only PLMN
+ * PARAMETERS
+ *  IN          *imsi
+ *  IN          mnc_len
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  NONE
+ *******************************************************************************/
+kal_bool smu_CheckHplmnIsLteOnly(const kal_uint8 * imsi, kal_uint8 mnc_len)
+{
+
+    const kal_uint8 *  code_ptr = &(customLteOnlyPlmn[0]);
+
+    kal_uint8 code[3] = {0};
+
+
+    code[0] = (imsi[1] & 0xF0) | (imsi[2] & 0x0F);
+
+    code[1] = (imsi[2] & 0xF0) | (imsi[3] & 0x0F);
+
+    if(3 == mnc_len)
+    {
+
+        code[2] = (imsi[3] & 0xF0) | (imsi[4] & 0x0F);
+
+    }
+    else
+    {
+
+        code[2] = (imsi[3] & 0xF0) | 0x0F;
+
+    }
+
+    while(0xFF != *code_ptr) /* Break if first byte is 0xFF */
+    {
+
+        if(0==kal_mem_cmp(code_ptr,code,3))
+        {
+
+            return KAL_TRUE;
+
+        }
+
+        code_ptr += 3;
+
+    }
+
+    return KAL_FALSE;
+
+
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  smu_CheckHplmnIsCt
+ * DESCRIPTION
+ *  This function is used to check whether HPMN belongs to CT
+ * PARAMETERS
+ *  IN          *imsi
+ *  IN          mnc_len
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  NONE
+ *******************************************************************************/
+kal_bool smu_CheckHplmnIsCt(const kal_uint8 * imsi, kal_uint8 mnc_len)
+{
+
+    const kal_uint8 *  code_ptr = &(customCtPlmn[0]);
+
+    kal_uint8 code[3] = {0};
+
+
+    code[0] = (imsi[1] & 0xF0) | (imsi[2] & 0x0F);
+
+    code[1] = (imsi[2] & 0xF0) | (imsi[3] & 0x0F);
+
+    if(3 == mnc_len)
+    {
+
+        code[2] = (imsi[3] & 0xF0) | (imsi[4] & 0x0F);
+
+    }
+    else
+    {
+
+        code[2] = (imsi[3] & 0xF0) | 0x0F;
+
+    }
+
+    while(0xFF != *code_ptr) /* Break if first byte is 0xFF */
+    {
+
+        if(0==kal_mem_cmp(code_ptr,code,3))
+        {
+
+            return KAL_TRUE;
+
+        }
+
+        code_ptr += 3;
+
+    }
+
+    return KAL_FALSE;
+
+
+}
+
+#endif /* __SIM_ME_LOCK__ */
+#endif /* L4_NOT_PRESENT */
+
+#ifdef __MDVSIM__
+extern kal_bool nvram_external_write_data(nvram_lid_enum LID, kal_uint16 rec_index, kal_uint8 *buffer, kal_uint32 buffer_size); // from nvram_interface.c
+
+extern kal_bool nvram_external_read_data(nvram_lid_enum LID, kal_uint16 rec_index, kal_uint8 *buffer, kal_uint32 buffer_size);  // from nvram_interface.c
+
+/*
+ * profile_id: 0-based index
+ */
+kal_bool custom_vsim_read_nvram_file(kal_uint8 profile_id, uicc_card_type_enum vsim_type, nvram_vsim_ef_file_struct *vsim_ef_buf)
+{
+    kal_bool ret_val = KAL_FALSE;
+
+
+    if (UICC_USIM_INSIDE == vsim_type)
+    {
+        /* Update USIM EF_U_IMSI ... */
+        ret_val = nvram_external_read_data(NVRAM_EF_VSIM_U_IMSI_LID, profile_id+1, (kal_uint8*)vsim_ef_buf, NVRAM_VSIM_EF_U_DEFUALT_SIZE);
+        kal_mem_cpy(EF_U_IMSI_data[profile_id], vsim_ef_buf->meta, EF_U_META_SIZE);
+        kal_mem_cpy(EF_U_IMSI_data[profile_id]+EF_U_META_SIZE, vsim_ef_buf->data, EF_U_DATA_SIZE);
+
+        /* Update other USIM files ... */
+    }
+    else if(SIM_CARD_INSIDE == vsim_type)
+    {
+        /* Update SIM EF_IMSI ... */
+        ret_val = nvram_external_read_data(NVRAM_EF_VSIM_SIM_IMSI_LID, 1, (kal_uint8*)vsim_ef_buf, NVRAM_VSIM_EF_DEFUALT_SIZE);
+        kal_mem_cpy(EF_IMSI_data, vsim_ef_buf->meta, EF_META_SIZE);
+        kal_mem_cpy(EF_IMSI_data+EF_META_SIZE, vsim_ef_buf->data, EF_DATA_SIZE);
+
+        /* Update other SIM files ... */
+    }
+
+    return ret_val;
+}
+
+/*
+ * profile_id: 0-based index
+ */
+kal_bool custom_vsim_write_nvram_file(kal_uint8 profile_id, kal_uint16 file_id, uicc_card_type_enum vsim_type, nvram_vsim_ef_file_struct *vsim_ef_buf)
+{
+    kal_bool ret_val = KAL_FALSE;
+
+
+    if (UICC_USIM_INSIDE == vsim_type)
+    {
+        switch(file_id)
+        {
+            case 0x6f07:    //EF_IMSI_ID
+                kal_mem_cpy(vsim_ef_buf->meta, EF_U_IMSI_data[profile_id], EF_U_META_SIZE);
+                kal_mem_cpy(vsim_ef_buf->data, EF_U_IMSI_data[profile_id]+EF_U_META_SIZE, EF_U_DATA_SIZE);
+
+                ret_val = nvram_external_write_data(NVRAM_EF_VSIM_U_IMSI_LID, profile_id+1, (kal_uint8*)vsim_ef_buf, NVRAM_VSIM_EF_U_DEFUALT_SIZE);
+                break;
+            default:
+                break;
+        }
+
+    }
+    else if (SIM_CARD_INSIDE == vsim_type)
+    {
+        switch (file_id)
+        {
+            case 0x6f07:    //EF_IMSI_ID
+                kal_mem_cpy(vsim_ef_buf->meta, EF_IMSI_data, EF_META_SIZE);
+                kal_mem_cpy(vsim_ef_buf->data, EF_IMSI_data+EF_META_SIZE, EF_DATA_SIZE);
+
+                ret_val = nvram_external_write_data(NVRAM_EF_VSIM_SIM_IMSI_LID, 1, (kal_uint8*)vsim_ef_buf, NVRAM_VSIM_EF_DEFUALT_SIZE);
+                break;
+            default:
+                break;
+        }
+    }
+
+    return ret_val;
+}
+
+static kal_bool custom_vsim_usim_file_instance(kal_uint8 profile_id, kal_uint8 *file_id, kal_uint8** file_ptr)
+{
+    kal_bool result = KAL_FALSE;
+    kal_uint8 *fptr = NULL;
+
+    switch (file_id[0])
+    {
+        case 0x7f:  // 7FFF (default ADF_USIM)
+            switch (file_id[1])
+            {
+                case 0xff:
+                    fptr = &ADF_USIM_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+
+                default:
+                    break;
+            }
+
+            break;
+        case 0x5f:
+            break;
+        case 0x3f:
+            break;
+
+        case 0x6f:  // 7FFF - 6Fxx
+            switch (file_id[1])
+            {
+                case 0x07:
+                    fptr = &EF_U_IMSI_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+
+                case 0x31:
+                    fptr = &EF_U_HPPLMN_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+
+                case 0x38:
+                    fptr = &EF_U_UST_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+
+                case 0x56:
+                    fptr = &EF_U_EST_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+
+                case 0x60:
+                    fptr = &EF_U_PLMNWACT_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+
+                case 0x61:
+                    fptr = &EF_U_OPLMNWACT_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+
+                case 0x62:
+                    fptr = &EF_U_HPLMNWACT_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+
+                case 0x73:
+                    fptr = &EF_U_PSLOCI_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+
+                case 0x78:
+                    fptr = &EF_U_ACC_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+
+                case 0x7E:
+                    fptr = &EF_U_LOCI_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+
+                case 0xAD:
+                    fptr = &EF_U_AD_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+
+            #if defined(__VSIM__) && defined(__TC01__) && defined(__FEATURE_TC01_SIMOFF_EXTENTION__) && defined(__MDVSIM__)
+                case 0x46:
+                    fptr = &EF_U_SPN_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+                case 0x3E:
+                    fptr = &EF_U_GID1_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+            #endif
+
+                default:
+                    break;
+            }
+            break;
+        case 0x4f:
+            break;
+
+        case 0x2f:  // 3F00 - 2Fxx
+            switch (file_id[1])
+            {
+                case 0x00:
+                    fptr = &EF_U_DIR_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+
+                case 0x05:
+                    fptr = &EF_U_ELP_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+
+                case 0xE2:
+                    fptr = &EF_U_ICCID_data[profile_id][0];
+                    result = KAL_TRUE;
+                    break;
+
+                default:
+                    break;
+            }
+            break;
+        default:
+            break;
+    }
+
+
+    *file_ptr = fptr;
+
+    return result;
+}
+
+static kal_bool custom_vsim_sim_file_instance(kal_uint8 profile_id, kal_uint8 *file_id, kal_uint8** file_ptr)
+{
+    kal_bool result = KAL_FALSE;
+    kal_uint8 *fptr = NULL;
+
+    switch (file_id[0])
+    {
+        /* DF level */
+        case 0x7f:  // 7F20 (DF_GSM)
+            switch (file_id[1])
+            {
+                case 0x20:
+                    fptr = &DF_GSM_data[0];
+                    result = KAL_TRUE;
+                 break;
+             default:
+                 break;
+            }
+         case 0x5f:
+             break;
+
+         case 0x3f:
+             break;
+
+        /* EF level */
+         case 0x6f: // 7F20 - 6Fxx
+            switch (file_id[1])
+            {
+                case 0x05:
+                    fptr = &EF_LP_data[0];
+                    result = KAL_TRUE;
+                    break;
+
+                case 0x07:
+                    fptr = &EF_IMSI_data[0];
+                    result = KAL_TRUE;
+                    break;
+
+                case 0x20:
+                   fptr = &EF_KC_data[0];
+                   result = KAL_TRUE;
+                   break;
+
+                case 0x31:
+                   fptr = &EF_HPPLMN_data[0];
+                   result = KAL_TRUE;
+                   break;
+
+                case 0x38:
+                    fptr = &EF_SST_data[0];
+                    result = KAL_TRUE;
+                    break;
+
+                 case 0x74:
+                    fptr = &EF_BCCH_data[0];
+                    result = KAL_TRUE;
+                    break;
+
+                 case 0x78:
+                    fptr = &EF_ACC_data[0];
+                    result = KAL_TRUE;
+                    break;
+
+                 case 0x7B:
+                    fptr = &EF_FPLMN_data[0];
+                    result = KAL_TRUE;
+                    break;
+
+                case 0x7E:
+                   fptr = &EF_LOCI_data[0];
+                   result = KAL_TRUE;
+                   break;
+
+                case 0xAE:
+                    fptr = &EF_PHASE_data[0];
+                    result = KAL_TRUE;
+                    break;
+
+                case 0xAD:
+                    fptr = &EF_AD_data[0];
+                    result = KAL_TRUE;
+                    break;
+
+            #if defined(__VSIM__) && defined(__TC01__) && defined(__FEATURE_TC01_SIMOFF_EXTENTION__) && defined(__MDVSIM__)
+                case 0x46:
+                    fptr = &EF_SPN_data[0];
+                    result = KAL_TRUE;
+                    break;
+                case 0x3e:
+                    fptr = &EF_GID1_data[0];
+                    result = KAL_TRUE;
+                    break;
+            #endif
+
+                 default:
+                     break;
+            }
+            break;
+
+         case 0x4f:
+            break;
+
+         case 0x2f:
+            switch (file_id[1])
+            {
+                case 0xE2:
+                    fptr = &EF_ICCID_data[0];
+                    result = KAL_TRUE;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        default:
+            break;
+    }
+
+    *file_ptr = fptr;
+
+    return result;
+
+}
+
+kal_bool custom_vsim_file_instance(kal_uint8 profile_id, kal_uint8 vsim_type, kal_uint8 *file_id, kal_uint8** file_ptr)
+{
+    kal_bool result = KAL_FALSE;
+
+    if (vsim_type == 1)
+    {
+        //SIM_CARD_INSIDE
+        result = custom_vsim_sim_file_instance(profile_id, file_id, file_ptr);
+    }
+    else if(vsim_type == 2)
+    {
+        //UICC_USIM_INSIDE
+        result = custom_vsim_usim_file_instance(profile_id, file_id, file_ptr);
+    }
+    else
+    {
+        // do nothing
+    }
+
+    return result;
+}
+
+/*
+ * return 0 if success
+ * return -1 if SIM_AUTH_ERROR_WRONG_MAC
+ */
+kal_int8 custom_vsim_get_gsm_auth(kal_uint8 sim_auth_algo, kal_uint8 *ki, kal_uint8 *rand, kal_uint8 *sres, kal_uint8 *kc)
+{
+    /* Please porting your GSM authentication here to output to sres and kc */
+    return 0;
+}
+
+/*
+ * return 0 if success
+ * return -1 if SIM_AUTH_ERROR_WRONG_MAC
+ * return -2 if AUTH_3G_SYNC_FAILURE_T
+ */
+kal_int8 custom_vsim_get_usim_auth(kal_uint8 usim_auth_algo, kal_uint8 *opc, kal_uint8 *ki,
+                                          kal_uint8 *rand, kal_uint8 *autn,
+                                          kal_uint8 *ik, kal_uint8 *ck,
+                                          kal_uint8 *res, kal_uint32 *res_len, kal_uint8 *auts)
+{
+    /* Please porting your USIM authentication here */
+    return 0;
+}
+
+#endif /* __MDVSIM__ */
+
+#ifdef __VSIM__
+/* Do not change the function implementation. Please change the MACRO defined in cstom_nvram_extra.h. */
+kal_uint16 custom_vsim_get_ef_meta_size()
+{
+    return EF_META_SIZE;
+}
+kal_uint16 custom_vsim_get_ef_data_size()
+{
+    return EF_DATA_SIZE;
+}
+kal_uint16 custom_vsim_get_ef_u_meta_size()
+{
+    return EF_U_META_SIZE;
+}
+kal_uint16 custom_vsim_get_ef_u_data_size()
+{
+    return EF_U_DATA_SIZE;
+}
+#endif
+
+
+#define SML_MCC_LEN 3
+#define SML_MCC_MNC_LEN 6
+
+kal_uint8 sml_sprint_mcc_mnc_list[][SML_MCC_MNC_LEN+1] = {
+    {"310120"},
+    {"312530"}
+};
+
+kal_uint8 sml_us_mcc_list[][SML_MCC_LEN+1] = {
+    {"310"},
+    {"311"},
+    {"312"},
+    {"313"},
+    {"314"},
+    {"315"},
+    {"316"}
+};
+
+kal_uint8 sml_bmvno_mcc_mnc_list[][SML_MCC_MNC_LEN+1] = {
+    {"310240"},
+    {"312530"}
+};
+
+#define SML_SPRT_LIST_NUM (sizeof(sml_sprint_mcc_mnc_list)/sizeof(sml_sprint_mcc_mnc_list[0]))
+#define SML_US_LIST_NUM (sizeof(sml_us_mcc_list)/sizeof(sml_us_mcc_list[0]))
+#define SML_BMVNO_LIST_NUM (sizeof(sml_bmvno_mcc_mnc_list)/sizeof(sml_bmvno_mcc_mnc_list[0]))
+
+
+kal_uint8 sml_uicc_lock_get_list_num(kal_uint8 lock_code, kal_uint8 ps_id)
+{
+    if (lock_code == 0)
+    {
+        if ((sml_query_sml_lock_rule() == SML_LOCK_RULE_SPR_NETWORK_LOCK) &&
+            (sml_query_sml_lock_sub_rule() == SML_LOCK_SPR_SUB_RULE_BMVNO))
+        {
+            return SML_BMVNO_LIST_NUM;
+        }
+        else
+        {
+            return SML_SPRT_LIST_NUM;
+        }
+    }
+    else if (lock_code == 1)
+    {
+        return SML_US_LIST_NUM;
+    }
+
+    return 0;
+}
+
+
+/*******************************************************************************
+ * FUNCTION  
+ *  sml_is_bmvno_plmn_gid
+ * DESCRIPTION
+ *  This function is to find the input mcc-mnc and gid1 matching with the table below
+ *  This table is list of Boost mobile virtual Network operators(BMVNO)
+ *  CR ID : ALPS04903239
+ *
+ * MCC/MNC  Carrier GID1
+ * 310/240  Boost   6230 (Hex Value)
+ * 312/530  Sprint  Any
+ *
+ * PARAMETERS
+ *  IN          mccmnc
+ *  IN          *gid1
+ * RETURN
+ *  kal_bool
+ *******************************************************************************/
+kal_bool sml_is_bmvno_plmn_gid(kal_uint8* mccmnc, kal_uint8 is_valid_gid1, kal_uint8* gid1)
+{
+    if (strncmp((kal_char*)mccmnc, "310240", 6) == 0)
+    {
+        if (is_valid_gid1 == KAL_FALSE)
+        {
+            return KAL_FALSE;
+        }
+
+        if ((gid1[0] == 0x62) && (gid1[1] == 0x30) && (gid1[2] == 0xFF)) /* check GID1 available: 0x6230FFFF */
+        {
+            return KAL_TRUE;
+        }
+        else
+        {
+            return KAL_FALSE;
+        }
+    }
+    else if (strncmp((kal_char*)mccmnc, "312530", 6) == 0)
+    {
+        return KAL_TRUE;
+    }
+    else
+    {
+        return KAL_FALSE;
+    }
+}
+
+
+/**************************************************************************
+* FUNCTION
+*  custom_sml_is_uicc_unlock_enabled
+* DESCRIPTION
+*  Determine the UICC Lock is enable or not.
+*      KAL_FALSE : Allow all operator SIM without check.
+*      KAL_TRUE : Apply only validate SIM with follow the operator's requirement.
+* PARAMETERS
+*  none
+* RETURNS
+*  kal_bool
+
+**************************************************************************/
+kal_bool custom_sml_is_uicc_unlock_enabled(void)
+{
+    if (sml_query_sml_lock_rule() == SML_LOCK_RULE_SPR_NETWORK_LOCK)
+    {
+        return KAL_TRUE;
+    }
+    else
+    {
+        return KAL_FALSE;
+    }
+}
+
+/**************************************************************************
+* FUNCTION
+*    custom_sim_disable_sim_slot
+* DESCRIPTION
+*  Determine the SIM disable function type.
+*      KAL_FALSE : The SIM disable funtion is based on each card (ICCID).
+*      KAL_TRUE  : The SIM disable funtion is based on sim slot
+* PARAMETERS
+*  none
+* RETURNS
+*  kal_bool
+
+**************************************************************************/
+kal_bool custom_sim_disable_sim_slot(void)
+{
+#ifdef __TC10__
+    return KAL_TRUE;
+#else
+    return KAL_FALSE;
+#endif
+}
+
+kal_uint16 sml_gblob_Load( void *pLid)
+{
+    nvram_ef_gblob_data_struct *p = &nvram_ef_gblob_data_obj_g;
+
+    kal_uint16 length = sizeof(sml_gblob_s_context_struct);
+
+    /* Load the new one */
+    (*p->load)(pLid);
+
+    return length;
+}
+
+
+/* SML Customized NVRAM */
+#ifdef nvram_ef_custom_sml_struct
+nvram_ef_custom_sml_struct custom_sml_nv_data;
+#endif
+
+void custom_sml_read_custom_nvram(kal_uint8 ps_id)
+{
+#if defined(NVRAM_EF_CUSTOM_SML_LID) && defined(nvram_ef_custom_sml_struct)
+    nvram_errno_enum error_no;
+
+    error_no = nvram_external_secure_read_data(NVRAM_EF_CUSTOM_SML_LID,
+                                               1,
+                                               (kal_uint8*)&custom_sml_nv_data,
+                                               sizeof(nvram_ef_custom_sml_struct),
+                                               NULL);
+
+    if (error_no == NVRAM_ERRNO_SUCCESS)
+    {
+        MD_TRC_INFO_SML_READ_CUSTOM_NV("SUCCESS");
+    }
+    else
+    {
+        MD_TRC_INFO_SML_READ_CUSTOM_NV("FAIL!");
+        DEBUG_ASSERT(0);
+    }
+#endif
+
+    return;
+}
+
+
+#ifdef __CUST_SML_RULE__
+/**************************************************************************
+* FUNCTION
+*  custom_sml_query_gblob_rule_by_cust_rule
+* DESCRIPTION
+*  Update main rule and sub rule based on cust rule setting
+* PARAMETERS
+*  lock_rule        [OUT]   Main rule to be updated
+*  lock_sub_rule    [OUT]   Sub rule to be updated
+* RETURNS
+*  N/A
+**************************************************************************/
+void custom_sml_query_gblob_rule_by_cust_rule(kal_uint8 *lock_rule, kal_uint8 lock_sub_rule[SML_GBLOB_SUB_RULE_SIZE])
+{
+    kal_uint8 cust_code, cust_rule;
+
+    cust_code = (*pGblobData->query_u8) (SML_GBLOB_SML_CUST_CODE_U8);
+    cust_rule = (*pGblobData->query_u8) (SML_GBLOB_SML_CUST_RULE_U8);
+
+    if (cust_code == SML_LOCK_CUST_CODE_NONE)
+    {
+        if (cust_rule == SML_LOCK_CUST_RULE_NONE)
+        {
+            /* Modify Main Rule */
+            // *lock_rule = (kal_uint8)SML_LOCK_RULE_UNKNOWN;
+
+            /* Modify Sub Rule */
+            // lock_sub_rule[0] = 0;   // LSB
+            // lock_sub_rule[1] = 0;   // MSB
+        }
+    }
+}
+#endif
+
+/**************************************************************************
+* FUNCTION
+*  custom_sml_update_gblob_lock_setting
+* DESCRIPTION
+*  Dynamically update gblob lock setting (rule / sub rule) and write to NVRAM
+*      KAL_FALSE : This gblob lock rules are not updated
+*      KAL_TRUE : This gblob lock rules are updated
+* PARAMETERS
+*  N/A
+* RETURNS
+*  kal_bool
+**************************************************************************/
+kal_bool custom_sml_update_gblob_lock_setting(void)
+{
+    kal_bool rule_update = KAL_FALSE;
+    kal_uint8 lock_rule;
+    kal_uint8 lock_sub_rule[SML_GBLOB_SUB_RULE_SIZE];
+
+    lock_rule = (*pGblobData->query_u8) (SML_GBLOB_SML_LOCK_RULE_U8);
+    (*pGblobData->query_a) (SML_GBLOB_SML_LOCK_SUB_RULE_A, lock_sub_rule, SML_GBLOB_SUB_RULE_SIZE);
+
+#ifdef __CUST_SML_RULE__
+    /* Modify Main / Sub rule based on cust rule */
+    custom_sml_query_gblob_rule_by_cust_rule(&lock_rule, lock_sub_rule);
+#endif
+
+    /* Modify Main Rule */
+    // lock_rule = (kal_uint8)SML_LOCK_RULE_UNKNOWN;
+
+    /* Modify Sub Rule */
+    // lock_sub_rule[0] = 0;   // LSB
+    // lock_sub_rule[1] = 0;   // MSB
+
+
+    /* Check if data needs to be updated */
+    {
+        kal_uint8 old_lock_rule;
+        kal_uint8 old_lock_sub_rule[SML_GBLOB_SUB_RULE_SIZE];
+
+        old_lock_rule = (*pGblobData->query_u8) (SML_GBLOB_SML_LOCK_RULE_U8);
+        (*pGblobData->query_a) (SML_GBLOB_SML_LOCK_SUB_RULE_A, old_lock_sub_rule, SML_GBLOB_SUB_RULE_SIZE);
+
+        if (lock_rule != old_lock_rule)
+        {
+            (*pGblobData->assign_u8) (SML_GBLOB_SML_LOCK_RULE_U8, lock_rule);
+            rule_update = KAL_TRUE;
+        }
+
+        if (kal_mem_cmp(lock_sub_rule, old_lock_sub_rule, SML_GBLOB_SUB_RULE_SIZE) != 0)
+        {
+            (*pGblobData->assign_a) (SML_GBLOB_SML_LOCK_SUB_RULE_A, lock_sub_rule, SML_GBLOB_SUB_RULE_SIZE);
+            rule_update = KAL_TRUE;
+        }
+    }
+
+    if (rule_update == KAL_TRUE)
+    {
+        MD_TRC_INFO_SML_CUST_UPDATE_GBLOB_RULE(lock_rule, lock_sub_rule[1], lock_sub_rule[0]);
+        return KAL_TRUE;
+    }
+    else
+    {
+        return KAL_FALSE;
+    }
+}
+
+
+/**************************************************************************
+* FUNCTION
+*  custom_sml_is_nvram_accessable_check
+* DESCRIPTION
+*  Check if SML NVRAM can be accessed
+*      KAL_FALSE : This NVRAM is not able to be accessed
+*      KAL_TRUE : This NVRAM is abled to be accessed
+* PARAMETERS
+*  file_idx         [IN]    NVRAM LID that is to be accessed
+* RETURNS
+*  kal_bool
+**************************************************************************/
+kal_bool custom_sml_is_nvram_accessable_check(nvram_lid_enum file_idx)
+{
+    kal_bool ret = KAL_TRUE;
+
+    switch(file_idx)
+    {
+        /* NVRAM not allowed */
+        case NVRAM_EF_SML_LID:
+        case NVRAM_EF_SML_MAX_RETRY_COUNT_LID:
+
+    #ifndef __CARRIER_RESTRICTION__
+        case NVRAM_EF_L4_CARRIER_RESTRICTION_LID:
+    #endif
+    #ifndef __ATT_RSU_NVRAM__
+        case NVRAM_EF_SML_ATT_LID:
+    #endif
+    #ifndef __VZW_RSU_NVRAM__
+        case NVRAM_EF_L4_SML_VZW_SIM_LOCK_LID:
+        case NVRAM_EF_L4_SML_VZW_SIM_LOCK_DEVICE_KEY_LID:
+        case NVRAM_EF_L4_SML_VZW_RSU_DELAY_TIMER_LID:
+    #endif
+    #ifndef __OP129_RSU_NVRAM__
+        case NVRAM_EF_L4_SML_OP129_LID:
+    #endif
+        {
+            ret = KAL_FALSE;
+            break;
+        }
+        default:
+        {
+            /* Other NVRAM access */
+            ret = KAL_TRUE;
+            break;
+        }
+    }
+
+    return ret;
+}
+
+/**************************************************************************
+* FUNCTION
+*  custom_sml_is_gblob_enabled
+* DESCRIPTION
+*  Determine the GBLOB and SML RULE is enable or not.
+*      KAL_FALSE : Use legacy SML process.
+*      KAL_TRUE : Enable single modem binary for all SML lock type.
+* PARAMETERS
+*  none
+* RETURNS
+*  kal_bool
+
+**************************************************************************/
+kal_bool custom_sml_is_gblob_enabled(void)
+{
+    return KAL_TRUE;
+}
+
+/**************************************************************************
+* FUNCTION
+*  custom_sml_is_gblob_imei_verification_enabled
+* DESCRIPTION
+*  Determine the GBLOB IMEI verification is enable or not during boot-up.
+*      KAL_FALSE : Disable.
+*      KAL_TRUE  : Enable.
+* PARAMETERS
+*  none
+* RETURNS
+*  kal_bool
+
+**************************************************************************/
+kal_bool custom_sml_is_gblob_imei_verification_enabled(void)
+{
+    return KAL_FALSE;
+}
+
+/**************************************************************************
+* FUNCTION
+*  custom_sml_is_eslblob_allow
+* DESCRIPTION
+*  Determine if the AT command "ESLBLOB" is allowed to be sent.
+* PARAMETERS
+*  none
+* RETURNS
+*  kal_bool
+*      KAL_FALSE : Not allow to be sent.
+*      KAL_TRUE  : Allow to be sent.
+**************************************************************************/
+kal_bool custom_sml_is_eslblob_allow(void)
+{
+#ifdef __MTK_INTERNAL__
+    return KAL_TRUE;
+#else
+    return KAL_FALSE;
+#endif
+}
+
+/**************************************************************************
+* FUNCTION
+*  custom_sml_is_eslblobf_allow
+* DESCRIPTION
+*  Determine if the AT command "ESLBLOBF" is allowed to be sent.
+* PARAMETERS
+*  none
+* RETURNS
+*  kal_bool
+*      KAL_FALSE : Not allow to be sent.
+*      KAL_TRUE  : Allow to be sent.
+**************************************************************************/
+kal_bool custom_sml_is_eslblobf_allow(void)
+{
+#ifdef __MTK_INTERNAL__
+    return KAL_TRUE;
+#else
+    return KAL_FALSE;
+#endif
+}
+
+/**************************************************************************
+* FUNCTION
+*  custom_sml_is_nonctrlslot_allow_unlock
+* DESCRIPTION
+*  Determine the non-control slot for Link SML can be unlock or not.
+*      KAL_FALSE : non-control slot not allow to proccess verify command.
+*      KAL_TRUE  : non-control slot allow to proccess verify command, but will
+*                  not affect other slots when it unlocked
+* PARAMETERS
+*  none
+* RETURNS
+*  kal_bool
+
+**************************************************************************/
+kal_bool custom_sml_is_nonctrlslot_allow_unlock(void)
+{
+    return KAL_FALSE;
+}
+
+/**************************************************************************
+* FUNCTION
+*  custom_sml_is_secured_simme_cntxt_enabled
+* DESCRIPTION
+*  Determine the secured SML context version is enabled or not.
+*      KAL_FALSE : use legacy SML context.
+*      KAL_TRUE  : use secured SML context which support encrypted Cat Key
+* PARAMETERS
+*  none
+* RETURNS
+*  kal_bool
+
+**************************************************************************/
+kal_bool custom_sml_is_secured_simme_cntxt_enabled(void)
+{
+    return KAL_TRUE;
+}
+
+/**************************************************************************
+* FUNCTION
+*  custom_sml_input_format_of_catkey_for_algo
+* DESCRIPTION
+*  Determine the format of input SML category key for given algorithm
+* PARAMETERS
+*  algorithm type
+*  0 - The CK and HCK is compared directly
+*  1 - PBKDF2-HMAC-SHA256
+* RETURNS
+*  sml_input_format_of_catkey_for_algo_enum
+*  If actual input key is "123456" then
+*  SML_INPUT_FORMAT_CATKEY_BCD - 0x21,0x43,0x65
+*  SML_INPUT_FORMAT_CATKEY_ASCII - 0x31,0x32,0x33,0x34,0x35,0x36
+**************************************************************************/
+sml_input_format_of_catkey_for_algo_enum custom_sml_input_format_of_catkey_for_algo(kal_uint8 algo)
+{
+    /* BCD formatted password */
+    if (algo == 0)
+    {
+        return SML_INPUT_FORMAT_CATKEY_BCD;
+    }
+    /* PBKDF2-HMAC-SHA256 */
+    else if (algo == 1)
+    {
+    #if defined (__SML_INPUT_FORMAT_CATKEY_ASCII__)
+        /* Hashing with password string - Hash("123456") */
+        return SML_INPUT_FORMAT_CATKEY_ASCII;
+
+    #elif defined (__SML_INPUT_FORMAT_CATKEY_BCD__)
+        /* Hashing with BCD formatted passwrod - Hash({0x21,0x43,0x65,0xFF,0xFF,0xFF,0xFF,0xFF}) */
+        // When calculating hash value,
+        //   remember to add padding 0xFF for total SML_MAX_SUPPORT_KEY_LEN bytes (8 in default)
+        return SML_INPUT_FORMAT_CATKEY_BCD;
+
+    #else
+        /* Default: Hashing with password string - Hash("123456") */
+        return SML_INPUT_FORMAT_CATKEY_ASCII;
+    #endif
+    }
+
+    return SML_INPUT_FORMAT_CATKEY_BCD;
+}
+
+/*************************************************************************
+* FUNCTION
+*  custom_sml_is_nonctrlslot_always_lock_check
+* DESCRIPTION
+*  Determine the non-control slot for Link SML shall be locked or not when control slot SML is configured as UNLOCKED
+*      KAL_TRUE  : non-control slot is locked if control slot SML is configured as UNLOCKED. Later control slot SIM shall
+*                  SUPER VERIFY and unlock non-control Slot SIM.
+*      KAL_FALSE : non-control slot is not locked if control slot SML is configured as UNLOCKED.
+*
+* PARAMETERS
+*  none
+* RETURNS
+*  kal_bool
+*************************************************************************/
+kal_bool custom_sml_is_nonctrlslot_always_lock_check(void)
+{
+   return KAL_TRUE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*     custom_sml_is_nonctrlslot_allow_sml_check(void)
+* DESCRIPTION
+*     Determine if the sml check can be allowed for non-control slot SIM
+*       KAL_TRUE:  Allow sml check for non-control slot SIM.
+*       KAL_FALSE: Do not allow sml check for non-control slot SIM.
+*
+* PARAMETERS
+*    none
+* RETURNS
+*  kal_bool
+* 
+*****************************************************************************/
+kal_bool custom_sml_is_nonctrlslot_allow_sml_check(void)
+{
+    return KAL_FALSE;
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*     custom_secure_sml_data
+* DESCRIPTION
+*     Determine if the sml context can be dumpped in log
+*       KAL_TRUE:  All SML context cannot be dumpped in log (incl. ENG load)
+*       KAL_FALSE: SML context may be dumpped in log
+*
+* PARAMETERS
+*    none
+* RETURNS
+*  kal_bool
+* 
+*****************************************************************************/
+kal_bool custom_secure_sml_data(void)
+{
+    return KAL_FALSE;
+}
+
+// internal contexts cleaning handler
+extern void sml_clean_op129_cntxt(void);
+
+void sml_clean_cntxt(void)
+{
+    if (KAL_FALSE == custom_secure_sml_data())
+    {
+        return;
+    }
+
+    // Clear MS Security
+    kal_mem_set(smu_security_info_obj, 0x00, sizeof(smu_security_info_obj));
+
+    // Clear SML context
+    kal_mem_set(&sml_gblob_s_context_obj, 0x00, sizeof(sml_gblob_s_context_obj));
+    kal_mem_set(sml_cntxt_s_obj, 0x00, sizeof(sml_cntxt_s_obj));
+    kal_mem_set(sml_sl_cntxt_obj, 0x00, sizeof(sml_sl_cntxt_obj));
+#ifdef __CARRIER_RESTRICTION__
+    kal_mem_set(smu_crrst_cntxt_obj, 0x00, sizeof(smu_crrst_cntxt_obj));
+#endif
+    kal_mem_set(sml_tmo_cntxt_obj, 0x00, sizeof(sml_tmo_cntxt_obj));
+    kal_mem_set(sml_att_cntxt_obj, 0x00, sizeof(sml_att_cntxt_obj));
+    sml_clean_vzw_cntxt();
+    sml_clean_tmo_movial_cntxt();
+    sml_clean_op129_cntxt();
+}
+
+
+/* SUCI calculation parameter for Home Network Public Key On ME */
+const kal_uint8 custom_home_nw_suci_calc_info [] = {
+ /*
+   [DO Tag | DO Length (2-byte length) | MCC/MNC (3)] | RI (2) | Scheme ID (1) | PKI(1) | Key length (2)| Key ]
+   SIM_SUCI_HN_PK_DO_TAG, 0x00, XX,
+   (Refer to 24.501 SUCI encoding format)
+        0x64, [MCC digit 2| MCC digit 1]
+        0xF0, [MNC digit 3| MCC digit 3]
+        0x10, [MNC digit 2| MNC digit 1]
+        0xF0, [RI digit 2| RI digit 1]
+        0xFF, [RI digit 4| RI digit 3]
+        0x01, [Protection Scheme ID]
+        0x01, [Home NW public Key ID]
+        0x00, 0x80, (key length)
+        0x01, 0x02,...0x80 (key)
+   SIM_SUCI_HN_PK_DO_TAG, 0x00... (next record)
+   (UT test)
+   SIM_SUCI_HN_PK_DO_TAG,0x00,0x29,
+   0x00,0xF1,0x10,0xF0,0xFF,0x01,0x01,
+   0x00,0x20,
+   0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,
+   0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20,
+
+   SIM_SUCI_HN_PK_DO_TAG,0x00,0x29,
+   0x64,0xF6,0x10,0x21,0x43,0x01,0xA2,
+   0x00,0x20,
+   0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF,0x00,
+   0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF,0x00,
+ */
+    SIM_SUCI_HN_PK_DO_TAG, 0x00, 0x00
+ };
+
+/**************************************************************************
+* FUNCTION
+*   sim_get_home_nw_suci_calc_info_table
+* DESCRIPTION
+*  Get the custom_home_nw_suci_calc_info entry.
+* PARAMETERS
+*  table_size_ptr  [OUT] size of custom table
+* RETURNS
+*  custom_home_nw_suci_calc_info entry
+**************************************************************************/
+const kal_uint8 *sim_get_home_nw_suci_calc_info_table(kal_uint16 *table_size_ptr)
+{
+    if (table_size_ptr != NULL){
+        *table_size_ptr = sizeof(custom_home_nw_suci_calc_info);
+    }
+
+    return &custom_home_nw_suci_calc_info[0];
+}
+
+/**************************************************************************
+* FUNCTION
+*   custom_sim_polling_suspend_continous_polling_counts
+* DESCRIPTION
+*   It is about the SIM polling/card presence detection suspension feature.
+*   This function is to set the maximun continues polling counter before enter polling suspend state.
+*   MD will enter SIM polling suspend state when there is only polling/card presence detection activity.
+*   Any APDU session except polling or CS call coming will resume the sim polling/card presence detection.
+*   The polling suspension is only when the card without poll interval and continous polling APDU session
+* PARAMETERS
+*   None
+* RETURNS
+*   Maximum counter to suspend the sim polling (current is set to 10)
+*   0xFF to disable SIM polling suspension
+**************************************************************************/
+kal_uint8 custom_sim_polling_suspend_continous_polling_counts(void)
+{
+    return 10; //'0xFF' to disable SIM polling suspension, '0' is RFU
+}
+
+/**************************************************************************
+* FUNCTION
+*   custom_sim_polling_suspend_extended_timer
+* DESCRIPTION
+*   This function is to set the polling/card presence detection timer when enter SIM
+*   polling suspend state.
+*   Normal polling/card presence detection timer should less 30 seconds. After enter SIM polling suspend
+*   state, the polling timer will be larger than 1 minutes
+* PARAMETERS
+*   None
+* RETURNS
+*   SIM polling/card presence detection timer unit when enter SIM polling suspend state. (Minutes)
+**************************************************************************/
+kal_uint16 custom_sim_polling_suspend_extended_timer (void)
+{
+    return 10;  //Minutes
+}
+
+/**************************************************************************
+* FUNCTION
+*   sim_check_operator_card_by_custom_iccid
+* DESCRIPTION
+*   This function is to let customer set the ICCID and operator mapping
+* PARAMETERS
+*   iccid
+* RETURNS
+*   pre-defined operator enum
+**************************************************************************/
+typedef struct {
+    kal_uint8 iccid_iin[SIM_OP_MAX_ICCID_IIN_LEN];
+    sim_operator_type_enum op_type;
+}custom_iccid_table_struct;
+
+sim_operator_type_enum sim_check_operator_card_by_custom_iccid(kal_uint8 *iccid)
+{
+    kal_uint32 i = 0, table_len = 0;
+
+    /*
+    << valid operator type >>
+    SIM_CARD_OPERATOR_CT,
+    SIM_CARD_OPERATOR_CMCC,
+    SIM_CARD_OPERATOR_CU,
+    SIM_CARD_OPERATOR_VZW,
+    SIM_CARD_OPERATOR_SPRINT,
+    SIM_CARD_OPERATOR_DT,
+    */
+    const custom_iccid_table_struct custom_iccid_table[] = {
+        {{0x98, 0x68, 0x11, 0xFF}, SIM_CARD_OPERATOR_CT},    //89-86-11, CT
+        {{0x98, 0x68, 0x30, 0xFF}, SIM_CARD_OPERATOR_CT},    //89-86-03, CT
+        {{0x98, 0x68, 0x00, 0xFF}, SIM_CARD_OPERATOR_CMCC},  //89-86-00, CMCC
+        {{0x98, 0x68, 0x20, 0xFF}, SIM_CARD_OPERATOR_CMCC},  //89-86-02, CMCC
+        {{0x98, 0x68, 0x40, 0xFF}, SIM_CARD_OPERATOR_CMCC},  //89-86-04, CMCC
+        {{0x98, 0x68, 0x70, 0xFF}, SIM_CARD_OPERATOR_CMCC},  //89-86-07, CMCC
+        {{0x98, 0x68, 0x80, 0xFF}, SIM_CARD_OPERATOR_CMCC},  //89-86-08, CMCC
+        {{0x98, 0x68, 0x10, 0xFF}, SIM_CARD_OPERATOR_CU},    //89-86-01, CU
+        {{0x98, 0x68, 0x60, 0xFF}, SIM_CARD_OPERATOR_CU},    //89-86-06, CU
+    };
+
+	if (iccid[0] != 0x98)
+    {
+        return SIM_CARD_OPERATOR_UNKNOWN;
+    }
+
+    table_len = sizeof(custom_iccid_table)/sizeof(custom_iccid_table_struct);
+
+	for (i=0; i<table_len; i++)
+    {
+        if (0 == kal_mem_cmp(&custom_iccid_table[i].iccid_iin[1], &iccid[1], 2))
+        {
+            /* IIN is up to 7 digits */
+            if ((custom_iccid_table[i].iccid_iin[3] == 0xFF) ||
+                ((custom_iccid_table[i].iccid_iin[3] & 0x0F) == (iccid[3] & 0x0F)))
+            {
+                return custom_iccid_table[i].op_type;
+            }
+        }
+    }
+
+	return SIM_CARD_OPERATOR_UNKNOWN;
+}
+
+/*
+ * Customers implement their algorithm here
+ * The size of input/output MUST be the same currently
+ * input/output (plaintext_pdu_ptr/encryp_pdu_ptr) are points to buffer
+ * Remember to copy data to the buffer
+ */
+void custom_sml_encryption(kal_uint8 *plaintext_pdu_ptr, kal_uint16 plaintext_len, kal_uint8 *encryp_pdu_ptr, kal_uint16 encryp_len)
+{
+    // encryption_api(plaintext_pdu_ptr, encryp_pdu_ptr);
+    // Directly copy the encrypted data to the encryp_pdu_ptr buffer
+
+    kal_mem_cpy(encryp_pdu_ptr, plaintext_pdu_ptr, encryp_len);
+}
+
+/*
+ * Customers implement their algorithm here
+ * The size of input/output MSUT be the same currently
+ * input/output (encryp_pdu_ptr/plaintext_pdu_ptr) are points to buffer
+ * Remember to copy data to the buffer
+ */
+void custom_sml_decryption(kal_uint8* encryp_pdu_ptr, kal_uint16 encryp_len, kal_uint8* plaintext_pdu_ptr, kal_uint16 plaintext_len)
+{
+    // decryption_api(encryp_pdu_ptr, plaintext_pdu_ptr);
+    // Directly copy the plaintext data to the plaintext_pdu_ptr buffer
+    
+    kal_mem_cpy(plaintext_pdu_ptr, encryp_pdu_ptr, plaintext_len);
+}
+
+
+#ifdef __MBIM_MS_NETWORK_BLACKLIST__
+/* define the Local variable of MBIM BLACK LIST object */
+static smu_ms_sim_black_list_context_struct smu_ms_black_list_cntxt_obj;
+static nvram_ef_ms_sim_black_list_obj_struct MSBLACKLISTOBJ;
+
+/* define MBIM BLACK LIST object */
+nvram_ef_ms_sim_black_list_obj_struct * pMSBLACKLISTg = &MSBLACKLISTOBJ;
+
+static kal_bool sml_black_list_load(void *pobjFromlid)
+{
+    kal_prompt_trace(kal_get_active_module_id(), "[SML] sml_black_list_load [Enter]");
+
+    MSBLACKLISTOBJ.pObj = &(smu_ms_black_list_cntxt_obj);
+
+    kal_mem_cpy((kal_uint8*) MSBLACKLISTOBJ.pObj,
+        (kal_uint8*) pobjFromlid,
+        sizeof(smu_ms_sim_black_list_context_struct));
+
+    return KAL_TRUE;
+}
+
+static kal_bool sml_black_list_update(void *pobjTolid)
+{
+    kal_prompt_trace(kal_get_active_module_id(), "[SML] sml_black_list_update [Enter]");
+
+    ASSERT(MSBLACKLISTOBJ.pObj != NULL);
+
+    kal_mem_cpy((kal_uint8*) pobjTolid,
+        (kal_uint8*) MSBLACKLISTOBJ.pObj,
+        sizeof(smu_ms_sim_black_list_context_struct));
+
+    return KAL_TRUE;
+}
+
+void sml_init_msblacklist_obj(void)
+{
+    nvram_ef_ms_sim_black_list_obj_struct msblacklist = {
+        NULL,
+        sml_black_list_load,
+        sml_black_list_update,
+    };
+
+    kal_mem_cpy(pMSBLACKLISTg, &msblacklist, sizeof(nvram_ef_ms_sim_black_list_obj_struct));
+}
+#endif
+
+/**************************************************************************
+* FUNCTION
+*   custom_sim_should_use_default_sst
+* DESCRIPTION
+*   This function is used to check if we should use default SIM Service Table(SST) in case we can't access EF_SST
+*
+* PARAMETERS
+*   status_word
+* RETURNS
+*   KAL_TRUE: To use the default SST
+*   KAL_FALSE: Don't use the default SST
+**************************************************************************/
+kal_bool custom_sim_should_use_default_sst(kal_uint16 status_word)
+{
+    kal_uint16 sw1 = 0;
+    kal_uint16 sw2 = 0;
+    kal_bool result = KAL_FALSE;
+    
+    /* Masking the first byte and checking the value */
+    sw1 = status_word >> 8;
+
+    /* Masking the second byte and get the legth sw2 will give the length
+     * of the data in case for which response has to be sent */
+    sw2 = status_word & 0x00ff;
+
+    switch(sw1)
+    {
+        // Normal processing
+        case 0x90:
+        case 0x91:
+        case 0x92:
+        // Postpone processing
+        case 0x93:
+        // Command not allowed
+        case 0x69:
+        // Procedure bytes
+        case 0x6C:
+        case 0x61:
+        case 0x00:
+            // Do not use the default SST
+            break;
+        case 0x6A:
+        {
+            switch(sw2)
+            {
+                // File not found
+                case 0x82:
+                // Record not found
+                case 0x83:
+                    // Do not use the default SST
+                    break;
+                default:
+                {
+                    result = KAL_TRUE;
+                    break;
+                }
+            }
+            break;
+        }
+        case 0x98:
+        {
+            switch(sw2)
+            {
+                // Authentication error, application specific
+                case 0x62:
+                // Security session or association expired
+                case 0x63:
+                    // Do not use the default SST
+                    break;
+                default:
+                {
+                    result = KAL_TRUE;
+                    break;
+                }
+            }
+            break;
+        }
+        default:
+            result = KAL_TRUE;
+            break;
+    }
+    return result;  
+}
+
+void custom_fill_blob_random(kal_uint8 *blob, kal_uint16 blob_len)
+{
+	kal_uint16 i = 0;
+    kal_uint8 inc = sizeof(kal_uint32);
+	kal_uint32 temp_rand = 0;
+#ifdef __SUPPORT_CLIB_TIME__
+    kal_uint32 seed = (kal_uint32)time(NULL);
+#else
+    kal_uint32 seed = 0;
+#endif
+    
+    srand(seed);
+	
+	if (NULL == blob || 0 == blob_len)
+	{
+		return;
+	}
+
+    for (i = 0; i < blob_len; i = i + inc)
+    {
+        kal_uint16 j = 0;
+        temp_rand = (kal_uint32)rand();
+    #ifdef __CUST_SUPPORT_TRNG__
+        CustCHL_Get_Random(&temp_rand);
+    #endif /* __CUST_SUPPORT_TRNG__ */
+
+        for (j = 0; (j < inc && (i + j) < blob_len); j++)
+        {
+            blob[i + j] = (kal_uint8)((kal_uint8 *)&temp_rand)[j];
+        }
+
+        if (i + j >= blob_len)
+        {
+            break;
+        }
+    }
+    
+    return;
+}
+
+/*************************************************************************
+* FUNCTION
+*  custom_sim_read_binary_p3_support_zero
+* DESCRIPTION
+*  Determine the parameter p3 in the APDU READ BINARY can be 0x00 or not
+*      KAL_TRUE  : P3 can be 0x00.
+*      KAL_FALSE : The maximum length(p3) is 0xFF.
+*
+* PARAMETERS
+*  none
+* RETURNS
+*  kal_bool
+*************************************************************************/
+kal_bool custom_sim_read_binary_p3_support_zero(void)
+{
+   return KAL_TRUE;
+}
+
+/*************************************************************************
+* FUNCTION
+*  custom_allow_to_configure_test_sim_mode_from_nvram
+* DESCRIPTION
+*  Allow to configure the test sim mode from the nvram
+*      KAL_TRUE  : allow.
+*      KAL_FALSE : not allow.
+*
+* PARAMETERS
+*  none
+* RETURNS
+*  kal_bool
+*************************************************************************/
+kal_bool custom_allow_to_configure_test_sim_mode_from_nvram(void)
+{
+#ifdef __MTK_INTERNAL_ENG_USER__ 
+   return KAL_TRUE;
+#else
+   return KAL_FALSE;
+#endif
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_sat_allow_session_reset_null_filelist
+* DESCRIPTION
+*  This function is used to add mcc-mnc for which refresh session reset is allowed with null file list
+*  KAL_TRUE: allow
+*  KAL_FALSE: dont allow
+* PARAMETERS
+*  N/A
+* RETURNS
+*  KAL_FALSE or KAL_TRUE
+*****************************************************************************/
+kal_bool custom_sat_allow_session_reset_null_filelist(const kal_char *mcc_mnc_str)
+{
+
+   const kal_char *op_list[] = {
+                                "334020"
+                               };
+
+
+   kal_uint8 op_list_count = sizeof(op_list)/sizeof(op_list[0]);
+   kal_uint8 index = 0;
+   kal_uint8 length = strlen(mcc_mnc_str);
+
+   for (index = 0; index < op_list_count; index++)
+   {
+       if(length == strlen(op_list[index]))
+       {
+           if ((0 == (strncmp(op_list[index], mcc_mnc_str, length)))) 
+           {
+               return KAL_TRUE;
+           }
+       }
+   }
+
+   return KAL_FALSE;
+}
+#endif /* !defined(__MAUI_BASIC__) */
+
diff --git a/mcu/custom/protocol/common/ps/custom_nvram_extra.h b/mcu/custom/protocol/common/ps/custom_nvram_extra.h
new file mode 100644
index 0000000..8207667
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_nvram_extra.h
@@ -0,0 +1,841 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * custom_nvram_extra.h
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *    This file defines the methods to manuplate the file object defined in NVRAM data items.
+ *
+ *
+ * Author:
+ * -------
+ * -------
+ ****************************************************************************/
+#ifndef CUSTOM_NVRAM_EXTRA_H
+#define CUSTOM_NVRAM_EXTRA_H
+
+//#include "kal_non_specific_general_types.h"
+#include "kal_general_types.h"
+#include "ps_public_enum.h"
+#include "sim_ps_enum.h"
+
+#ifndef L4_NOT_PRESENT
+/*#define SML_TRACE    kal_brief_trace*/
+#else
+#define SML_TRACE(...)
+#endif
+
+#ifndef SIM_NOT_PRESENT
+#define SIM_TRACE    kal_brief_trace
+#else
+#define SIM_TRACE(...)
+#endif
+
+#if !defined(__MAUI_BASIC__)
+
+#ifndef ATEST_ENABLE
+#include "mcd_l3_inc_struct.h"
+#endif
+#include "nvram_data_items.h"
+#include "vsim_nvram_def.h"
+
+/*****************************************************************************
+* Define
+*****************************************************************************/
+/*****************************************************************************
+* Typedef
+*****************************************************************************/
+/*
+ *   BEGIN:PH add for smu_security_info_struct (NVRAM_EF_MS_SECURITY_LID)
+ * typedef struct
+ * {
+ *     kal_uint8                reg_ps_key[NVRAM_EDITOR_NUM_OF_BYTE_KEY];
+ *     kal_uint8                security_indication;
+ *     kal_uint8                auto_lock_item;
+ *     kal_uint8                np_code[NVRAM_EDITOR_NUM_OF_BYTE_NP * NVRAM_EDITOR_NUM_NP];
+ *     kal_uint8                np_key[NVRAM_EDITOR_NUM_OF_BYTE_KEY];
+ *     kal_uint8                nsp_code[NVRAM_EDITOR_NUM_OF_BYTE_NSP * NVRAM_EDITOR_NUM_NSP];
+ *     kal_uint8                nsp_key[NVRAM_EDITOR_NUM_OF_BYTE_KEY];
+ *     kal_uint8                np_of_sp[NVRAM_EDITOR_NUM_OF_BYTE_NP];
+ *     kal_uint8                np_of_cp[NVRAM_EDITOR_NUM_OF_BYTE_NP];
+ *     kal_uint8                gid1[NVRAM_EDITOR_NUM_GID];
+ *     kal_uint8                gid2[NVRAM_EDITOR_NUM_GID];
+ *     kal_uint8                sp_key[NVRAM_EDITOR_NUM_OF_BYTE_KEY];
+ *     kal_uint8                cp_key[NVRAM_EDITOR_NUM_OF_BYTE_KEY];
+ *     kal_uint8                imsi_code[NVRAM_EDITOR_NUM_OF_BYTE_IMSI];
+ *     kal_uint8                imsi_key[NVRAM_EDITOR_NUM_OF_BYTE_KEY];
+ *     kal_uint8                phone_key[NVRAM_EDITOR_NUM_OF_BYTE_KEY];
+ *     kal_uint8                last_imsi[NVRAM_EDITOR_NUM_OF_BYTE_IMSI];
+ *     kal_uint8                pin1[NVRAM_EDITOR_NUM_PIN1];
+ *     kal_uint8                pin1_valid;
+ *     kal_uint8                phone_lock_verified;
+ *  }smu_security_info_struct;
+ *
+ */
+typedef enum
+{
+    SMU_REG_PS_KEY_A,
+    SMU_SECURITY_INDICATION_U8,
+    SMU_AUTO_LOCK_ITEM_U8,
+    SMU_NP_CODE_A,
+    SMU_NP_KEY_A,
+    SMU_NSP_CODE_A,
+    SMU_NSP_KEY_A,
+    SMU_NP_OF_SP_A,
+    SMU_NP_OF_CP_A,
+    SMU_GID1_A,
+    SMU_GID2_A,
+    SMU_SP_KEY_A,
+    SMU_CP_KEY_A,
+    SMU_IMSI_CODE_A,
+    SMU_IMSI_KEY_A,
+    SMU_PHONE_KEY_A,
+    SMU_LAST_IMSI_A,
+    SMU_PIN1_A,
+    SMU_PIN1_VALID_U8,
+    SMU_PHONE_LOCK_VERIFIED_U8,
+    SMU_ICCID_A
+} smu_item_enum;
+
+typedef enum
+{
+    SML_GBLOB_MAJOR_VER_U8,
+    SML_GBLOB_MINOR_VER_U8,
+    SML_GBLOB_DEVICE_LOCK_STATE_U8,
+    SML_GBLOB_IMEI_1_A,
+    SML_GBLOB_IMEI_2_A,
+    SML_GBLOB_IMEI_3_A,
+    SML_GBLOB_IMEI_4_A,
+    SML_GBLOB_SML_LOCK_RULE_U8,
+    SML_GBLOB_SML_LOCK_SUB_RULE_A,
+#ifdef __CUST_SML_RULE__
+    SML_GBLOB_SML_CUST_CODE_U8,
+    SML_GBLOB_SML_CUST_RULE_U8,
+#endif
+    SML_GBLOB_TLV_DATA_A,
+    SML_GBLOB_DEV_PROTECT_ALGO_U8,
+    SML_GBLOB_DEV_MAX_RETRY_CNT_A,
+    SML_GBLOB_DEV_REMAIN_RETRY_CNT_A,
+    SML_GBLOB_DEVICE_LOCK_INT_CNT_A,
+    SML_GBLOB_DEVICE_LOCK_SALT_A,
+    SML_GBLOB_DEVICE_LOCK_HCK_A,
+    SML_GBLOB_SIG_PROTECT_ALGO_U8,
+    SML_GBLOB_SIGNATURE_A,
+} smu_gblob_item_enum;
+
+typedef struct
+{
+    /* Data object ptr */
+    void *smu_security_info_ptr;
+    /* Load a new data object */
+      kal_bool(*load) (void *, kal_uint8);             /* pobjFromlid */
+    /* Update a the data object */
+      kal_bool(*update) (void *, kal_uint8);           /* pobjTolid */
+    /* Release the data object */
+      kal_bool(*destoy) (kal_uint8);
+    /* Query the value of the item in kal_uint8 */
+      kal_uint8(*query_u8) (smu_item_enum, kal_uint8); /* eItem */
+    /* Query the value of the item in kal_uint8[] */
+    void (*query_a) (smu_item_enum,         /* eItem */
+                     kal_uint8 *,           /* pstrTo */
+                     kal_uint8,
+                     kal_uint8);            /* chlen */
+    /* Assign the value of the item in kal_uint8 */
+    void (*assign_u8) (smu_item_enum,       /* eItem */
+                       kal_uint8, kal_uint8);          /* Value */
+    /* Assign the value of the item in string with length */
+    void (*assign_a) (smu_item_enum,        /* eItem */
+                      kal_uint8 *,          /* pValue */
+                      kal_uint8,
+                      kal_uint8);           /* len */
+    /* Compare the string with the data item */
+      kal_bool(*match) (smu_item_enum,      /* eItem */
+                        kal_uint8 *,        /* pstr */
+                        kal_uint8,
+                        kal_uint8);         /* len */
+} nvram_ef_ms_security_struct;
+
+typedef struct
+{
+    /* Data object ptr */
+    void *gblob_data_ptr;
+    /* Load a new data object */
+    kal_bool(*load) (void *);
+    /* Update a the data object */
+    kal_bool(*update) (void *);
+    /* Query the value of the item in kal_uint8 */
+    kal_uint8(*query_u8) (smu_gblob_item_enum); /* eItem */
+    /* Query the value of the item in kal_uint8[] */
+    void (*query_a) (smu_gblob_item_enum,         /* eItem */
+                     kal_uint8 *,           /* pstrTo */
+                     kal_uint8);            /* chlen */
+    /* Assign the value of the item in kal_uint8 */
+    void (*assign_u8) (smu_gblob_item_enum,       /* eItem */
+                       kal_uint8);          /* Value */
+    /* Assign the value of the item in string with length */
+    void (*assign_a) (smu_gblob_item_enum,         /* eItem */
+                      kal_uint8 *,          /* pValue */
+                      kal_uint8);           /* len */
+    /* Compare the string with the data item */
+    kal_bool(*match) (smu_gblob_item_enum,      /* eItem */
+                      kal_uint8 *,        /* pstr */
+                      kal_uint8);         /* len */
+} nvram_ef_gblob_data_struct;
+
+/******************************************************************************
+ * New SML Architecture
+ *****************************************************************************/
+/******************************************************************************
+ *    typedef struct {
+ *        kal_uint32  magic_head;
+ *        sml_category_meta_struct    cat[SML_CAT_SIZE];
+ *        sml_control_key_struct      key[SML_CAT_SIZE];
+ *        kal_uint8   code_cat_n[SML_CFG_CAT_N_SIZE];
+ *        kal_uint8   code_cat_ns[SML_CFG_CAT_NS_SIZE];
+ *        kal_uint8   code_cat_sp[SML_CFG_CAT_SP_SIZE];
+ *        kal_uint8   code_cat_c[SML_CFG_CAT_C_SIZE];
+ *        kal_uint8   code_cat_sim[SML_CFG_CAT_SIM_SIZE];
+ *        kal_uint8   code_cat_ns_sp[SML_CFG_CAT_NS_SP_SIZE];
+ *        kal_uint8   code_cat_sim_c[SML_CFG_CAT_SIM_C_SIZE];
+ *        kal_uint8   range_cat_ns[SML_CAT_NS_RANGE_SIZE]
+ *        kal_uint32 magic_tail;
+ *    } sml_context_struct;
+ *****************************************************************************/
+
+
+typedef struct {
+    void    * pObj;
+    void    (* give)(void * /* pLidToObj */, kal_uint8);
+    void    (* take)(void * /* pObjToLid */, kal_uint8);
+    void    (* destory)(kal_uint8);
+    void    * (* getItem)(sml_cat_enum,sml_ctx_enum,kal_uint16 * /* length */, kal_uint8);
+    void    (* putItem)(sml_cat_enum,sml_ctx_enum,void * /* pItem */, kal_uint16 * /* plen */, kal_uint8);
+} nvram_ef_sml_obj_struct;
+
+
+#ifdef __CARRIER_RESTRICTION__
+typedef struct {
+    void    * pObj;
+    void    (* give)(void * /* pLidToObj */, kal_uint8);
+    void    (* take)(void * /* pObjToLid */, kal_uint8);
+    void    (* destory)(kal_uint8);
+    void    * (* getItem)(smu_crrst_cat_enum,sml_ctx_enum,kal_uint16 * /* length */, kal_uint8);
+    void    (* putItem)(smu_crrst_cat_enum,sml_ctx_enum,void * /* pItem */, kal_uint16 * /* plen */, kal_uint8);
+    void    * (*getList)(sml_ctx_enum, kal_uint16 *, kal_uint8);
+} nvram_ef_smu_crrst_obj_struct;
+#endif /* __CARRIER_RESTRICTION__ */
+
+#ifdef __MBIM_MS_NETWORK_BLACKLIST__
+typedef struct {
+    void        * pObj;
+    kal_bool    (* load)(void * /* pLidFromObj */);
+    kal_bool    (* update)(void * /* pObjToLid */);
+}nvram_ef_ms_sim_black_list_obj_struct;
+#endif
+
+/*****************************************************************************
+* Extern Global Variable
+*****************************************************************************/
+
+/* Moudle other than SMU should not directly access global pointer pSmuSecurityInfog */
+// extern nvram_ef_ms_security_struct *pSmuSecurityInfog;
+extern nvram_ef_gblob_data_struct  *pGblobData;
+extern nvram_ef_sml_obj_struct *pSMLg;
+
+#ifdef __CARRIER_RESTRICTION__
+extern nvram_ef_smu_crrst_obj_struct * pCRRSTg;
+#endif
+
+#ifdef __MBIM_MS_NETWORK_BLACKLIST__
+extern nvram_ef_ms_sim_black_list_obj_struct * pMSBLACKLISTg;
+#endif
+
+/************************************************************************
+ * Test SIM card handling
+ ************************************************************************/
+#define SML_TESTSIM_ALW_REJECT  0
+#define SML_TESTSIM_ALW_ALLOW   1
+#define SML_TESTSIM_INI_ALLOW   2
+/* Customer defined field */
+#define SML_TESTSIM_OP_MODE     SML_TESTSIM_ALW_ALLOW
+
+extern kal_uint8 sml_Testsim_op_mode(void);
+
+/************************************************************************
+ * MASTER-SLAVE Behavior
+ ************************************************************************/
+/* Customer defined field */
+#define SML_MASTER_KEY_ENABLE     KAL_FALSE
+
+extern kal_bool sml_is_Masterkey_enable(void);
+/************************************************************************
+* Define whether use sim mnc length or nvram
+* used by sml_Getcode
+* 0:nvram,1:sim
+************************************************************************/
+#define SML_MNC_LENGTH_NEST    1
+
+#define ITER_COUNT_DEFAULT_VAL 0X186A0
+/*****************************************************************************
+* Extern Global Function
+*****************************************************************************/
+extern void smu_init_gblob_data_obj();
+extern kal_uint16 sml_gblob_Load(void *pLid);
+extern void smu_init_ms_security_obj(kal_uint8 source);
+extern nvram_ef_ms_security_struct* smu_get_ms_security_ptr(kal_uint8 ps_id);
+extern void sml_init_sml_obj(kal_uint8 source);
+extern kal_uint16 sml_Load( void * pLid, kal_uint8 source );
+extern kal_uint16 sml_Save( void * pLid, kal_uint8 source );
+extern kal_bool sml_Unlock( sml_cat_enum cat,
+                            kal_uint8 * key,
+                            kal_uint8 key_len,
+                            kal_uint8 source );
+extern kal_bool sml_Lock( sml_cat_enum cat,
+                          kal_uint8 * key,
+                          kal_uint8 key_len,
+                          kal_uint8 source );
+extern kal_bool sml_Add( sml_cat_enum cat,
+                         kal_uint8 * code,
+                         kal_uint8 len,
+                         kal_uint8 * key,
+                         kal_uint8 key_len,
+                         kal_uint8 * remain,
+                         kal_uint8 source );
+extern kal_bool sml_Remove( sml_cat_enum cat, kal_uint8 source );
+extern kal_bool sml_Reset( sml_cat_enum cat,
+                           kal_uint8 * key,
+                           kal_uint8 key_len,
+                           kal_uint8 source );
+extern kal_bool sml_Disable( sml_cat_enum cat, kal_uint8 source );
+extern void sml_Status( sml_cat_enum cat,
+                        sml_state_enum * state,
+                        kal_uint32 * retry_count,
+                        kal_uint8 * num_of_sets,
+                        kal_uint8 * space_of_sets,
+                        sml_key_state_enum * key_state,
+                        kal_uint8 * auto_lock_count,
+                        kal_uint8 source );
+extern kal_bool sml_Autolock( sml_cat_enum cat,
+                              kal_uint8 * code,
+                              kal_uint8 len,
+                              kal_uint8 * remain,
+                              kal_uint8 source );
+extern kal_uint8 sml_Catcode( sml_cat_enum cat,
+                              kal_uint8 * imsi,
+                              kal_uint8 * gid1,
+                              kal_uint8 * gid2,
+                              kal_uint8 mnc_len,
+                              kal_uint8 * code,
+                              kal_uint8 source );
+extern kal_bool sml_Check( sml_cat_enum cat,
+                           kal_uint8 * imsi,
+                           kal_uint8 * gid1,
+                           kal_uint8 * gid2,
+                           kal_uint16 num_cnl,
+                           kal_uint8 * cnl,
+                           kal_uint8 * dck,
+                           kal_uint8 sim_mnc_len,
+                           kal_uint32 * remain,
+                           kal_uint8 source);
+
+extern void sml_init_max_retry_count_obj(kal_uint8 source);
+
+extern kal_uint16 sml_max_retry_count_Load(void * pLid, kal_uint8 source);
+
+extern kal_bool sml_check_and_update_retry_count(kal_uint8 source);
+
+extern void sml_get_lock_codes(kal_uint8 * num_of_sets,
+                        kal_uint8 * code_cat_n,
+                        kal_uint8 * code_cat_ns,
+                        kal_uint8 * code_cat_sp,
+                        kal_uint8 * code_cat_c,
+                        kal_uint8 * code_cat_sim,
+                        kal_uint8 * code_cat_ns_sp,
+                        kal_uint8 * code_cat_sim_c,
+                        kal_uint8 source);
+
+extern kal_uint16 sml_mrc_Save(void *pLid, kal_uint8 source);
+
+#ifdef __CARRIER_RESTRICTION__
+extern void sml_init_crrst_obj(kal_uint8 source);
+extern kal_uint16 sml_crrst_Load( void *pLid, kal_uint8 source );
+extern kal_bool sml_crrst_Check(sml_ctx_enum list,
+                           smu_crrst_cat_enum cat,
+                           kal_uint8 * imsi,
+                           kal_uint8 * gid1,
+                           kal_uint8 * gid2,
+                           kal_uint8 * spn,
+                           kal_uint8 sim_mnc_len,
+                           kal_uint8 source);
+extern kal_uint8 sml_crrst_GetCode( smu_crrst_cat_enum cat,
+                              kal_uint8 * imsi,
+                              kal_uint8 * gid1,
+                              kal_uint8 * gid2,
+                              kal_uint8 * spn,
+                              kal_uint8 sim_mnc_len,
+                              kal_uint8 * pdata,
+                              kal_uint8 * code);
+extern kal_uint8 sml_crrst_Catcode( smu_crrst_cat_enum cat,
+                              kal_uint8 * imsi,
+                              kal_uint8 * gid1,
+                              kal_uint8 * gid2,
+                              kal_uint8 * spn,
+                              kal_uint8 mnc_len,
+                              kal_uint8 * code );
+extern kal_bool sml_crrst_Unlock(kal_uint8 * key,
+                            kal_uint8 key_len,
+                            kal_uint8 source );
+extern kal_bool sml_crrst_Lock(kal_uint8 *key,
+                            kal_uint8 key_len,
+                            kal_uint8 source);
+extern kal_bool sml_crrst_Add( smu_crrst_cat_enum cat,
+                               kal_uint8 list,
+                               kal_uint8 *code,
+                               kal_uint8 len,
+                               kal_uint8 source);
+extern kal_bool sml_crrst_Remove( smu_crrst_cat_enum cat,
+                               kal_uint8 list,
+                               kal_uint8 *code,
+                               kal_uint8 len,
+                               kal_uint8 source);
+
+extern kal_bool sml_crrst_Disable(kal_uint8 * key,
+                     kal_uint8 key_len,
+                     kal_uint8 source);
+
+extern kal_bool sml_crrst_Enable(kal_uint8 * key,
+                     kal_uint8 key_len,
+                     kal_uint8 source);
+
+extern kal_bool sml_crrst_Remove_All(kal_uint8 source);
+
+extern kal_bool sml_crrst_Remove_WhiteList(kal_uint8 source);
+
+extern kal_bool sml_crrst_Remove_BlackList(kal_uint8 source);
+
+extern kal_uint16 sml_crrst_Save( void *pLid, kal_uint8 source );
+
+extern kal_bool sml_crrst_Status(smu_crrst_state_enum *state,
+                                kal_uint8 *multi_sim_policy,
+                                kal_uint8 *allowed_carriers_prioritized,
+                                smu_carrier_restriction_list_struct *white_list,
+                                smu_carrier_restriction_list_struct *black_list,
+                                kal_uint8 source);
+
+extern kal_bool sml_crrst_Update_MSP_ACP(kal_uint8 *key,
+                                                  kal_uint8 key_len,
+                                                  kal_uint8 multi_sim_policy,
+                                                  kal_uint8 allowed_carriers_prioritized,
+                                                  kal_uint8 source);
+
+extern kal_bool sml_UpdateCrrstCatKeyData(kal_uint8 algo_type,
+                                            kal_uint32 max_retry_count,
+                                            kal_uint8 *hck,
+                                            kal_uint8 *salt,
+                                            kal_uint8 *inter_cnt,
+                                            kal_uint8 source);
+#endif
+
+
+extern void sml_Dump(kal_char *title, kal_uint8 *pData, kal_uint16 len);
+
+// TMO / ATT SML Common
+extern kal_uint16 sml_GetCount( kal_uint8 *pData );
+#ifndef ATEST_ENABLE
+extern kal_uint32 sml_rsu_nwTimeToSeconds(kal_uint8 nw_time_zone, nw_time_zone_time_struct *nw_time);
+#endif
+
+// TMO SML
+extern void sml_tmo_printkey(t_cust_chl_sym_key *key);
+#ifndef ATEST_ENABLE
+extern kal_bool sml_tmo_UpdateNwTimeAndCheckTempLock(kal_uint8 source, kal_uint8 nw_time_zone, nw_time_zone_time_struct *nw_time);
+#endif
+extern kal_bool sml_tmo_CheckTempUnlock(kal_uint8 source);
+extern kal_bool sml_tmo_FirstLoad( void *pLid, kal_uint8 source );
+extern kal_uint16 sml_tmo_Load( void * pLid, kal_uint8 source );
+extern kal_uint16 sml_tmo_Save( void * pLid, kal_uint8 source );
+extern kal_bool sml_tmo_Check( sml_cat_enum cat,
+                           kal_uint8 * imsi,
+                           kal_uint8 * gid1,
+                           kal_uint8 * gid2,
+                           kal_uint8 sim_mnc_len,
+                           kal_uint8 * remain,
+                           kal_uint8 source);
+extern kal_uint8 sml_tmo_Catcode( sml_cat_enum cat,
+                              kal_uint8 * imsi,
+                              kal_uint8 * gid1,
+                              kal_uint8 * gid2,
+                              kal_uint8 mnc_len,
+                              kal_uint8 * code );
+extern kal_uint8 sml_tmo_GetCode( sml_cat_enum cat,
+                              kal_uint8 * imsi,
+                              kal_uint8 * gid1,
+                              kal_uint8 * gid2,
+                              kal_uint8 sim_mnc_len,
+                              kal_uint8 * pdata,
+                              kal_uint8 * code);
+extern void sml_tmo_GetVersion(kal_uint8 *version, kal_uint8 source);
+extern kal_uint8 *sml_ReconstructBlob( sml_tmo_context_struct *pObj, kal_uint32 *pLen );
+extern kal_uint8 *sml_tmo_get_modem_config_ReconstructBlob( sml_tmo_context_struct *pObj, kal_uint16 *pLen, kal_uint8 *pData );
+extern kal_uint8 *sml_ConstructBlob( kal_uint8 *pObj, kal_uint16 slb_len);
+extern kal_uint16 sml_tmo_getSize();
+extern void sml_GetLockState(kal_uint8 *lock_state, kal_uint8 source);
+extern kal_uint32 sml_GetUnlockTimeLeft(kal_uint8 source);
+
+// ATT SML
+#ifndef ATEST_ENABLE
+extern kal_bool sml_att_UpdateNwTimeAndCheckTempLock(kal_uint8 source, kal_uint8 nw_time_zone, nw_time_zone_time_struct *nw_time);
+#endif
+extern kal_bool sml_att_CheckTempUnlock(kal_uint8 source);
+extern kal_bool sml_att_FirstLoad( void *pLid, kal_uint8 source );
+extern kal_uint16 sml_att_Load( void * pLid, kal_uint8 source );
+extern kal_uint16 sml_att_Save( void * pLid, kal_uint8 source );
+extern kal_bool sml_att_Check( sml_cat_enum cat,
+                           kal_uint8 * imsi,
+                           kal_uint8 * gid1,
+                           kal_uint8 * gid2,
+                           kal_uint8 sim_mnc_len,
+                           kal_uint8 * remain,
+                           kal_uint8 source);
+extern kal_uint8 sml_att_Catcode( sml_cat_enum cat,
+                              kal_uint8 * imsi,
+                              kal_uint8 * gid1,
+                              kal_uint8 * gid2,
+                              kal_uint8 mnc_len,
+                              kal_uint8 * code );
+extern kal_uint8 sml_att_GetCode( sml_cat_enum cat,
+                              kal_uint8 * imsi,
+                              kal_uint8 * gid1,
+                              kal_uint8 * gid2,
+                              kal_uint8 sim_mnc_len,
+                              kal_uint8 * pdata,
+                              kal_uint8 * code);
+extern void sml_att_GetVersion(kal_uint8 *version, kal_uint8 source);
+extern void sml_att_GetLockState(kal_uint8 *lock_state, kal_uint8 source);
+extern kal_uint32 sml_att_GetUnlockTimeLeft(kal_uint8 source);
+extern kal_uint8 *sml_att_ReconstructBlob( sml_att_context_struct *pObj, kal_uint32 *pLen );
+extern kal_uint8 *sml_att_get_modem_config_ReconstructBlob( sml_att_context_struct *pObj, kal_uint16 *pLen, kal_uint8 *pData );
+extern kal_uint8 *sml_att_ConstructBlob( kal_uint8 *pObj, kal_uint16 slb_len);
+extern kal_uint16 sml_att_getSize();
+
+extern kal_uint16 sml_Nvram_get_lid_size( kal_uint16 file_idx );
+extern kal_bool sml_Process_autolock( kal_uint8 * imsi,
+                                      kal_uint8 * gid1,
+                                      kal_uint8 * gid2,
+                                      kal_uint8 num_mnc,
+                                      kal_uint8 * remain_count,
+                                      kal_uint8 source );
+
+extern kal_bool sml_Is_autolock( kal_uint8 source );
+
+extern kal_bool sml_Verify( sml_cat_enum cat,
+                             kal_uint8 * key,
+                             kal_uint8 len,
+                             kal_uint32 * retry_count,
+                             kal_uint8 source );
+extern kal_bool sml_Verify_OTA( sml_cat_enum cat,
+                                kal_uint8 * key,
+                                kal_uint8 len,
+                                kal_uint8 source );
+extern kal_bool sml_CheckVisa(const kal_uint8 * imsi,
+                              kal_uint8 mnc_len);
+
+/*[MAUI_01634719] mtk01612: common API to query state*/
+extern kal_uint8 sml_query_state( sml_cat_enum cat,
+                 kal_uint8 source);
+/*Function to get code whether mnc length is 2 or 3 */
+extern kal_uint8 sml_GetCode( sml_cat_enum cat,
+                              kal_uint8 * imsi,
+                              kal_uint8 * gid1,
+                              kal_uint8 * gid2,
+                              kal_uint8 sim_mnc_len,
+                              kal_uint8 * pdata,
+                              kal_uint8 * code,
+                              kal_uint8 source);
+
+extern void custom_fill_blob_random(kal_uint8 *blob, kal_uint16 blob_len);
+extern void sml_custom_context_selection(kal_uint8 sim_interface);
+
+#ifdef __CHANGE_SML_KEY__
+extern kal_bool sml_ChangePW(sml_cat_enum cat,
+                             kal_uint32 *lock_count,
+	                    kal_uint8 *key1,
+	                    kal_uint8 *key2,
+	                    kal_uint8 len,
+	                    kal_uint8 source);
+#endif
+
+extern kal_bool smu_is_write_protect2(nvram_lid_enum file_idx);
+extern kal_bool smu_CheckHplmnIsLteOnly(const kal_uint8 * imsi, kal_uint8 mnc_len);
+extern kal_bool smu_CheckHplmnIsCt(const kal_uint8 * imsi, kal_uint8 mnc_len);
+
+kal_uint8 *custom_get_sim_operator_query_table(sim_operator_type_enum operator_type, sim_operator_check_method_enum query_type);
+
+extern kal_uint16 sml_sl_getBlobSize();
+extern kal_uint8 *sml_sl_ConstructBlob(kal_uint8 *pObj, kal_uint16 slb_len, kal_uint16 *error_cause, kal_uint8 source);
+extern kal_uint8 *sml_sl_ConstructSmlBlob(sml_sl_blob_context_struct *pObj, kal_uint8 source);
+extern kal_uint16 sml_sl_Load(void * pLid,
+                            void * psmlLid,
+                            kal_uint8 source,
+                            kal_bool first_load,
+                            kal_uint8 * public_key_modulus,
+                            kal_uint8 * public_key_exponent);
+extern kal_uint16 sml_sl_Save(void * pLid, kal_uint8 source);
+extern kal_bool sml_sl_Check(sml_cat_enum cat,
+                           kal_uint8 * imsi,
+                           kal_uint8 * gid1,
+                           kal_uint8 sim_mnc_len,
+                           kal_uint8 source);
+extern kal_uint8 sml_sl_GetCode(sml_cat_enum cat,
+                              kal_uint8 * imsi,
+                              kal_uint8 * gid1,
+                              kal_uint8 sim_mnc_len,
+                              kal_uint8 * pdata,
+                              kal_uint8 * code);
+extern kal_bool sml_sl_Verify(sml_cat_enum cat,
+                             kal_uint8 * key,
+                             kal_uint8 len,
+                             kal_uint8 source);
+
+extern kal_bool custom_sml_is_nvram_accessable_check(nvram_lid_enum file_idx);
+
+extern kal_bool custom_sml_is_gblob_enabled(void);
+extern kal_bool custom_sml_is_gblob_imei_verification_enabled(void);
+extern kal_bool custom_sml_is_eslblob_allow(void);
+extern kal_bool custom_sml_is_eslblobf_allow(void);
+extern kal_bool custom_sml_is_nonctrlslot_allow_unlock(void);
+extern kal_bool custom_sml_is_secured_simme_cntxt_enabled(void);
+extern kal_bool custom_sml_is_nonctrlslot_always_lock_check(void);
+extern kal_bool custom_sml_is_nonctrlslot_allow_sml_check(void);
+
+extern kal_bool custom_secure_sml_data(void);
+extern void sml_clean_cntxt(void);
+
+/* SML Customized NVRAM */
+extern void custom_sml_read_custom_nvram(kal_uint8 ps_id);
+#ifdef __CUST_SML_RULE__
+extern void custom_sml_query_gblob_rule_by_cust_rule(kal_uint8 *lock_rule,
+                                                     kal_uint8 lock_sub_rule[SML_GBLOB_SUB_RULE_SIZE]);
+#endif
+extern kal_bool custom_sml_update_gblob_lock_setting(void);
+
+
+#ifdef __VSIM__
+extern kal_bool custom_vsim_read_nvram_file(kal_uint8 profile_id, uicc_card_type_enum vsim_type, nvram_vsim_ef_file_struct *vsim_ef_buf);
+
+extern kal_bool custom_vsim_write_nvram_file(kal_uint8 profile_id, kal_uint16 file_id, uicc_card_type_enum vsim_type, nvram_vsim_ef_file_struct *vsim_ef_buf);
+
+extern kal_bool custom_vsim_file_instance(kal_uint8 profile_id, kal_uint8 vsim_type, kal_uint8 *file_id, kal_uint8** file_ptr);
+
+extern kal_int8 custom_vsim_get_gsm_auth(kal_uint8 sim_auth_algo, kal_uint8 *ki, kal_uint8 *rand, kal_uint8 *sres, kal_uint8 *kc);
+
+extern kal_int8 custom_vsim_get_usim_auth(kal_uint8 usim_auth_algo, kal_uint8 *opc, kal_uint8 *ki, kal_uint8 *rand, kal_uint8 *autn, kal_uint8 *ik, kal_uint8 *ck, kal_uint8 *res, kal_uint32 *res_len, kal_uint8 *auts);
+
+#define EF_META_SIZE 32
+#define EF_DATA_SIZE 32
+#ifndef __MDVSIM__
+#define EF_U_META_SIZE 64
+#else
+#define EF_U_META_SIZE 96
+#endif
+#define EF_U_DATA_SIZE 32
+
+extern kal_uint8 DF_GSM_data[EF_META_SIZE+EF_DATA_SIZE];
+extern kal_uint8 EF_ICCID_data[EF_META_SIZE+EF_DATA_SIZE];
+extern kal_uint8 EF_LP_data[EF_META_SIZE+EF_DATA_SIZE];
+extern kal_uint8 EF_SST_data[EF_META_SIZE+EF_DATA_SIZE];
+extern kal_uint8 EF_PHASE_data[EF_META_SIZE+EF_DATA_SIZE];
+extern kal_uint8 EF_IMSI_data[EF_META_SIZE+EF_DATA_SIZE];
+extern kal_uint8 EF_AD_data[EF_META_SIZE+EF_DATA_SIZE];
+extern kal_uint8 EF_ACC_data[EF_META_SIZE+EF_DATA_SIZE];
+extern kal_uint8 EF_KC_data[EF_META_SIZE+EF_DATA_SIZE];
+extern kal_uint8 EF_LOCI_data[EF_META_SIZE+EF_DATA_SIZE];
+extern kal_uint8 EF_HPPLMN_data[EF_META_SIZE+EF_DATA_SIZE];
+extern kal_uint8 EF_BCCH_data[EF_META_SIZE+EF_DATA_SIZE];
+extern kal_uint8 EF_FPLMN_data[EF_META_SIZE+EF_DATA_SIZE];
+
+#if defined(__VSIM__) && defined(__TC01__) && defined(__FEATURE_TC01_SIMOFF_EXTENTION__) && defined(__MDVSIM__)
+extern kal_uint8 EF_GID1_data[EF_META_SIZE+EF_DATA_SIZE];
+extern kal_uint8 EF_SPN_data[EF_META_SIZE+EF_DATA_SIZE];
+#endif /*#if defined(__VSIM__) && defined(__TC01__) && defined(__FEATURE_TC01_SIMOFF_EXTENTION__) && defined(__MDVSIM__)*/
+
+/* USIM file*/
+extern kal_uint8 EF_AUTH_data[258];
+
+#ifndef __MDVSIM__
+extern const kal_uint8 ADF_USIM_data[EF_U_META_SIZE + EF_U_DATA_SIZE];
+extern const kal_uint8 EF_U_ELP_data[EF_U_META_SIZE + EF_U_DATA_SIZE];
+extern const kal_uint8 EF_U_ICCID_data[EF_U_META_SIZE + EF_U_DATA_SIZE];
+extern const kal_uint8 EF_U_PSLOCI_data[EF_U_META_SIZE + EF_U_DATA_SIZE];
+extern const kal_uint8 EF_U_ACC_data[EF_U_META_SIZE + EF_U_DATA_SIZE];
+extern const kal_uint8 EF_U_LOCI_data[EF_U_META_SIZE + EF_U_DATA_SIZE];
+extern const kal_uint8 EF_U_AD_data[EF_U_META_SIZE + EF_U_DATA_SIZE];
+extern const kal_uint8 EF_U_IMSI_data[EF_U_META_SIZE + EF_U_DATA_SIZE];
+extern const kal_uint8 EF_U_HPPLMN_data[EF_U_META_SIZE + EF_U_DATA_SIZE];
+extern const kal_uint8 EF_U_UST_data[EF_U_META_SIZE + EF_U_DATA_SIZE];
+extern const kal_uint8 EF_U_EST_data[EF_U_META_SIZE + EF_U_DATA_SIZE];
+extern const kal_uint8 EF_U_PLMNWACT_data[EF_U_META_SIZE + EF_U_DATA_SIZE];
+extern const kal_uint8 EF_U_OPLMNWACT_data[EF_U_META_SIZE + EF_U_DATA_SIZE];
+extern const kal_uint8 EF_U_HPLMNWACT_data[EF_U_META_SIZE + EF_U_DATA_SIZE];
+#else
+extern kal_uint8 ADF_USIM_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE];
+extern kal_uint8 EF_U_DIR_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE];
+extern kal_uint8 EF_U_ELP_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE];
+extern kal_uint8 EF_U_ICCID_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE];
+extern kal_uint8 EF_U_PSLOCI_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE];
+extern kal_uint8 EF_U_LOCI_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE];
+extern kal_uint8 EF_U_IMSI_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE];
+extern kal_uint8 EF_U_HPPLMN_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE];
+extern kal_uint8 EF_U_UST_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE];
+extern kal_uint8 EF_U_EST_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE];
+extern kal_uint8 EF_U_PLMNWACT_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE];
+extern kal_uint8 EF_U_OPLMNWACT_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE];
+extern kal_uint8 EF_U_HPLMNWACT_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE];
+
+#if defined(__VSIM__) && defined(__TC01__) && defined(__FEATURE_TC01_SIMOFF_EXTENTION__) && defined(__MDVSIM__)
+extern kal_uint8 EF_U_GID1_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE];
+extern kal_uint8 EF_U_SPN_data[VSIM_PROFILE_ENTRY][EF_U_META_SIZE+EF_U_DATA_SIZE];
+#endif //#if defined(__VSIM__) && defined(__TC01__) && defined(__FEATURE_TC01_SIMOFF_EXTENTION__) && defined(__MDVSIM__)
+
+#endif/* __MDVSIM__ */
+#endif /* __VSIM__ */
+
+extern kal_bool custom_sim_disable_sim_slot(void);
+
+extern kal_bool sml_UpdateAutoLock(sml_cat_enum cat,
+                                   kal_uint8 *key,
+                                   kal_uint8 key_len,
+                                   kal_uint8 count,
+                                   kal_uint8 source);
+
+extern kal_bool sml_UpdateMaxRetryCount(sml_cat_enum cat,
+                                        kal_uint32 data,
+                                        kal_uint8  source);
+
+extern kal_bool sml_UpdateCatKeyAlgoData(sml_cat_enum cat,
+                                         kal_uint8 algo_type,
+                                         kal_uint8 *salt,
+                                         kal_uint8 *inter_cnt,
+                                         kal_uint8 source);
+
+#ifdef __SML_PUK__
+kal_bool sml_VerifyPuk(sml_cat_enum cat,
+                       kal_uint8 *key,
+                       kal_uint8 key_len,
+                       kal_uint8 source);
+
+extern kal_bool sml_UpdatePukMaxRetryCount(sml_cat_enum cat,
+                                           kal_uint32 data,
+                                           kal_uint8  source);
+
+extern kal_bool sml_UpdatePukKey(sml_cat_enum cat,
+                                 kal_uint8 algo_type,
+                                 kal_uint8 *key,
+                                 kal_uint8 *salt,
+                                 kal_uint8 *iter_cnt,
+                                 kal_uint8 source);
+
+kal_bool sml_UpdatePukKeyState(sml_cat_enum cat,
+                               sml_puk_key_state_enum puk_state,
+                               kal_uint8 source);
+#endif
+
+extern void custom_sml_encryption(kal_uint8 *plaintext_pdu_ptr, kal_uint16 plaintext_len, kal_uint8 *encryp_pdu_ptr, kal_uint16 encryp_len);
+extern void custom_sml_decryption(kal_uint8* encryp_pdu_ptr, kal_uint16 encryp_len, kal_uint8* plaintext_pdu_ptr, kal_uint16 plaintext_len);
+
+extern kal_bool custom_sim_if_ef_acc_mandatory(void);
+extern kal_bool custom_sim_retry_select_cdma_imsi_m(kal_uint16 status_word);
+extern kal_bool custom_sim_handle_pin_verify_error(kal_uint16 status_word);
+extern kal_bool custom_sim_get_reset_setting();
+extern kal_uint8 custom_sim_get_max_reset_sim_card_times();
+extern kal_uint32 custom_sim_get_reset_sim_card_interval();
+
+extern const kal_uint8 *sim_get_home_nw_suci_calc_info_table(kal_uint16 *table_size_ptr);
+
+extern kal_uint8 custom_sim_polling_suspend_continous_polling_counts(void);
+extern kal_uint16 custom_sim_polling_suspend_extended_timer (void);
+
+kal_bool custom_sim_handle_unblock_pin_no_response_error(void);
+
+
+/*****************************************************************************
+ * SAT
+ *****************************************************************************/
+extern kal_uint8 sim_profile[MAX_SIM_PROFILE_LEN];
+extern kal_uint8 sim_nvram_profile[MAX_SIM_NUM][MAX_SIM_PROFILE_LEN];
+extern kal_uint8 usim_te_profile[MAX_SIM_PROFILE_LEN];
+extern kal_uint8 usim_mt_profile[MAX_SIM_PROFILE_LEN];
+extern kal_uint8 usim_conflict_profile[MAX_SIM_PROFILE_LEN];
+extern kal_uint8 usim_mt_only_profile[MAX_SIM_PROFILE_LEN];
+extern kal_uint8 usim_mt_default_profile[MAX_SIM_PROFILE_LEN];
+
+#ifdef __CDMA2000_RAT__
+extern kal_uint8 uim_profile[MAX_SIM_PROFILE_LEN];
+extern kal_uint8 csim_profile[MAX_SIM_PROFILE_LEN];
+extern kal_uint8 csim_nvram_profile[MAX_SIM_NUM][MAX_SIM_PROFILE_LEN];
+
+#if defined(__TC10__) && defined(__TC10_IPC_CDMA_SUPPORT__)
+extern kal_uint8 ctc_sat_profile[MAX_SIM_PROFILE_LEN];
+extern kal_uint8 ctc_om_sat_profile[MAX_SIM_PROFILE_LEN];
+#endif
+#endif /* __CDMA2000_RAT__ */
+
+extern kal_bool custom_en_auto_TR_handle(void);
+extern kal_bool custom_sat_ussd_inform_user_when_no_alpha_id_present(kal_uint8 psId, const kal_char *mcc_mnc_str);
+extern kal_bool custom_sat_ussd_not_inform_user_when_alpha_id_present(kal_uint8 psId, const kal_char *mcc_mnc_str);
+extern kal_bool custom_sat_manual_pin_verify_in_refresh_reset(kal_uint8 psId, const kal_char *mcc_mnc_str);
+extern kal_bool sim_skip_terminal_profile_after_no_resp(kal_uint8 card_no_resp_count);
+extern kal_uint8 sim_terminal_profile_length(uicc_card_type_enum card_type, kal_uint8 continuous_fails_count);
+extern kal_bool custom_sat_profile_read_from_nvram(void);
+
+extern sim_operator_type_enum sim_check_operator_card_by_custom_iccid(kal_uint8 *iccid);
+extern kal_bool custom_sim_should_use_default_sst(kal_uint16 status_word);
+extern kal_bool custom_sim_read_binary_p3_support_zero(void);
+extern kal_bool custom_allow_to_configure_test_sim_mode_from_nvram(void);
+
+#ifdef __MBIM_MS_NETWORK_BLACKLIST__
+extern void sml_init_msblacklist_obj(void);
+#endif
+#endif /* !defined(__MAUI_BASIC__) */
+#endif /* CUSTOM_NVRAM_EXTRA_H */
+
diff --git a/mcu/custom/protocol/common/ps/custom_nwsel_config.c b/mcu/custom/protocol/common/ps/custom_nwsel_config.c
new file mode 100644
index 0000000..5ad65ab
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_nwsel_config.c
@@ -0,0 +1,2327 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_nwsel_config.c
+ *
+ * Project:
+ * --------
+ *   MONZA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the configurations of Selection customization feature
+ *
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+==== THEIRS //UMOLY/BRANCHES_LR12/LR12.W1645.MD.MP/mcu/pcore/custom/modem/common/ps/custom_nwsel_config.c#3
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+==== YOURS //ws_zhipeng.feng_mbjswgwt3012_1579/UMOLY/TRUNK/LR12/mcu/pcore/custom/modem/common/ps/custom_nwsel_config.c
+<<<<
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+#include "string.h"
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "l3_inc_enums.h"
+#include "custom_nwsel_config.h"
+#include "custom_mm_config.h"
+#include "ps_public_enum.h"
+#include "gmss_public.h"
+#include "l4_ps_api.h"
+
+
+extern kal_bool nwsel_query_sbp_feature(sbp_md_feature_enum feature, kal_bool print_feature);
+extern kal_bool nwsel_query_sbp_feature_with_simslot(kal_uint8 simInterface, sbp_md_feature_enum feature, kal_bool print_feature);
+extern kal_uint8 nwsel_query_sbp_data_feature_with_simslot(kal_uint8 simInterface, sbp_md_feature_data_enum feature);
+extern void nwsel_trace_rplmn_hpplmn_mcc_list(void);
+
+/*************************************************************************
+* EUTRAN disable timer
+*
+* TS 24.301, subclause 4.5:
+*   As an implementation option, the UE may start a timer for enabling E-UTRA...
+*
+* AT&T spec, <CDR-DAM-320> Timer Value T_Disable-LTE:
+*   T_Disable-LTE defines the duration that EUTRAN is to be 
+*   disabled for. Its default value shall be 12mins ...
+*   should be overwritten by t3402
+*************************************************************************/
+/* This value should NOT be 0, minimum value is 1 min */
+/* If SBP_EUTRAN_DISABLE_TIMER_VALUE is set, this value will be ignored */
+const kal_uint32 NWSEL_EUTRAN_DISABLE_TIMER_VALUE = KAL_TICKS_1_MIN * 12;
+
+/* RJIO don't support any 23G NW so when SIM2 is RJIO SIM and recover search will effect the plmn list performance on SIM1 */
+const kal_uint32 NWSEL_FOR_RJIO_RECOVER_TIMER_VALUE = KAL_TICKS_1_MIN * 60 * 3;
+
+
+/*************************************************************************
+* EUTRAN disable TD timer
+*
+* TS 23.122 subclause 3.1
+*    If MS that has disabled its E-UTRA capability re-enables it when PLMN selection is performed, then the MS 
+*    should, for duration of timer TD, memorize the PLMNs where E-UTRA capability was disabled as PLMNs where voice
+*    service was not possible.
+*************************************************************************/
+/* This value should NOT be 0, minimum value is 1 min 
+ * Default value is invalid, which means the value is as same as Higher Priority PLMN search timer (EF_HPPLMN in (U)SIM)
+ * if SBP_EUTRAN_DISABLE_TD_TIMER_VALUE is set, this value will be ignored.
+ */
+const kal_uint32 NWSEL_EUTRAN_DISABLE_TD_TIMER_VALUE = NWSEL_INVALID_TIMER_VALUE;
+
+/*************************************************************************
+* EUTRAN disable ESM timer
+*
+* Clear Codes Data requirement - Telcel (Mexico)
+*   The phone must not trigger Clear code 33 procedure unless 
+*      5. LTE disable timer, 2 hours, (included on phones side) is reached then the procedure starts all over again.
+*************************************************************************/
+ /* This value is 2 hrs */
+const kal_uint32 NWSEL_EUTRAN_DISABLE_ESM_TIMER_VALUE = KAL_TICKS_1_MIN * 120;
+
+/*************************************************************************
+* EUTRAN disable timer for reject cause #15 in HPLMN
+*
+* For 23G only SIM, UE will be reject with cause #13, #15 in 4G NW.
+* To opitimize power consumption, disable EUTRAN in HPLMN if reject cause #13, #15 is received in 4G PLMN.
+*************************************************************************/
+ /* This value is 12 hrs */
+#ifdef __HAPS_FPGA_CLK_ADJUST__
+const kal_uint32 NWSEL_EUTRAN_DISABLE_FOR_REJ_IN_HPLMN_TIMER_VALUE = (KAL_TICKS_1_MIN/160) * 60 * 12;
+#else
+const kal_uint32 NWSEL_EUTRAN_DISABLE_FOR_REJ_IN_HPLMN_TIMER_VALUE = KAL_TICKS_1_MIN * 60 * 12;
+#endif
+/*************************************************************************
+* customize EUTRAN disable timer 
+*************************************************************************/
+ /* This value is 12 hrs */
+#ifdef __HAPS_FPGA_CLK_ADJUST__
+const kal_uint32 NWSEL_CUSTOM_DISABLE_EUTRAN_TIMER_PERIOD = (KAL_TICKS_1_MIN/160) * 60 * 12;
+#else
+const kal_uint32 NWSEL_CUSTOM_DISABLE_EUTRAN_TIMER_PERIOD = KAL_TICKS_1_MIN * 60 * 12;
+#endif
+/*************************************************************************
+* Incremental timer value for disabling EUTRAN for reject #13 / #15
+* Starts timer for both HPLMN & VPLMN
+* The timer unit represented in this array is minute e.g. 3 means 3 minute
+* 
+* Decide timer value depending on rejected counter
+*************************************************************************/
+/* Value is decided depending on counter */
+#ifdef __NWSEL_INCREMENTAL_LTE_DISABLE_TIMER_QUICK_RETRY__
+//Customer's requirement to quickly retry LTE 5 times and start 12hr timer
+const kal_uint32 NWSEL_INCREMENTAL_LTE_DISABLE_TIMER_VALUE[] = {0, 0, 0, 0, 720};
+#else
+const kal_uint32 NWSEL_INCREMENTAL_LTE_DISABLE_TIMER_VALUE[] = {3, 30, 120, 720};
+#endif
+
+
+const kal_uint32 NWSEL_INCREMENTAL_LTE_DISABLE_TIMER_MAX_COUNT = sizeof(NWSEL_INCREMENTAL_LTE_DISABLE_TIMER_VALUE)/sizeof(kal_uint32);
+
+/*************************************************************************
+ * while elevator mode enabled, in order to recover 4G immediately once leaving elevator, nwsel need
+ * search 4G store list frequent
+ *************************************************************************/
+/* default value: 2 seconds */
+const kal_uint32 NWSEL_ELEVATOR_SEARCH_LTE_TIMER_PERIOD = 2 * KAL_TICKS_1_SEC;
+/*************************************************************************
+ * while elevator mode enabled, in order to recover 4G immediately once leaving elevator, nwsel need
+ * search 4G store list frequent. If UE can't found LTE after this guard timer expired, nwsel need start
+ * recover search as normal.
+ *************************************************************************/
+/* default value: 10 seconds */
+const kal_uint32 NWSEL_ELEVATOR_MODE_GUARD_TIMER_PERIOD = 10 * KAL_TICKS_1_SEC;
+
+#ifdef __MODEM_EM_MODE__
+/*************************************************************************
+* Timer value to report NWSEL timer EM info report periodically
+*************************************************************************/
+const kal_uint32 NWSEL_EM_REPORT_TIMER_VALUE = KAL_TICKS_1_SEC * 5;
+#endif
+
+/*************************************************************************
+* Customize maximum round of normal OOS recovery in inactive mode
+* Default value is 5.
+*************************************************************************/
+const kal_uint8 NWSEL_INACTIVE_MODE_MAX_NORMAL_OOS_RECOVERY_DEFAULT_VALUE = 5;
+
+/*************************************************************************
+* Customize the fullband period in inactive mode.
+* Default value is 200s.
+*************************************************************************/
+const kal_uint32 NWSEL_INACTIVE_FULLBAND_PERIOD_DEFAULT_VALUE = 200;
+
+/*************************************************************************
+* Customize rude wakeup disable timer 
+* When rude wakeup recovery search is triggered, device will start the timer.
+* When the timer is running, device will ignore other rude wakeup requests.
+* The default timer is 0 seconds. That is, this mechanism is default off.
+*************************************************************************/
+const kal_uint32 NWSEL_RUDE_WAKEUP_DISABLE_TIMER_VALUE = KAL_TICKS_1_SEC * 0;
+
+/*************************************************************************
+* GPS-aided manual PLMN list
+* Boundary area list
+*************************************************************************/
+
+/**
+ * For GPS aided PLMN list feature
+ * Add boundary AREA in MANUAL_LIST_BOUNDARY_AREA
+ * Add the MCC contained in the boundary area MANUAL_LIST_BOUNDARY_NEIGHBOR_COUNTRY_MCC
+ *   
+ * The Area is defined with geo_area_struct
+ * geo_area_struct: zone_num, point_num in each zone, and gps location of the points
+ */
+ 
+/*Define Geo Area - Boundary*/
+geo_area_struct MANUAL_LIST_BOUNDARY_AREA[] = 
+{
+    /* CN_HK_BOUNDARY_AREA */ 
+    {1, // zone_num: 1
+        {
+            {6, // 1st zone, point_num: 4
+                {
+                    {113.70138, 22.53713},
+                    {114.00893, 22.64129},
+                    {114.26076, 22.68557},
+                    {114.41320, 22.48714},
+                    {114.15346, 22.38563},
+                    {113.76661, 22.25399}
+                }
+            }
+        }
+    },
+    /* CN_HK_BOUNDARY_AREA END */
+    /* CN_MO_BOUNDARY_AREA */ 
+    {1, // zone_num: 1
+        {
+            {6, // 1st zone, point_num: 4
+                {
+                    {113.39112, 22.30982},
+                    {113.65068, 22.32443},
+                    {113.66098, 22.22467},
+                    {113.65892, 22.05231},
+                    {113.41035, 22.02876},
+                    {113.39868, 22.20052}
+                }
+            }
+        }
+    },
+    /* CN_MO_BOUNDARY_AREA END*/
+    /* HK_MO_BOUNDARY_AREA */
+    {1, // zone_num: 1
+        {
+            {5, // 1st zone, point_num: 4
+                {
+                    {113.62106, 22.26721},
+                    {113.76661, 22.25399},
+                    {113.71101, 21.90056},
+                    {113.48442, 21.99434},
+                    {113.56064, 22.14896}
+                }
+            }
+        }
+    }
+    /* HK_MO_BOUNDARY_AREA END */
+    
+};
+
+char *MANUAL_LIST_BOUNDARY_NEIGHBOR_COUNTRY_MCC[][MANUAL_LIST_BOUNDARY_NEIGHBOR_COUNTRY_MAX_NUM] = 
+{
+    {"454FFF", "460FFF", "FFFFFF"}, /* CN_HK_BOUNDARY_AREA */
+    {"460FFF", "455FFF", "FFFFFF"}, /* CN_MO_BOUNDARY_AREA */
+    {"455FFF", "454FFF", "FFFFFF"} /* HK_MO_BOUNDARY_AREA */
+};
+
+
+kal_uint32 MANUAL_LIST_BOUNDARY_AREA_NUM = sizeof(MANUAL_LIST_BOUNDARY_AREA)/sizeof(geo_area_struct);
+
+
+/*************************************************************************
+* GPS EUTRAN DISABLE AFTER #13/#15 AREA
+*************************************************************************/
+
+geo_area_struct NWSEL_GPS_DISABLE_EUTRAN_AREA = 
+{1, // zone_num: 1
+    {
+        {8, // 1st zone, point_num: 8, XINJIANG_AREA
+            {
+                {90.809509, 45.158325}, 
+                {87.800539, 49.168311},
+                {82.568057, 45.202268}, 
+                {80.238211, 42.024619},
+                {73.989862, 39.577194}, 
+                {82.171707, 35.660759}, 
+                {90.128213, 38.508483},
+                {92.388569, 39.033987}
+            }
+        }
+    }
+};
+
+
+/*************************************************************************
+* Customize Timer Table
+* This Customize Timer Table allow customer to define each duration of timer 
+* according to the times it is triggered 
+*
+* Each entry of timer table : {TIMER_ID, CUSTOM_FUNCTION}
+* Customer can define its customized timer function above the table.
+* unit: minute.
+**************************************************************************
+* TIMER_ID: Timer to be configured
+* CUSTOM_FUNCTION: define the timer settings
+*     INPUT  n (kal_uint32) : counter of TIMER_ID
+*     OUTPUT x (kal_uint32) : the duration in second for the n-th counter of TIMER_ID
+* 
+* Note that 
+*  1. the function should have one input n, which is the counter of the timer been triggered
+*  2. it's suggested to define boundary for the output when counter n increase
+*
+**************************************************************************
+Example: customize for NWSEL_PLMN_TIMER_REASON_REJ_42
+          expected output: 10, 10, 10, 20, 20, 10, 10, ...
+ 
+ step 1: define your customize timer function
+ 
+ kal_uint32 test(kal_uint32 n)
+
+ {
+    int c_array[5] = {10, 10, 10, 20, 20};
+
+    return c_array[n%5];
+ }
+
+ step 2: assign the custom function
+ 
+ {"NWSEL_PLMN_TIMER_REASON_REJ_42", test}
+ 
+*****************************************************************************/
+customize_timer_table NWSEL_CUSTOMIZE_TIMER_TABLE[] = 
+{
+    {"NWSEL_PLMN_TIMER_REASON_REJ_42", NULL},
+    {"NWSEL_PLMN_TIMER_EUTRAN_ABNORMAL", NULL},
+    {"NWSEL_PLMN_TIMER_EUTRAN_VOICE_NOT_POSSIBLE", NULL},
+    {"NWSEL_PLMN_TIMER_N1_MODE_NOT_ALLOW", NULL},
+    {"NWSEL_PLMN_TIMER_N1_ABNORMAL", NULL},
+    {"NWSEL_PLMN_TIMER_N1_VOICE_NOT_POSSIBLE", NULL},
+    {"NWSEL_PLMN_TIMER_HPLMN_REJ_14", NULL}
+};
+
+/*****************************************************************************
+* FUNCTION
+*   nwsel_custom_is_display_roaming_hplmn_in_eplmn
+*
+* DESCRIPTION
+*   This function is used to configure whether display roaming when HPLMN is add into EPLMN list
+*
+* PARAMETERS
+*   none
+*
+* RETURNS
+* GLOBALS AFFECTED
+*   none
+*****************************************************************************/
+kal_bool nwsel_custom_is_display_roaming_hplmn_in_eplmn(kal_uint8 sim_interface)
+{
+    return (nwsel_query_sbp_feature_with_simslot(sim_interface, SBP_DISABLE_DISPLAY_ROAMING_HPLMN_IN_EPLMN,KAL_FALSE)==KAL_FALSE);
+}
+
+/*****************************************************************************
+* FUNCTION
+*   nwsel_custom_is_skip_new_fplmn_manual_resel
+*
+* DESCRIPTION
+*   This function is used to configure whether to skip the remainning RAT for rejected by FORBIDDEN PLMN
+*
+* PARAMETERS
+*   none
+*
+* RETURNS
+* GLOBALS AFFECTED
+*   none
+*****************************************************************************/
+kal_bool nwsel_custom_is_disable_skip_new_fplmn_manual_resel(void)
+{
+    return nwsel_query_sbp_feature(SBP_DISABLE_SKIP_NEW_FPLMN_MANUAL_RESEL,KAL_FALSE);
+}
+
+/*****************************************************************************
+* FUNCTION
+*   nwsel_custom_enable_plmnsel_oplmn_coexist
+*
+* DESCRIPTION
+*   This function is used to configure whether enable ef_plmnsel and ef_oplmn both take effect
+*
+* PARAMETERS
+*   none
+*
+* RETURNS
+* GLOBALS AFFECTED
+*   none
+*****************************************************************************/
+kal_bool nwsel_custom_enable_plmnsel_oplmn_coexist(void)
+{
+    return (nwsel_query_sbp_feature(SBP_DISABLE_PLMNSEL_OPLMN_COEXIST,KAL_FALSE)==KAL_FALSE);
+}
+
+/*****************************************************************************
+* FUNCTION
+*   nwsel_custom_ignore_eqplmn_in_manual_mode
+*
+* DESCRIPTION
+*   This function is used to configure whether shall ignore equivalent PLMN only in manual mode or not
+*
+* PARAMETERS
+*   none
+*
+* RETURNS
+*   KAL_TRUE:
+*   KAL_FALSE:
+* GLOBALS AFFECTED
+*   none
+*****************************************************************************/
+kal_bool nwsel_custom_ignore_eqplmn_in_manual_mode(void)
+{
+    return nwsel_query_sbp_feature(SBP_MM_IGNORE_EQPLMN_IN_MANUAL_MODE,KAL_FALSE);
+}
+
+/*****************************************************************************
+* FUNCTION
+*   nwsel_custom_ignore_eqplmn_in_auto_mode
+*
+* DESCRIPTION
+*   This function is used to configure whether shall ignore equivalent PLMN only in auto mode or not
+*
+* PARAMETERS
+*   none
+*
+* RETURNS
+*   KAL_TRUE:
+*   KAL_FALSE:
+* GLOBALS AFFECTED
+*   none
+*****************************************************************************/
+kal_bool nwsel_custom_ignore_eqplmn_in_auto_mode(void)
+{
+    return nwsel_query_sbp_feature(SBP_MM_IGNORE_EQPLMN_IN_AUTO_MODE,KAL_FALSE);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  nwsel_custom_is_disable_eutran_after_no_suitable_cell_exist
+* DESCRIPTION
+*  AT&T requirement <CDR-DAM-415>When a Combined Attach/TAU Request is rejected with
+* cause #17, a maximum of 5 attempts shall be made. Disable EUTRAN for PLMN 310-410
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+kal_bool nwsel_custom_is_disable_eutran_after_reject(nwsel_disable_eutran_cause_enum cause)
+{
+    if(cause == NWSEL_REJECT_15)
+    {
+        return nwsel_query_sbp_feature(SBP_DISABLE_EUTRAN_AFTER_NO_SUITABLE,KAL_FALSE);
+    }
+    else if(cause == NWSEL_REJECT_ABNORMAL)
+    {
+        return nwsel_query_sbp_feature(SBP_DISABLE_EUTRAN_AFTER_ABNORMAL,KAL_FALSE);
+    }
+    else if(cause == NWSEL_REJECT_13)
+    {
+        return nwsel_query_sbp_feature(SBP_DISABLE_EUTRAN_AFTER_ROAMING_NOT_ALLOWED, KAL_FALSE);
+    }
+    /*
+     * MW R13 TS24301 CR2037
+     * A UE supporting A/Gb mode or Iu mode and operating in CS/PS mode 1 of operation or CS/PS mode 2 of operation shall
+     * -enter EMM-DERREGISTERED and attempt to select GERAN or UTRAN and proceed with MM or GMM specific procedure. In this case, the UE may disable the E-UTRA capability; or
+     * -enter EMM-DEREGISTERED.PLMN-SEARCH in order to perform a PLMN selection according to 3GPP TS 23.122
+     */  
+    else if(cause == NWSEL_DETACH_NOT_REQ_ABNORMAL)
+    {
+        return nwsel_query_sbp_feature(SBP_DISABLE_EUTRAN_AFTER_DETACH_NOT_REQ_ABNORMAL, KAL_FALSE);
+    }
+    
+    return KAL_FALSE;
+}
+
+
+/*************************************************************************
+ * International Higher Priorirty PLMN Search
+ * 
+ * [Important!] Enable this option will violate TS23.122 and thus fail FTA cases
+ *
+ * - NWSEL_RPLMN_MCC_LIST / NWSEL_HPPLMN_MCC_LIST:
+ *   - The UE is allowed to perform international HPPLMN search when the UE
+ *     1. registers on a PLMN belonging to one of the MCCs defined in NWSEL_RPLMN_MCC_LIST, and
+ *     2. the HPPLMN belongs to one of the MCCs defined in NWSEL_HPPLMN_MCC_LIST
+ *
+ * - If the MCC of RPLMN or HPPLMN is not restricted
+ *   - NWSEL_RPLMN_MCC_LIST or NWSEL_HPPLMN_MCC_LIST shall contain only one entry {ALL_MCC_ALLOWED}
+ *
+ * - If the UE is not allowed to perform international HPPLMN search
+ *   - NWSEL_RPLMN_MCC_LIST and NWSEL_HPPLMN_MCC_LIST shall contain only one entry {NO_MCC_ALLOWED}
+ *************************************************************************/
+/*  The UE is allowed to perform international HPPLMN search when the UE
+ *  1. registers on a PLMN belonging to any MCC, and 
+ *  2. the HPPLMN belongs to any MCC
+ */
+kal_uint32 NWSEL_RPLMN_MCC_LIST_ANY[] = {ALL_MCC_ALLOWED};
+kal_uint32 NWSEL_HPPLMN_MCC_LIST_ANY[] = {ALL_MCC_ALLOWED};
+/*  The UE is allowed to perform international HPPLMN search when the UE
+ *  1. registers on a PLMN belonging to US/Canada/Mexico/British Virgin Islands, and 
+ *  2. the HPPLMN belongs to any MCC
+ */
+kal_uint32 NWSEL_RPLMN_MCC_LIST_ATNT[] = {310, 311, 312, 313, 314, 315, 316, 302, 334, 330, 348, 544};
+kal_uint32 NWSEL_HPPLMN_MCC_LIST_ATNT[] = {ALL_MCC_ALLOWED};
+/*  The UE is allowed to perform international HPPLMN search when the UE
+ *  1. registers on a PLMN belonging to US, and 
+ *  2. the HPPLMN belongs to Canada
+ */
+kal_uint32 NWSEL_RPLMN_MCC_LIST_INT[] = {310, 311, 312, 313, 314, 315, 316};
+kal_uint32 NWSEL_HPPLMN_MCC_LIST_INT[] = {302};
+/* The UE is not allowed to perform international HPPLMN search */
+
+kal_uint32 NWSEL_RPLMN_MCC_LIST_DEF[] = {NO_MCC_ALLOWED};
+kal_uint32 NWSEL_HPPLMN_MCC_LIST_DEF[] = {NO_MCC_ALLOWED};
+
+kal_uint32 *NWSEL_RPLMN_MCC_LIST = NULL;
+kal_uint32 *NWSEL_HPPLMN_MCC_LIST = NULL;
+
+kal_uint32 NWSEL_RPLMN_MCC_NUM=0;
+kal_uint32 NWSEL_HPPLMN_MCC_NUM=0;
+/*************************************************************************
+ * Country Boarder Resolution
+ * 
+ * add countries that are close to each other in the same group, fast roaming would take it into consideration.
+ * e.g. HK and China you might add {454,460} >> kal_uint32 NWSEL_BD_MCC_LIST[][NUM_OF_BD_MCC] = {{234,460},{454,460}};
+ * you might also add more than two entries, 
+ *  e.g. {454,460,466} but you need to adjust NUM_OF_BD_MCC into 3 and add one dummy entry
+ * (e.g. all 0, don't use ALL_MCC_ALLOWED/NO_MCC_ALLOWED for dummy entry) for previous setting
+ *************************************************************************/
+kal_uint32 NWSEL_BD_MCC_LIST[][NUM_OF_BD_MCC] = {{234,460}, {440,450}, {440, 310}};
+nwsel_custom_sim_operator_enum NWSEL_BD_SIM_LIST[] = {CUTSOM_SIM_VZW, CUSTOM_SIM_KDDI_TEST, CUSTOM_SIM_KDDI_TEST};
+const kal_uint32 NWSEL_BD_MCC_AREA_NUM = sizeof(NWSEL_BD_MCC_LIST)/(sizeof(kal_uint32)*NUM_OF_BD_MCC);
+
+/*****************************************************************************
+* FUNCTION
+*   nwsel_custom_get_bd_mcc_num
+*
+* DESCRIPTION
+*   get the number of BD MCC
+*
+* PARAMETERS
+*   none
+*
+* RETURNS
+*   kal_uint32  - the number of BD MCC
+*
+* GLOBALS AFFECTED
+*   use function for customization without re-new library relase
+*
+*****************************************************************************/
+kal_uint32 nwsel_custom_get_bd_mcc_num(void)
+{
+    return NUM_OF_BD_MCC;
+}
+
+
+/*************************************************************************
+ * Non-US PLMN
+ * 
+ * <CDR-NWS-550> Definition of International Roaming
+ * Summary: For the purposes of this feature only, the UE shall consider itself to be roaming internationally under the following conditions: 
+ * o When the MCC of the serving PLMN is not in the range 310 to 316, or 
+ * o When the serving PLMN code is one of the following: 
+ * o 310-110 - Pacific Telecom 
+ * o 310-140 - Pulse Mobile 
+ * o 310-400 - Guam Wireless/WaveRunner 
+ * o 310-470 - Northern Marianna Islands 
+ * o 311-170 - Petrocom Note: These PLMNs use a US-based MCC, but operate outside of mainland USA and are to be considered as international roaming carriers by AT&T. 
+ *************************************************************************/
+const char *CUSTOM_NON_US_PLMN[] = {"310110", "310140", "310400","310470","311170",CUSTOM_EQ_PLMN_SET_END};
+
+const kal_uint32 CUSTOM_NON_US_PLMN_NUM = sizeof(CUSTOM_NON_US_PLMN)/sizeof(char *);
+
+/*****************************************************************************
+* FUNCTION
+*   nwsel_custom_state_after_detach_not_req_abnormal
+*
+* DESCRIPTION
+*   According to 3GPP TS24.301 5.5.2.3.4, the UE may enter the EMM-DEREGISTERED.PLMN-SEARCH state or EMM-DEREGISTERED.ATTEMPTING-TO-ATTACH.
+*
+* PARAMETERS
+*   none
+*
+* RETURNS
+*   EMM_ENTER_STATE_PLMN_SEARCH          - Always enter EMM-DEREGISTERED.PLMN-SEARCH and perform PLMN selection
+*   EMM_ENTER_STATE_ATTEMPTING_TO_ATTACH - Always enter EMM-DEREGISTERED.ATTEMPTING-TO-ATTACH and stay on current cell
+*
+* GLOBALS AFFECTED
+*   none
+*****************************************************************************/
+emm_state_after_detach_not_req_abnormal_enum nwsel_custom_state_after_detach_not_req_abnormal(void)
+{
+    if (nwsel_query_sbp_feature(SBP_EMM_PERFORM_PLMN_SEARCH_AFTER_DETACH_NOT_REQ_ABNORMAL,KAL_FALSE) == KAL_TRUE)
+    {
+        return EMM_ENTER_STATE_PLMN_SEARCH;
+    }
+    else
+    {
+        return EMM_ENTER_STATE_ATTEMPTING_TO_ATTACH;
+    }
+}
+
+/*****************************************************************************
+* FUNCTION
+*   nwsel_custom_is_try_abnormal_lai_once_more
+* DESCRIPTION
+*   If abnormal LU 4 times happen, MS will try to search other available and allowable PLMNs. If no other PLMN is found,
+*   MS will go back to the abnormal-4-times PLMN and do registration with another 4 attempts.
+*
+* PARAMETERS
+*   none
+* RETURNS
+*   kal_bool - indicate if "try abnormal lai once more" is enabled.
+* GLOBALS AFFECTED
+*   none
+*****************************************************************************/
+kal_bool nwsel_custom_is_try_abnormal_lai_once_more(void)
+{
+    return nwsel_query_sbp_feature(SBP_MM_TRY_ABNORMAL_LAI_ONCE_MORE, KAL_FALSE);
+}
+
+
+/*************************************************************************
+ * HPLMN matching criteria enhance and customized equivalent PLMN definition
+ * 
+ * [Important!] Inappropriate setting may violate spec and thus fail FTA cases
+ *
+ * - CUSTOM_EQ_PLMN[]
+ *   Ex: CUSTOM_EQ_PLMN[] = 
+ *           {"001010", "00101F", "00202F", CUSTOM_EQ_PLMN_SET_END, //the first 3 PLMNs are regarded as eqivalent to each other
+ *            "100011", "10002F", CUSTOM_EQ_PLMN_SET_END}           //100011 and 10002F are regarded as equivalent. 
+ *************************************************************************/
+/*  Regards 31026F and 310260 as eqivalent. To allow cell reselection between 310260 and 31026F (T-Mobile)  */
+const char *CUSTOM_EQ_PLMN_TMO[] = {"31026F", "310260", CUSTOM_EQ_PLMN_SET_END};
+
+/* Default. Follows TS23.122 Annex A. Eg. In 310260, MS can reselect to 31026F. 
+ * But if in 31026F, MS can't reselect to 310260. 
+ */
+const char *CUSTOM_EQ_PLMN_DEF[] = {CUSTOM_EQ_PLMN_SET_END,};
+
+const char **CUSTOM_EQ_PLMN = NULL;
+
+kal_uint32 CUSTOM_EQ_PLMN_NUM = 0;
+
+/*********************************************************************************
+ * Customized equivalent plmn list
+ * This feature is let customer to add some equivalent plmn list if 
+ * DUT meet the specific SIM and RPLMN combination.
+ *
+ * [Important!] Inappropriate setting may violate spec and thus fail FTA cases
+ *              Also cause unexpected plmn selection and received unexpected reject cause
+ *              Please add it carefully
+ *
+ * Specific SIM is identified by SIM's the first entry of EHPLMN(i.e. EHPLMN[0]), 
+ * or identified by the plmn of IMSI if ther no EHPLMN file.
+ *
+ * RPLMN means DUT current registered PLMN
+ *
+ * Each array has 5 elements: {EHPLMN[0], RPLMN, EPLMN1, EPLMN2, EPLMN3}
+ * Only if the current SIM's EHPLMN[0] is matched the specified EHPLMN[0] and 
+ * DUT's current registered RPLMN is matched the specified RPLMN, then DUT will
+ * add EPLMN1/2/3 into equivalent plmn list automatically even though network not assign
+ * NOTE: EPLMN = FFFFFF if you do not want to specify
+ *
+ * Take Malaysia UNIFI operator as a example
+ * The EHPLMN[0] for UNIFI USIM is 502153. If DUT using UNIFY SIM registered in 50219F plmn,
+ * case 1: you want add 502100, 502101, 502102 as equivelent PLMN,
+ * you can write {"502153", "50219F", "502100", "502101", "502102"}
+ * case 2: you want add 502100, 502101, as equivelent PLMN,
+ * you can write {"502153", "50219F", "502100", "502101", "FFFFFF"}
+ *********************************************************************************/
+const char *CUSTOM_SIM_SPECIFIC_EQ_PLMN_LIST[][CUSTOM_SIM_SPECIFIC_EQ_PLMN_MAX_NUM] = {
+                                {"502153", "50219F", "502153", "FFFFFF", "FFFFFF"}, // Malaysia UNIFI operator
+                                };
+const kal_uint32 CUSTOMSIM_SPECIFIC_EQ_PLMN_SET = sizeof(CUSTOM_SIM_SPECIFIC_EQ_PLMN_LIST)/(sizeof(char *)*CUSTOM_SIM_SPECIFIC_EQ_PLMN_MAX_NUM);
+
+/*****************************************************************************
+* FUNCTION
+*   nwsel_custom_get_sim_specific_eq_plmn_max_num
+*
+* DESCRIPTION
+*   get the max. number of customiized EQ PLMN
+*
+* PARAMETERS
+*   none
+*
+* RETURNS
+*   kal_uint32  - the max. number of customiized EQ PLMN
+*
+* GLOBALS AFFECTED
+*   use function for customization without re-new library relase
+*
+*****************************************************************************/
+kal_uint32 nwsel_custom_get_sim_specific_eq_plmn_max_num(void)
+{
+    return CUSTOM_SIM_SPECIFIC_EQ_PLMN_MAX_NUM;
+}
+
+
+/*************************************************************************
+ * Customized EHPLMN
+ * Make sure SBP_NWSEL_CUSTOMIZE_EHPLMN is turned on, and add entries as following
+ *************************************************************************/
+const char *CUSTOM_NWSEL_EHPLMN_LIST[][CUSTOM_NWSEL_EHPLMN_MAX_NUM] = {
+                                        {"46011F","46003F","FFFFFF","FFFFFF","FFFFFF"},  //CT
+                                        {"46000F","46002F","46004F","46007F","46008F"},  //CMCC
+                                        {"52005F","52018F","52047F","FFFFFF","FFFFFF"},  //DTAC
+                                        {"52000F","52004F","52099F","FFFFFF","FFFFFF"},  //TRUEMOVE
+                                        {"52001F","52003F","52023F","FFFFFF","FFFFFF"},  //AIS
+                                        {"46001F","46006F","FFFFFF","FFFFFF","FFFFFF"},  //CU
+                                        {"22603F","22606F","FFFFFF","FFFFFF","FFFFFF"},  //Telekom Romania
+                                        };
+/* How many sets */
+const kal_uint32 CUSTOM_NWSEL_EHLMN_SET = sizeof(CUSTOM_NWSEL_EHPLMN_LIST)/(sizeof(char *)*CUSTOM_NWSEL_EHPLMN_MAX_NUM);
+
+/*****************************************************************************
+* FUNCTION
+*   nwsel_custom_get_nwsel_ehplmn_max_num
+*
+* DESCRIPTION
+*   get the max. number of customized EHPLMN
+*
+* PARAMETERS
+*   none
+*
+* RETURNS
+*   kal_uint32  - the max. number of customized EHPLMN
+*
+* GLOBALS AFFECTED
+*   use function for customization without re-new library relase
+*
+*****************************************************************************/
+kal_uint32 nwsel_custom_get_nwsel_ehplmn_max_num(void)
+{
+    return CUSTOM_NWSEL_EHPLMN_MAX_NUM;
+}
+
+/*****************************************************************************
+* Add custom optimization only for legacy TMO SIM cards where TMO operators are missing from HPLMN list 
+* Requirement Info:
+* Network Connectivity and Operations
+* 3.3.2 MCC/MNC home network GID-MTRREQ-373802
+* Mandatory The UE shall hardcode the following list of MCC-MNCs to be compatible with T-Mobile SIMs.
+* This is for SIM Unlock purposes.
+* Please comply with Remote SIM Unlock TRD for all other SIM Unlock-related requirements. 
+* Mobile Country Code Mobile Network Code 310 160, 310 200, 310 210, 310 220, 310 230, 310 240, 310 250,
+* 310 260, 310 270, 310 310, 310 490, 310 660, 310 800, 311 660, 311 882, 312 250.
+* SIM-Unlock mentioned in the requirement is already taken care by SMU and LGE. The case fails as 310-240/310-260
+* are not considered as Home PLMN and hence Roaming PDP type is SET
+*****************************************************************************/
+const char *CUSTOM_TMO_LEGACY_SIM_EHPLMN_LIST[] = {"310160", "310200", "310210", "310220", "310230", "310240", "310250",
+                                                   "310260", "310270", "310310", "310490", "310660", "310800", "311660",
+                                                   "311882", "312250", "311490", CUSTOM_PLMN_SET_END};
+
+/*****************************************************************************
+* FUNCTION
+*   nwsel_custom_get_nwsel_tmo_legacy_sim_max_num
+*
+* DESCRIPTION
+*   get the max. number of customized TMO legacy SIM EHPLMN
+*
+* PARAMETERS
+*   none
+*
+* RETURNS
+*   kal_uint32  - the max. number of customized TMO legacy SIM EHPLMN
+*
+* GLOBALS AFFECTED
+*   use function for customization without re-new library relase
+*
+*****************************************************************************/
+kal_uint32 nwsel_custom_get_nwsel_tmo_legacy_sim_max_num(void)
+{
+    return ((kal_uint32)(sizeof(CUSTOM_TMO_LEGACY_SIM_EHPLMN_LIST)/ sizeof(char *)));
+}
+
+/*****************************************************************************
+* NWSEL use this lists to decide plmn search rat order when CSFB by PLMN Search
+* If RPLMN is in this list, then search rat order will be 2G=>3G
+* Otherwise, search rat order will be 3G=>2G
+*****************************************************************************/
+const char *CUSTOM_CSFB_PREFER_2G_PLMN[] = {"45412F", "46000F", "46002F", "46007F", "46008F", CUSTOM_EQ_PLMN_SET_END};
+
+/*****************************************************************************
+* NWSEL use this lists to avoid live network influence for SS test, not used for NS-IOT test* 
+*****************************************************************************/
+const char *CUSTOM_FPLMN[] = {"46000F", "46001F", "46011F", INVALID_CUSTOM_BL_PLMN};
+const kal_uint32 CUSTOM_FPLMN_NUM = sizeof(CUSTOM_FPLMN)/sizeof(char *);
+
+
+/*****************************************************************************
+* FUNCTION
+*  nwsel_custom_use_fplmn
+* DESCRIPTION
+*   For PCT or some SS test cases , NWSEL treat live NW plmn as forbiden.
+*
+* PARAMETERS
+*
+* RETURNS
+*   KAL_TRUE:
+*    - MS will applay CUSTOM_FPLMN when plmn search
+*   KAL_FALSE:
+*    - MS will not applay CUSTOM_FPLMN when plmn search
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+
+kal_bool nwsel_custom_use_fplmn(void)
+{
+    return nwsel_query_sbp_feature(SBP_CUSTOM_FPLMN_USED,KAL_FALSE);
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  nwsel_custom_config_custom_eq_plmn_list
+* DESCRIPTION
+*  This function is used to configure CUSTOM_EQ_PLMN by SBP function 
+*
+* PARAMETERS
+*
+* RETURNS
+*  NONE
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+void nwsel_custom_config_custom_eq_plmn_list(void)
+{
+    if (nwsel_query_sbp_feature(SBP_TMO_PLMN_MATCHING,KAL_FALSE) == KAL_TRUE)
+    {
+        CUSTOM_EQ_PLMN_NUM = sizeof(CUSTOM_EQ_PLMN_TMO)/sizeof(char *);
+        CUSTOM_EQ_PLMN = CUSTOM_EQ_PLMN_TMO;
+    }
+    
+    else
+    {
+        CUSTOM_EQ_PLMN_NUM = sizeof(CUSTOM_EQ_PLMN_DEF)/sizeof(char *);
+        CUSTOM_EQ_PLMN = CUSTOM_EQ_PLMN_DEF;
+    } 
+}
+
+
+/*************************************************************************
+ * After abnormal LU 4 times, UE should wait T3212 timeout and then start next LU attempt round.
+ * Customization can be done here. Config the RETRY_ABNORMAL_LAI timer value as below. UE will 
+ * start the next LU attempt when the RETRY_ABNORMAL_LAI timer expires.
+ *************************************************************************/
+/* default value: 10 minutes */
+const kal_uint32 NWSEL_RETRY_ABNORMAL_LAI_TIMER_PERIOD = 10 * KAL_TICKS_1_MIN;
+const kal_uint32 NWSEL_RETRY_ABNORMAL_RAI_TIMER_PERIOD = 15 * KAL_TICKS_1_MIN;
+
+/*************************************************************************
+Customer needs customizable HPLMN_SEARCH_TIMER value only if SIM_PROVIDED value is 0
+Retaining the default as 0, but customer can make necessary changes to the 
+desired value and NWSEL will consider this value only if SIM_PROVIDED value is 0
+1 unit = NWSEL_HPLMN_SEARCH_TIMER_UNIT (6 minute steps)
+*************************************************************************/
+const kal_uint32 NWSEL_CUSTOM_HPPLMN_SEARCH_PERIOD = 0; //In NWSEL_HPLMN_SEARCH_TIMER_UNIT
+
+/*************************************************************************
+* KOREA MCC are added in this array
+* Used for different optimizations
+*************************************************************************/
+const kal_uint16 KOREA_MCC[] = {450};
+const kal_uint8 KOREA_MCC_NUM = (kal_uint8) (sizeof(KOREA_MCC) / sizeof(kal_uint16));
+
+//machaine test cell TA area [0-100]
+const kal_uint8 CUSTOM_MAX_LATA_FOR_TEST_CELL[2] = {0x00,0x64};
+
+/*************************************************************************
+ * Ignore equivalent PLMN list assigned by operator
+ * 
+ * - IGNORE_EQPLMN_OPERATOR
+ *     - If HPLMN belongs to any PLMN defined in the list,
+ *       all eqivalent PLMNs assigned by this HPLMN will be ignored.
+ * 
+ *************************************************************************/
+char *IGNORE_EQPLMN_OPERATOR[] = {IGNORE_EQPLMN_OPERATOR_SET_END, 
+                                  IGNORE_EQPLMN_OPERATOR_SET_END, 
+                                  IGNORE_EQPLMN_OPERATOR_SET_END};
+kal_uint32 IGNORE_EQPLMN_OPERATOR_NUM = sizeof(IGNORE_EQPLMN_OPERATOR)/sizeof(char *);
+/* It is only used for temporary storage, changing this array would not affect any UE behavior */
+char *IGNORE_EQPLMN_OPERATOR_TEMP[] = {IGNORE_EQPLMN_OPERATOR_SET_END, IGNORE_EQPLMN_OPERATOR_SET_END, IGNORE_EQPLMN_OPERATOR_SET_END};
+
+/* We will search those PLMN even in manual power on. Note that this will be violate spec. */
+char* ADD_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH[] = {INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH,
+                                                     INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH,
+                                                     INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH,
+                                                     INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH,
+                                                     INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH,
+                                                     INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH};
+kal_uint32 ADD_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH_NUM = sizeof(ADD_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH)/sizeof(char *);
+
+/* It is only specified YOIGO recovery search plmn in manual selection mode */
+char* YOIGO_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH[] = {"21407F",
+                                                       "21403F",
+                                                       INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH,
+                                                       INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH,
+                                                       INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH,
+                                                       INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH};
+
+/* It is only used for temporary storage, changing this array would not affect any UE behavior */
+char* ADD_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH_TEMP [] = {INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH,
+                                                           INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH,
+                                                           INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH,
+                                                           INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH,
+                                                           INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH,
+                                                           INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH};
+
+/*****************************************************************************
+* FUNCTION
+*  nwsel_custom_config_ignore_eqplmn_operator_list
+* DESCRIPTION
+*  This function is used to configure IGNORE_EQPLMN_OPERATOR by SBP function 
+*  when IGNORE_EQPLMN_OPERATOR is empty.
+*
+* PARAMETERS
+*
+* RETURNS
+*  NONE
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+void nwsel_custom_config_ignore_eqplmn_operator_list(void)
+{
+    kal_uint32 index = 0;
+
+    kal_mem_cpy(IGNORE_EQPLMN_OPERATOR_TEMP, 
+                IGNORE_EQPLMN_OPERATOR,
+                IGNORE_EQPLMN_OPERATOR_NUM*sizeof(char*));
+
+    kal_mem_cpy(ADD_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH_TEMP, 
+                ADD_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH,
+                ADD_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH_NUM*sizeof(char*));
+
+    /* If IGNORE_EQPLMN_OPERATOR is not empty, do not change the list by SBP */
+    if (strcmp(IGNORE_EQPLMN_OPERATOR[0], IGNORE_EQPLMN_OPERATOR_SET_END) != 0)
+    {
+        return;
+    }
+    
+    if (nwsel_query_sbp_feature(SBP_MM_IGNORE_YOIGO_EQPLMN,KAL_FALSE) == KAL_TRUE)
+    {
+        IGNORE_EQPLMN_OPERATOR_TEMP[index] = "21404F";
+        index++;
+        kal_mem_cpy(ADD_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH_TEMP, 
+                    YOIGO_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH,
+                    ADD_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH_NUM*sizeof(char*));
+    }
+
+    if (nwsel_query_sbp_feature(SBP_MM_IGNORE_PLAY_EQPLMN,KAL_FALSE) == KAL_TRUE)
+    {
+        IGNORE_EQPLMN_OPERATOR_TEMP[index] = "26006F";
+        index++;
+    }
+}
+
+/*****************************************************************************
+* FUNCTION
+*  nwsel_custom_config_hpplmn_search_mcc_list
+* DESCRIPTION
+*  This function is used to configure NWSEL_RPLMN_MCC_LIST/NWSEL_HPPLMN_MCC_LIST by SBP function 
+*
+* PARAMETERS
+*
+* RETURNS
+*  NONE
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+void nwsel_custom_config_hpplmn_search_mcc_list(void)
+{
+    if (nwsel_query_sbp_feature(SBP_HPPLMN_REGARDLESS_ANY_MCC,KAL_FALSE) == KAL_TRUE)
+    {
+        NWSEL_RPLMN_MCC_LIST = NWSEL_RPLMN_MCC_LIST_ANY;
+        NWSEL_HPPLMN_MCC_LIST = NWSEL_HPPLMN_MCC_LIST_ANY;        
+        NWSEL_RPLMN_MCC_NUM = sizeof(NWSEL_RPLMN_MCC_LIST_ANY)/sizeof(kal_uint32);
+        NWSEL_HPPLMN_MCC_NUM = sizeof(NWSEL_HPPLMN_MCC_LIST_ANY)/sizeof(kal_uint32);
+    }
+    else if (nwsel_query_sbp_feature(SBP_ATNT_HPPLMN_SEARCH,KAL_FALSE) == KAL_TRUE)
+    {
+        NWSEL_RPLMN_MCC_LIST = NWSEL_RPLMN_MCC_LIST_ATNT;
+        NWSEL_HPPLMN_MCC_LIST = NWSEL_HPPLMN_MCC_LIST_ATNT;
+        NWSEL_RPLMN_MCC_NUM = sizeof(NWSEL_RPLMN_MCC_LIST_ATNT)/sizeof(kal_uint32);
+        NWSEL_HPPLMN_MCC_NUM = sizeof(NWSEL_HPPLMN_MCC_LIST_ATNT)/sizeof(kal_uint32);
+    }
+    else if (nwsel_query_sbp_feature(SBP_MM_INTERNATIONAL_HPPLMN_SEARCH,KAL_FALSE) == KAL_TRUE)
+    {
+        NWSEL_RPLMN_MCC_LIST = NWSEL_RPLMN_MCC_LIST_INT;
+        NWSEL_HPPLMN_MCC_LIST = NWSEL_HPPLMN_MCC_LIST_INT;
+        NWSEL_RPLMN_MCC_NUM = sizeof(NWSEL_RPLMN_MCC_LIST_INT)/sizeof(kal_uint32);
+        NWSEL_HPPLMN_MCC_NUM = sizeof(NWSEL_HPPLMN_MCC_LIST_INT)/sizeof(kal_uint32);
+    }
+    else
+    {
+        NWSEL_RPLMN_MCC_LIST = NWSEL_RPLMN_MCC_LIST_DEF;
+        NWSEL_HPPLMN_MCC_LIST = NWSEL_HPPLMN_MCC_LIST_DEF;
+        NWSEL_RPLMN_MCC_NUM = sizeof(NWSEL_RPLMN_MCC_LIST_DEF)/sizeof(kal_uint32);
+        NWSEL_HPPLMN_MCC_NUM = sizeof(NWSEL_HPPLMN_MCC_LIST_DEF)/sizeof(kal_uint32);
+    } 
+}
+
+/*************************************************************************
+ * customized roaming allow whitelist PLMN definition
+ * 
+ * To prevent the specified PLMN is banned due to disable roaming
+ *   Ex: HPLMN 46001, international roaming is disable but want to allow to roam on 46692, 46689.
+ * - CUSTOM_WL_PLMN[]
+ *   Ex: CUSTOM_WL_PLMN[] = 
+ *           {"46692F","46689F"}         
+ *************************************************************************/
+
+/*  If roaming is disable, only specified PLMNs/HPLMN can be registered by UE  */
+
+const char *CUSTOM_WL_PLMN[] = {INVALID_CUSTOM_WL_PLMN};
+
+const kal_uint32 CUSTOM_WL_PLMN_NUM = sizeof(CUSTOM_WL_PLMN)/sizeof(char *);
+
+/*************************************************************************
+ * customized non-existing network not allow blacklist definition
+ * 
+ * To prevent waste time to search non-existing PLMN
+ * note: no guarantee that the specified network won't be found, just reduce the possibility to search 
+ *   Ex: TDD project search 46001
+ * - CUSTOM_BL_PLMN[] = {"46001F"} 
+ *    CUSTOM_BL_RAT[] = {NWSEL_UMTS} 
+ *    CUSTOM_BL_RAT[] = {NWSEL_UMTS} 
+ *   Ex2: do not search china 3G
+ * - CUSTOM_BL_PLMN[] = {"460FFF"} 
+ *    CUSTOM_BL_RAT[] = {NWSEL_UMTS} 
+ *************************************************************************/
+
+/*  If network(PLMN/RAT) is specified, do not waste time on power scan the PLMN/RAT */
+#ifdef __DISABLE_CUSTOM_NONEXISTING_NETWORK_MECHANISM__
+const char *CUSTOM_BL_PLMN[] = {INVALID_CUSTOM_BL_PLMN};
+const rat_enum CUSTOM_BL_RAT[] = {RAT_NONE};
+#else
+/* not apply the optimization for CMCC customization phone. That is, blacklist won't affect RAT decision when OP01 is on */
+const char *CUSTOM_BL_PLMN[] = {"46000F",
+                                INVALID_CUSTOM_BL_PLMN};
+
+const rat_enum CUSTOM_BL_RAT[] = {RAT_UMTS,
+                                        RAT_NONE};
+
+#endif
+
+
+const kal_uint32 CUSTOM_BL_PLMN_NUM = sizeof(CUSTOM_BL_PLMN)/sizeof(char *);
+
+/*************************************************************************
+ * customized PLMNwACT correction
+ * 
+ * If there is an entry(ies) use the customized value since operator is unable to re-issue correct one
+ * For CUSTOM_CORRECT_HPLMN[i], modify CUSTOM_CORRECT_PLMN[i]+CUSTOM_FROM_RAT[i] into 
+ * CUSTOM_CORRECT_PLMN[i] + CUSTOM_CORRECT_RAT[i]
+ * 
+ *************************************************************************/
+
+const char *CUSTOM_CORRECT_HPLMN[] = {"46011F"};
+
+const char *CUSTOM_CORRECT_PLMN[] = {"45403F"};
+
+const rat_enum CUSTOM_FROM_RAT[] = {RAT_GSM|RAT_UMTS};
+
+const rat_enum CUSTOM_CORRECT_RAT[] = {RAT_UMTS|RAT_LTE};
+
+const kal_uint32 CUSTOM_CORRECT_PLMN_NUM = sizeof(CUSTOM_CORRECT_HPLMN)/sizeof(char *);
+
+
+/*************************************************************************
+ * customized fast roaming blacklist definition
+ * 
+ * To prevent some special SIM configuartion (like, verdict sequence 00331 00431), or lab test need to fast workaround
+ * 
+ *   Ex: 
+ * - CUSTOM_BL_PLMN[] = {"46001F"} 
+ *    CUSTOM_BL_RAT[] = {RAT_UMTS} 
+ *************************************************************************/
+/* not apply the optimization for CMCC customization phone. That is, blacklist won't affect RAT decision when OP01 is on */
+const char *CUSTOM_FR_BL_PLMN[] = {"22801f","23203f","23430f", // For DT operator test, to avoid priority reverse of OPLMNwACT
+                                   "244082", // For PTCRB USIM & USAT test (TS 31.121 TC 7.2.3), to avoid priority inversion of OPLMNwACT
+                                    "001fff","002fff","003fff","004fff","005fff","006fff","007fff","008fff","009fff","010fff","011fff",
+                                    "012fff","254fff"};
+const rat_enum CUSTOM_FR_BL_RAT[] = {
+    RAT_UMTS,RAT_UMTS,RAT_UMTS, // For DT operator test, to avoid priority reverse of OPLMNwAC
+    RAT_UMTS, // For PTCRB USIM & USAT test (TS 31.121 TC 7.2.3), to avoid priority inversion of OPLMNwACT
+    RAT_NONE,RAT_NONE,RAT_NONE,
+    RAT_NONE,RAT_NONE,RAT_NONE,RAT_NONE,RAT_NONE,
+    RAT_NONE,RAT_NONE,RAT_NONE,RAT_NONE,RAT_NONE};
+
+const kal_uint32 CUSTOM_FR_BL_PLMN_NUM = sizeof(CUSTOM_FR_BL_PLMN)/sizeof(char *);
+
+
+/*************************************************************************
+ * customized white list for custom_is_disable_eutran_after_reject
+ * 
+ * White list that won't be affected by custom_is_disable_eutran_after_reject.
+ * 3UK network behavior to exclude from disable EUTRAN mechanism to boost LTE stay rate
+ * 1. LTE B20 support IMS but not support CSFB
+ * 2. LTE B3 support CSFB, but not support IMS
+ * 3. LTE B20 check UE VDP for E-UTRAN, if support IMS accept otherwise reject #15
+ *************************************************************************/
+
+/*  If roaming is disable, only specified PLMNs/HPLMN can be registered by UE  */
+
+const char *CUSTOM_EUTRAN_DISABLE_WL_PLMN[] = {"23420F"};
+
+const kal_uint32 CUSTOM_EUTRAN_DISABLE_WL_PLMN_NUM = sizeof(CUSTOM_EUTRAN_DISABLE_WL_PLMN)/sizeof(char *);
+
+/*************************************************************************
+ * RAT search order setting
+ * 
+ * Two orders can be set according to the current location of the UE, in Home country or in Other countries (UE is 
+ * roaming). 
+ *   NWSEL_CUSTOM_HOME_MCC[] - define the Home country MCC, can be one or more MCCs
+ *   custom_rat_order[2][4] - define the rat_order in home country and in other countries
+ *************************************************************************/
+
+/* define the Home country MCC, can be one or more MCCs */
+/* if HOME MCC is not specified, use Home MCC RAT order in any countries */
+const kal_uint32 NWSEL_CUSTOM_HOME_MCC[] = {460,NWSEL_CUSTOM_HOME_MCC_NOT_DEFINED};
+
+const kal_uint32 NWSEL_CUSTOM_HOME_MCC_NUM = sizeof(NWSEL_CUSTOM_HOME_MCC)/sizeof(kal_uint32);
+
+
+/* only allow customer to modify the order for non-CMCC customize phone */
+const rat_enum custom_rat_order_def[NWSEL_RAT_ORDER_NUM][NWSEL_RAT_ENTRY_NUM] = {
+    /* default - Search order are not specified. NWSEL wil check the previous RPLMN RAT and other factors to decide 
+                 proper RAT order */
+    /* Home MCC RAT search order */
+    {RAT_NONE, RAT_NONE, RAT_NONE, RAT_NONE},
+
+    /* Abroad/Roaming MCC RAT search order */
+    {RAT_NONE, RAT_NONE, RAT_NONE, RAT_NONE}
+//#endif
+};
+
+const rat_enum custom_power_on_search_rat[NWSEL_RAT_ENTRY_NUM] = 
+    {RAT_NR, RAT_LTE, RAT_UMTS, RAT_GSM};
+
+const rat_enum inter_rat_rssi_sorted_search_rat[NWSEL_RAT_ENTRY_NUM] = 
+    {RAT_NR, RAT_LTE, RAT_UMTS, RAT_GSM};
+    
+/* use for fast roaming optimization (need to turn on by SBP SBP_FULLBAND_RAT_ORDER_ON_CUSTOM_SETTING), called by detecting as roaming */
+const rat_enum custom_roaming_fullband_rat[NWSEL_RAT_ENTRY_NUM] = 
+    {RAT_UMTS, RAT_NR, RAT_LTE, RAT_GSM};
+
+// Prefer UMTS to be searched at the end
+const rat_enum custom_consider_duplex_mode_fullband_rat[NWSEL_RAT_ENTRY_NUM] = 
+    {RAT_LTE, RAT_GSM, RAT_UMTS, RAT_NONE};
+
+/* Add a new array for quick search order */
+const rat_enum custom_quick_search_rat[NWSEL_RAT_ENTRY_NUM] = 
+    {RAT_UMTS, RAT_GSM, RAT_LTE, RAT_NONE};
+
+/* power on search rat table for flight mode on ecc, and it could be extended by operators' requirements 
+ * NOTE: table_index = 0 is a default value, which implys disabling this feature. 
+ * So, the table index starts from "1". */
+const rat_enum custom_power_on_flight_mode_on_ecc_search_rat_table[][NWSEL_RAT_ENTRY_NUM] = {
+   /* 1: LNWG 
+    * TMO's requirement: rat order will be LTE > NR > UMTS > GSM when flight mode ecc ongoing */
+   {RAT_LTE, RAT_NR, RAT_UMTS, RAT_GSM}
+   
+   };
+
+const kal_uint8 NWSEL_MAX_POWER_ON_FLIGHT_MODE_ECC_DEARCH_RAT_TABLE_INDEX = 
+    sizeof(custom_power_on_flight_mode_on_ecc_search_rat_table)/sizeof(custom_power_on_flight_mode_on_ecc_search_rat_table[0]);
+
+/**************************************************************************************
+* Define search rat order after inter-rat redirection failure
+* Currently only support OP01 project
+***************************************************************************************/
+const rat_enum* custom_irrdt_failure_rat_order[NWSEL_IRRDT_MAX_TYPE];
+const rat_enum custom_irrdt_failure_rat_order_op01[NWSEL_IRRDT_MAX_TYPE][NWSEL_RAT_ENTRY_NUM] = {
+    /* NWSEL_IRRDT_4G3 */
+    {RAT_UMTS, RAT_GSM, RAT_LTE, RAT_NONE},
+
+    /* NWSEL_IRRDT_4G2 */
+    {RAT_GSM, RAT_UMTS, RAT_LTE, RAT_NONE},
+
+    /* NWSEL_IRRDT_3G4 */
+    {RAT_LTE, RAT_UMTS, RAT_GSM, RAT_NONE},
+
+    /* NWSEL_IRRDT_2G4 *//* OP01 doesn't specify rat order for this IRRDT type*/
+    {RAT_NONE, RAT_NONE, RAT_NONE, RAT_NONE}
+};
+
+/*************************************************************************
+*Time unit definition for IVSR guard timer. Please do not change !!
+*************************************************************************/
+#define IVSR_TICKS_20_SEC    (KAL_TICKS_5_SEC+KAL_TICKS_5_SEC+KAL_TICKS_5_SEC+KAL_TICKS_5_SEC)
+#define IVSR_TICKS_40_SEC    (IVSR_TICKS_20_SEC + IVSR_TICKS_20_SEC)
+#define IVSR_TICKS_1_MIN     (KAL_TICKS_1_MIN)
+
+/* IVSR guard timer definitions*/
+#ifdef __INCREASE_MAX_IVSR_GUARD_TIMER_NUM__
+    const kal_uint8 MAX_IVSR_GUARD_TIMER_NUM = 10;
+#else
+    const kal_uint8 MAX_IVSR_GUARD_TIMER_NUM = 3;
+#endif
+
+#define MAX_IVSR_ATTEMP_TIMES 3
+
+/*************************************************************************
+* IVSR guard timer interval
+*************************************************************************/
+const kal_uint32 IVSR_GUARD_TIMER_INTERVAL[] =
+{
+    IVSR_TICKS_20_SEC, IVSR_TICKS_40_SEC, IVSR_TICKS_1_MIN
+};
+const kal_uint8 MAX_IVSR_GUARD_TIMER_INTERVAL_NUM = sizeof(IVSR_GUARD_TIMER_INTERVAL)/sizeof(kal_uint32);
+
+/*****************************************************************************
+* FUNCTION
+*  nwsel_custom_config_custom_irrdt_failure_rat_order
+* DESCRIPTION
+*  This function is used to configure custom_irrdt_failure_rat_order
+*  Currently only works in OP01 project.
+*
+* PARAMETERS
+*
+* RETURNS
+*  NONE
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+void nwsel_custom_config_custom_irrdt_failure_rat_order(void)
+{
+    kal_uint32 i;
+
+    for (i = 0; i < NWSEL_IRRDT_MAX_TYPE; i++)
+    {
+        custom_irrdt_failure_rat_order[i] = (rat_enum*)&custom_irrdt_failure_rat_order_op01[i];
+    }
+}
+
+/*****************************************************************************
+* FUNCTION
+*  nwsel_custom_search_next_plmn_when_access_class_barred
+* DESCRIPTION
+*  This function is used to configure whether search next plmn
+*  when not test sim and not test mode
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+kal_bool nwsel_custom_search_next_plmn_when_access_class_barred(void)
+{
+    return (nwsel_query_sbp_feature(SBP_DISABLE_PLMN_SEL_WHEN_ACCESS_BARRED,KAL_FALSE)==KAL_FALSE);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  nwsel_custom_disable_stored_rplmn_from_nvram
+* DESCRIPTION
+*  This function is used to configure whether to use stored RPLMN from nvram
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+kal_bool nwsel_custom_disable_stored_rplmn_from_nvram(void)
+{
+    return nwsel_query_sbp_feature(SBP_NWSEL_DISABLE_STORED_RPLMN_FROM_NVRAM,KAL_FALSE);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  nwsel_custom_is_hpplmn_1st_attempt_enhance
+* DESCRIPTION
+*  H3G Hutchison Requirement:
+*   First BG scan when UE is registered on a VPLMN shall always be 
+*   2 min (HPLMN timer =2 min at first BG scan). This implementation shall be applied for 
+*   "Power on", "Out Of Service" and "Manual selection" scenarios.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+kal_bool nwsel_custom_is_hpplmn_1st_attempt_enhance(void)
+{
+    return nwsel_query_sbp_feature(SBP_MM_HPPLMN_1ST_ATTEMPT_ENHANCE,KAL_FALSE);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  nwsel_custom_disable_rplmn_from_gloci
+* DESCRIPTION
+*   Some operator doesn't expect MS will read the RPLMN information from GPRS LOCI.
+*   So need an option to switch on/off this feature.
+*
+* PARAMETERS
+*
+* RETURNS
+*   KAL_TRUE:
+*    - MS will not store the RPLMN information from GPRS LOCI.
+*   KAL_FALSE:
+*    - MS will store the RPLMN information from GPRS LOCI.
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+kal_bool nwsel_custom_disable_rplmn_from_gloci(void)
+{
+    return nwsel_query_sbp_feature(SBP_DISABLE_RPLMN_FROM_GLOCI,KAL_FALSE);
+}
+/*****************************************************************************
+* FUNCTION
+*  nwsel_custom_disable_rplmn_from_gloci
+* DESCRIPTION
+*   Some operator doesn't expect MS will read the RPLMN information from GPRS LOCI.
+*   So need an option to switch on/off this feature.
+*
+* PARAMETERS
+*
+* RETURNS
+*   KAL_TRUE:
+*    - MS will not store the RPLMN information from GPRS LOCI.
+*   KAL_FALSE:
+*    - MS will store the RPLMN information from GPRS LOCI.
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+kal_bool nwsel_custom_disable_rplmn_from_epsloci(void)
+{
+    return nwsel_query_sbp_feature(SBP_DISABLE_RPLMN_FROM_EPSLOCI,KAL_FALSE);
+}
+
+/*************************************************************************
+ * customized PS only LTE network definition
+ * 
+ * LTE CDMA netork reject UE with #18 CS DOMAIN NOT AVAILABLE
+ *   Ex: CUSTOM_PS_ONLY_PLMN[] = 
+ *           {"46692F","46689F"}         
+ *************************************************************************/
+
+/*  If roaming is disable, only specified PLMNs/HPLMN can be registered by UE  */
+
+const char *CUSTOM_PS_ONLY_PLMN[] = {"45006F","46011F", /* Adding RJIL PLMNs */
+                                     "405840","405854","405855","405856","405857",
+                                     "405858","405859","405860","405861","405862",
+                                     "405863","405864","405865","405866","405867",
+                                     "405868","405869","405870","405871","405872",
+                                     "405873","405874", /* Adding Seatel PLMN 45611 */
+                                     "45611F", /* Adding Malaysia YES operator 502152 */
+                                     "502152", /* Adding Hungary Digi operator 21603*/
+                                     "21603F",
+                                     "51566F", /* Adding Philippines Dito operator 51566F*/
+                                     INVALID_CUSTOM_WL_PLMN};
+
+const kal_uint32 CUSTOM_PS_ONLY_PLMN_NUM = sizeof(CUSTOM_PS_ONLY_PLMN)/sizeof(char *);
+
+/*************************************************************************
+PLMN's to be added are:
+1> Network does not support legacy RAT's(2/3G) and UE reported rat does not 
+consist LTE
+AND
+2> Network does not have any roaming agreement in national roaming area
+
+Optimization of not performing a recovery search only applies if UE is in 
+Virtual Idle mode
+(i.e if data is ongoing on another SIM).
+[Side effect]
+May cause a slight delay in recovery of UE, but will not impact data 
+performance on the other stack
+*************************************************************************/
+
+const char *CUSTOM_PLMN_FOR_BLOCKING_SEARCH_IN_VIDLE[] = {"405840","405854","405855","405856","405857","405858","405859","405860",
+									"405861","405862","405863","405864","405865","405866","405867","405868",
+									"405869","405870","405871","405872","405873","405874",CUSTOM_PLMN_SET_END};
+
+
+/*****************************************************************************
+* FUNCTION
+*  nwsel_init_sbp_config
+* DESCRIPTION
+*  This function is used to configure NWSEL custom setting dynamically by SBP function.
+*  This function is executed at NWSEL init stage before NWSEL receive INIT_REQ from RAC.
+*
+* PARAMETERS
+*  NONE
+* RETURNS
+*  NONE
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+void nwsel_init_sbp_config(void)
+{
+    nwsel_custom_config_ignore_eqplmn_operator_list();
+    nwsel_custom_config_hpplmn_search_mcc_list();
+    nwsel_trace_rplmn_hpplmn_mcc_list();   
+    nwsel_custom_config_custom_eq_plmn_list();
+    nwsel_custom_config_custom_irrdt_failure_rat_order();
+}
+
+/*****************************************************************************
+* FUNCTION
+*  nwsel_custom_trigger_ivsr_after_sim_invalid
+* DESCRIPTION
+*  When registering failed and entering "invalid SIM" state, decide to trigger IVSR
+*  strategy and leave "invalid SIM" state or not
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+kal_bool nwsel_custom_trigger_ivsr_after_sim_invalid(kal_bool is_registered_before, kal_bool is_trigger_ivsr_needed, kal_bool is_ivsr_after_guard_timer, kal_bool is_test_sim, mm_cause_enum cause, kal_uint8 ivsr_attempt_count)
+{
+    if ((query_ps_conf_test_mode() != PS_CONF_TEST_NONE) ||
+        (is_test_sim == KAL_TRUE))
+    {
+        return KAL_FALSE;
+    }
+
+    if (ivsr_attempt_count >= MAX_IVSR_ATTEMP_TIMES)
+    {
+        return KAL_FALSE;    
+    }
+    
+    if((is_registered_before == KAL_TRUE) &&
+        nwsel_query_sbp_feature(SBP_ENABLE_MODEM_IVSR,KAL_FALSE) == KAL_TRUE)
+    {
+        return KAL_TRUE;
+    }
+    else if((is_trigger_ivsr_needed == KAL_TRUE) &&
+             nwsel_query_sbp_feature(SBP_ALWAYS_TRIGGER_IVSR_AFTER_POWER_ON,KAL_FALSE) == KAL_TRUE)
+    {
+        return KAL_TRUE;
+    }
+    else if ((is_ivsr_after_guard_timer == KAL_TRUE) &&
+              nwsel_query_sbp_feature(SBP_RETRY_IVSR_AFTER_GUARD_TIMER,KAL_FALSE) == KAL_TRUE)
+    {
+        return KAL_TRUE;
+    }
+    
+    return KAL_FALSE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  nwsel_custom_get_hpplmn_search_timer_period
+* DESCRIPTION
+*  Customer needs customizable HPLMN_SEARCH_TIMER value only if SIM_PROVIDED value is 0
+*  Retaining the default as 0, but customer can make necessary changes to the 
+*  desired value and NWSEL will consider this value only if SIM_PROVIDED value is 0
+*
+* PARAMETERS
+*  NONE
+* RETURNS
+*  NWSEL_CUSTOM_HPLMN_SEARCH_PERIOD
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+kal_uint32 nwsel_custom_get_hpplmn_search_timer_period(void)
+{
+    return NWSEL_CUSTOM_HPPLMN_SEARCH_PERIOD;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  nwsel_custom_get_hpplmn_search_timer_period_from_sbp_data
+* DESCRIPTION
+*  Customer needs customizable HPLMN_SEARCH_TIMER value by 1-minute step.
+*  The return value would be directly used as the period of hpplmn timer in minute-unit.
+*  If need to modify the conversion of SBP data, please modify this function. 
+*
+* PARAMETERS
+*  NONE
+* RETURNS
+*  the value of hpplmn timer (unit: minutes)
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+kal_uint32 nwsel_custom_get_hpplmn_search_timer_period_from_sbp_data(kal_uint8 sim_interface)
+{
+    kal_uint8 ret = 0;
+
+    ret = nwsel_query_sbp_data_feature_with_simslot(sim_interface, SBP_DATA_HPPLMN_SEARCH_TIMER);
+    
+    return (kal_uint32)ret;
+}
+
+/*************************************************************************
+ * Customized PLMN List for disabling searching RPLMN RAT first
+ * Make sure SBP_CUSTOM_PREFER_RPLMN_RAT is turned on, and add entries as following
+ * PLMN on this list which is RPLMN will search from NVRAM prefer RAT, otherwise, from RPLMN RAT.
+ * ex: if you want to disable search RPLMN RAT for china CMCC,
+ * then you could add "46000F" in this list
+ * i.e. CUSTOM_NWSEL_DISABLE_RPLMN_RAT_LIST[] = {"46000F", CUSTOM_DISABLE_RPLMN_RAT_SET_END}
+ * NOTE: please add the plmn(specified by the string) before CUSTOM_DISABLE_RPLMN_RAT_SET_END
+ *************************************************************************/
+const char *CUSTOM_NWSEL_DISABLE_RPLMN_RAT_LIST[] = {CUSTOM_DISABLE_RPLMN_RAT_SET_END};
+const kal_uint32 CUSTOM_NWSEL_DISABLE_RPLMN_RAT_NUM = sizeof(CUSTOM_NWSEL_DISABLE_RPLMN_RAT_LIST)/sizeof(char *);
+
+/*************************************************************************
+ * Customized MCC List for disabling searching RPLMN RAT first
+ * Make sure SBP_CUSTOM_PREFER_RPLMN_RAT is turned on, and add entries as following
+ * MCC on this list which is RPLMN will search from NVRAM prefer RAT, otherwise, from RPLMN RAT.
+ * ex: if you want to disable search RPLMN RAT for china PLMN,
+ * then you could add 460 in this list
+ * i.e. CUSTOM_NWSEL_DISABLE_RPLMN_RAT_MCC_LIST[] = {460, CUSTOM_DISABLE_RPLMN_RAT_MCC_SET_END}
+ * NOTE: please add the MCC(specified by 3 digit) before CUSTOM_DISABLE_RPLMN_RAT_MCC_SET_END
+ *************************************************************************/
+const kal_uint32 CUSTOM_NWSEL_DISABLE_RPLMN_RAT_MCC_LIST[] = {CUSTOM_DISABLE_RPLMN_RAT_MCC_SET_END};
+const kal_uint32 CUSTOM_NWSEL_DISABLE_RPLMN_RAT_MCC_NUM = sizeof(CUSTOM_NWSEL_DISABLE_RPLMN_RAT_MCC_LIST)/sizeof(kal_uint32);
+
+/*************************************************************************
+ * EE PLMN 
+ * 
+ * Summary: Only for these PLMNs under EE network,for ATTACH Reject cause#6 
+ * Illegal notification is indicated to GMSS.
+ * More plmns can be appended to below list according to the requirement
+ * o 234-30 - EE TMO
+ * o 234-33 - EE Orange 
+ * o 234-08 - BT One Phone 
+ * 
+ *************************************************************************/
+const kal_uint32 CUSTOM_BLOCK_ILLEGAL_ME_SIM_SBP_LIST[] = {16, 0xffffffff}; //OP16 = EE
+
+
+const kal_uint32 CUSTOM_BLOCK_ILLEGAL_ME_SIM_SBP_NUM = sizeof(CUSTOM_BLOCK_ILLEGAL_ME_SIM_SBP_LIST)/sizeof(kal_uint32);
+
+const char *CUSTOM_BLOCK_ILLEGAL_ME_PLMN_LIST[][CUSTOM_BLOCK_ILLEGAL_ME_PLMN_MAX_NUM] = {
+	                                           {"23430", "23433", "23408", "FFFFFF", "FFFFFF"} //EE
+                                               };
+
+const kal_uint32 CUSTOM_BLOCK_ILLEGAL_ME_PLMN_SET = sizeof(CUSTOM_BLOCK_ILLEGAL_ME_PLMN_LIST)/(sizeof(char *)*CUSTOM_BLOCK_ILLEGAL_ME_PLMN_MAX_NUM);
+
+kal_uint32 nwsel_custom_get_block_illegal_me_plmn_max_num(void)
+{
+    return CUSTOM_BLOCK_ILLEGAL_ME_PLMN_MAX_NUM;
+}
+
+const char *NWSEL_CUSTOM_INVALID_PLMN_ID_STR = "FFFFFF";
+/*****************************************************************************
+* FUNCTION
+*   nwsel_custom_query_sbp_feature
+*
+* DESCRIPTION
+*   this function is used to query SBP feature controlled by custom with 
+*   network PLMN ID or/and home PLMN ID
+*
+* PARAMETERS
+*   simInterface    -   SIM interface
+*   feature         -   SBP feature
+*   nw_plmn_id_ptr  -   NW PLMN ID, string format, xxxxxF or xxxxxx
+*                       NWSEL_CUSTOM_INVALID_PLMN_ID_STR if not suitable cell
+*   hplmn_id_ptr    -   first priority home PLMN ID, string format, xxxxxF or xxxxxx
+*                       if EHPLMN is present and not empty, it's from EHPLMN[0]
+*                       otherwise it's from IMSI.
+*                       NWSEL_CUSTOM_INVALID_PLMN_ID_STR if USIM is not inserted or removed
+*
+* RETURNS
+*   NWSEL_CUSTOM_SBP_RESULT_NOT_CHNAGED:
+*       SBP is not changed by custom
+*   NWSEL_CUSTOM_SBP_RESULT_ENABLED:
+*       SBP is enabled by custom
+*   NWSEL_CUSTOM_SBP_RESULT_DISABLED:
+*       SBP is disabled by custom
+*
+* GLOBALS AFFECTED
+*   NOTE: not all SBP could be controlled by NW PLMN ID
+*         You can try with this function. But finally please confirm with MTK 
+*         if the SBP can be controlled by NW PLMN ID.
+*
+*   When hplmn_id is from IMSI, it is the same DSBP, the priority here is 
+*   higher than DSBP.
+*
+*   Some functions which customize SBP in this file could be merged in
+*   this function or you can keep the customization in the original functions.
+*   But the priority in this function is higher than the original functions.
+*   e.g.
+*   nwsel_custom_is_display_roaming_hplmn_in_eplmn()
+*   nwsel_custom_disable_previous_rplmn_from_nvram()
+*   ..., etc
+*
+*****************************************************************************/
+nwsel_custom_sbp_result_enum nwsel_custom_query_sbp_feature
+(
+    kal_uint8               simInterface,
+    sbp_md_feature_enum     feature,
+    kal_uint8               *nw_plmn_id_ptr,
+    kal_uint8               *hplmn_id_ptr
+)
+{
+    nwsel_custom_sbp_result_enum result = NWSEL_CUSTOM_SBP_RESULT_NOT_CHNAGED;
+
+    // input check
+    if (nw_plmn_id_ptr == NULL || hplmn_id_ptr == NULL)
+    {
+        return NWSEL_CUSTOM_SBP_RESULT_NOT_CHNAGED;
+    }
+    
+    /*
+     *  to control SBP feature with explicit purpose only, otherwise plase remain NOT_CHANGED
+     */
+#if UNIT_TEST // the following is a sample code and for internal UT, please don't modify it
+    if (feature == SBP_DISABLE_DISPLAY_ROAMING_HPLMN_IN_EPLMN)
+    {
+        if (kal_mem_cmp(nw_plmn_id_ptr, "12345", strlen("12345")) == 0)
+        {
+            if (kal_mem_cmp(hplmn_id_ptr, "12345", strlen("12345")) == 0)
+            {
+                result = NWSEL_CUSTOM_SBP_RESULT_DISABLED;
+            }
+        }
+    }
+#else // else of UNIT_TEST
+    if (feature == SBP_DISABLE_DISPLAY_ROAMING_HPLMN_IN_EPLMN)
+    {
+        /* in India, charging under roaming is more expensive
+           it's better to display roaming for inter-circles to let user be aware of this condition
+           customer can turn on this SBP if you have other concern . */
+        // turn off this SBP to display roaming in India when EHPLMN is in EQPLMN list for 404/405 xxx   
+        if (hplmn_id_ptr[0] == '4' && hplmn_id_ptr[1] == '0' && (hplmn_id_ptr[2] == '4' || hplmn_id_ptr[2] == '5'))
+        {
+            // except for Jio
+            if (hplmn_id_ptr[0] == '4' && hplmn_id_ptr[1] == '0' && hplmn_id_ptr[2] == '5' &&
+                // 405 840
+                ((hplmn_id_ptr[3] == '8' && hplmn_id_ptr[4] == '4' && hplmn_id_ptr[5] == '0') ||
+                // 405 854~ 405 874
+                  (hplmn_id_ptr[3] == '8' && hplmn_id_ptr[4] == '5' && (hplmn_id_ptr[5] >= '4' && hplmn_id_ptr[5] <= '9')) ||
+                  (hplmn_id_ptr[3] == '8' && hplmn_id_ptr[4] == '6' && (hplmn_id_ptr[5] >= '0' && hplmn_id_ptr[5] <= '9')) ||
+                  (hplmn_id_ptr[3] == '8' && hplmn_id_ptr[4] == '7' && (hplmn_id_ptr[5] >= '0' && hplmn_id_ptr[5] <= '4')) ||
+                  (hplmn_id_ptr[3] == '8' && hplmn_id_ptr[4] == '7')))
+            {
+                result = NWSEL_CUSTOM_SBP_RESULT_NOT_CHNAGED;
+            }
+            else
+            {
+                result = NWSEL_CUSTOM_SBP_RESULT_DISABLED;
+            }
+        }
+    }
+#endif // end of UNIT_TEST
+    
+    return result;
+    
+}
+
+/* Periodic clear FPLMN timer length, unit: min */
+const kal_uint32 PERIODIC_CLEAR_FPLMN_TIMER_LENGTH = (60 * 24);
+const kal_uint32 SPRINT_PERIODIC_CLEAR_FPLMN_TIMER_LENGTH = (60 * 24);
+
+/*  NR_MAP_OOS_NR_AVAIL_CONFIDENCE_TABLE [level1][level2] */
+const kal_uint32 NR_MAP_OOS_NR_AVAIL_CONFIDENCE_TABLE[NR_AVAIL_MAX][NR_AVAIL_MAX] = {
+    /* level 1 : NR_AVAIL_UNKNOWN, 
+        * level 2 : NR_AVAIL_UNKNOWN, NR_AVAIL_UNAVAIL, NR_AVAIL_AVAIL
+        */
+    {NWSEL_OOS_NR_AVAIL_UNKNOW, NWSEL_OOS_NR_UNAVAIL_HIGH, NWSEL_OOS_NR_AVAIL_HIGH},
+
+    /* level 1 : NR_AVAIL_UNAVAIL, 
+        * level 2 : NR_AVAIL_UNKNOWN, NR_AVAIL_UNAVAIL, NR_AVAIL_AVAIL
+        */
+    {NWSEL_OOS_NR_UNAVAIL_HIGH, NWSEL_OOS_NR_UNAVAIL_HIGH, NWSEL_OOS_NR_AVAIL_HIGH},
+
+    /* level 1 : NR_AVAIL_AVAIL, 
+        * level 2 : NR_AVAIL_UNKNOWN, NR_AVAIL_UNAVAIL, NR_AVAIL_AVAIL
+        */    
+    
+    {NWSEL_OOS_NR_AVAIL_LOW, NWSEL_OOS_NR_UNAVAIL_HIGH, NWSEL_OOS_NR_AVAIL_HIGH}
+};    
+
+/*****************************************************************************
+* FUNCTION
+*   nwsel_custom_search_action_for_roaming_not_allow
+*
+* DESCRIPTION
+*   this function is used to customize UE search behavior after receiving reject cause #13
+*
+* PARAMETERS
+*   nw_plmn_id_ptr  -   NW PLMN ID, string format, xxxxxF or xxxxxx
+*                       NWSEL_CUSTOM_INVALID_PLMN_ID_STR if not suitable cell
+*   rat             -   current rat: RAT_NR, RAT_LTE, RAT_UMTS, RAT_GSM
+*   is_on_hplmn     -   Check whether UE camped on hplmn or not.
+*                       Since one UE may have multiple HPLMNs, 
+*                       it is more preferable to judge UE's roaming status.
+*   is_manual_resel -   Check whether PLMN search procedure (attach procedure) is triggered by user or not. 
+*
+* RETURNS
+*   KAL_TRUE        -   UE will search current TA/LA after receiving #13
+*   KAL_FALSE       -   default behavior
+*
+* GLOBALS AFFECTED
+*   NOTE: Def for nwsel_search_action_for_reject_cause_enum:
+*
+*       NWSEL_SEARCH_ACTION_DEFAULT,
+*           Default behavior
+*       NWSEL_AUTO_SEARCH_NEXT_PLMN_RAT_AFTER_REJ13,
+*       NWSEL_MANUAL_SEARCH_NEXT_PLMN_RAT_AFTER_REJ13,
+*           Search next plmn/rat after receiving #13, 
+*           and the current plmn/rat will be retried if there is no other available plmn.
+*           e.g. if UE receivied #13 on (PLMN_A, 4G), the next target will be (PLMN_A, 3G), 
+*           and (PLMN_A, 4G) will be retried in the end of plmn search procedure.
+*       NWSEL_AUTO_SEARCH_NEXT_PLMN_AFTER_REJ13,
+*       NWSEL_MANUAL_SEARCH_NEXT_PLMN_AFTER_REJ13,
+*           Search next plmn after receiving #13, 
+*           and the current plmn for all rats will be retried if there is no other available plmn.
+*           e.g. if UE receivied #13 on (PLMN_A, 4G), the next target will be (PLMN_B, 4G), 
+*           and (PLMN_A, 4G/3G/2G) will be retried in the end of plmn search procedure.
+*       NWSEL_AUTO_SEARCH_CURR_PLMN_RAT_AFTER_REJ13,
+*       NWSEL_MANUAL_SEARCH_CURR_PLMN_RAT_AFTER_REJ13,
+*           Search current plmn/rat after receiving #13 
+*           until there is no other available LA/TA for the current plmn/rat
+*           e.g. if UE receivied #13 on (PLMN_A, 4G), the next target will be (PLMN_A, 4G)
+*
+*****************************************************************************/
+nwsel_search_action_for_reject_cause_enum nwsel_custom_search_action_for_roaming_not_allow
+(
+    const kal_uint8         *nw_plmn_id_ptr,
+    rat_enum                rat,
+    kal_bool                is_on_hplmn,
+    kal_bool                is_manual_resel
+)
+{
+    /* Default behavior for rej13 */
+    nwsel_search_action_for_reject_cause_enum result = NWSEL_SEARCH_ACTION_DEFAULT;
+
+    if (nwsel_query_sbp_feature(SBP_REJ_13_SEARCH_NEXT_BEFORE_OTHER_LA_OR_TA, KAL_FALSE) == KAL_TRUE)
+    {   
+        if (is_on_hplmn && rat == RAT_UMTS &&
+            nw_plmn_id_ptr[0] == '7' && nw_plmn_id_ptr[1] == '3' && nw_plmn_id_ptr[2] == '0' &&
+            nw_plmn_id_ptr[3] == '0' && nw_plmn_id_ptr[4] == '8' && nw_plmn_id_ptr[5] == 'F' )
+        {
+            result = (is_manual_resel)?NWSEL_MANUAL_SEARCH_NEXT_PLMN_AFTER_REJ13:NWSEL_AUTO_SEARCH_NEXT_PLMN_AFTER_REJ13;
+        }
+        else if (is_on_hplmn)
+        {
+            result = (is_manual_resel)?NWSEL_MANUAL_SEARCH_CURR_PLMN_RAT_AFTER_REJ13:NWSEL_AUTO_SEARCH_CURR_PLMN_RAT_AFTER_REJ13;
+        }
+        else
+        {
+            result = (is_manual_resel)?NWSEL_MANUAL_SEARCH_NEXT_PLMN_AFTER_REJ13:NWSEL_AUTO_SEARCH_NEXT_PLMN_AFTER_REJ13;
+        }
+    }
+    else
+    {
+        result = NWSEL_SEARCH_ACTION_DEFAULT;
+    }
+
+    return result;
+}
+
+/*************************************************************************
+ * If SBP_ALLOW_RETRY_FPLMN_ONCE is ON, after receive #11, after RETRY_FPLMN_TIMER timeout,
+ * UE will search FPLMN one more time.
+ * Customization can be done here. Config the RETRY_FPLMN timer value as below. UE will 
+ * act default behavior after retry (no matter successful or failed).
+ *************************************************************************/
+ /* default value: 5 minutes */
+ const kal_uint32 NWSEL_RETRY_FPLMN_TIMER_PERIOD = 5 * KAL_TICKS_1_MIN;
+
diff --git a/mcu/custom/protocol/common/ps/custom_nwsel_config.h b/mcu/custom/protocol/common/ps/custom_nwsel_config.h
new file mode 100644
index 0000000..b07ba1f
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_nwsel_config.h
@@ -0,0 +1,753 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * custom_nwsel_config.h
+ *
+ * Project:
+ * --------
+ *   MONZA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the configurations of Selection customization feature
+ *
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+>>>> ORIGINAL //UMOLY/BRANCHES_LR12/LR12.W1645.MD.MP/mcu/pcore/custom/modem/common/ps/custom_nwsel_config.h#2
+ * removed!
+ * removed!
+ * removed!
+ *
+==== THEIRS //UMOLY/BRANCHES_LR12/LR12.W1645.MD.MP/mcu/pcore/custom/modem/common/ps/custom_nwsel_config.h#3
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+==== YOURS //ws_zhipeng.feng_mbjswgwt3012_1579/UMOLY/TRUNK/LR12/mcu/pcore/custom/modem/common/ps/custom_nwsel_config.h
+<<<<
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef _CUSTOM_NWSEL_CONFIG_H
+#define _CUSTOM_NWSEL_CONFIG_H
+
+
+#include "kal_general_types.h"
+#include "gmss_public.h"
+#include "custom_gmss_config.h"
+
+/*************************************************************************
+* Enum
+*************************************************************************/
+typedef enum
+{
+    MM_ENTER_STATE_DEPEND_ON_CONDITION,
+    MM_ENTER_STATE_PLMN_SEARCH,
+    MM_ENTER_STATE_ATTEMPTING_TO_UPDATE
+}mm_state_after_lu_abnormal_enum;
+
+typedef enum
+{
+    EMM_ENTER_STATE_DEPEND_ON_CONDITION,
+    EMM_ENTER_STATE_PLMN_SEARCH,
+    EMM_ENTER_STATE_ATTEMPTING_TO_ATTACH
+}emm_state_after_detach_not_req_abnormal_enum;
+
+typedef enum
+{
+    NWSEL_REJECT_13,
+    NWSEL_REJECT_15,
+    NWSEL_REJECT_ABNORMAL,
+    NWSEL_DETACH_NOT_REQ_ABNORMAL,
+    NWSEL_DISABLE_EUTRAN_MAX_CAUSE
+}nwsel_disable_eutran_cause_enum;
+
+typedef enum {
+    NWSEL_IRRDT_NONE,
+    NWSEL_IRRDT_4G3,
+    NWSEL_IRRDT_4G2,
+    NWSEL_IRRDT_3G4,
+    NWSEL_IRRDT_2G4,
+    NWSEL_IRRDT_MAX_TYPE = NWSEL_IRRDT_2G4
+}nwsel_irrdt_type_enum;
+
+typedef enum
+{
+    CUTSOM_SIM_UNKNOWN    = 0,
+    CUTSOM_SIM_CT         = 1,
+    CUTSOM_SIM_VZW        = 2,
+    CUSTOM_SIM_SPRINT     = 3,
+    CUTSOM_SIM_CMCC       = 4,
+    CUSTOM_SIM_SMARTFREN  = 5,
+    CUSTOM_SIM_RJIO       = 6,
+    CUSTOM_SIM_KDDI_TEST  = 7,
+    CUTSOM_SIM_ALL        = 0xff,    
+}nwsel_custom_sim_operator_enum;
+
+typedef enum
+{
+    CHINA_HK_MACAU_BOUNDARY_AREA    = 0,
+        
+}nwsel_manual_list_boundary_area_name_enum;
+
+typedef enum
+{
+    NWSEL_CUSTOM_SBP_RESULT_NOT_CHNAGED,
+    NWSEL_CUSTOM_SBP_RESULT_ENABLED,
+    NWSEL_CUSTOM_SBP_RESULT_DISABLED
+} nwsel_custom_sbp_result_enum;
+
+/*************************************************************************
+* Constant
+*************************************************************************/
+/* Do not modify the following default values */
+
+#define NWSEL_INVALID_TIMER_VALUE 0xffffffff // SHALL NOT MODIFY!
+extern const kal_uint32 NWSEL_RETRY_ABNORMAL_LAI_TIMER_PERIOD;
+extern const kal_uint32 NWSEL_RETRY_ABNORMAL_RAI_TIMER_PERIOD;
+
+/* International Higher Priorirty PLMN Search */
+#define ALL_MCC_ALLOWED 0xfff // SHALL NOT MODIFY!
+#define NO_MCC_ALLOWED 0xffffffff // SHALL NOT MODIFY!
+
+//extern const kal_uint32 NWSEL_RECOVERY_TIMER_INTERVAL[];
+extern const kal_uint32 NWSEL_EUTRAN_DISABLE_TIMER_VALUE;
+extern const kal_uint32 NWSEL_FOR_RJIO_RECOVER_TIMER_VALUE;
+extern const kal_uint32 NWSEL_EUTRAN_DISABLE_TD_TIMER_VALUE;
+extern const kal_uint32 NWSEL_EUTRAN_DISABLE_ESM_TIMER_VALUE;
+extern const kal_uint32 NWSEL_EUTRAN_DISABLE_FOR_REJ_IN_HPLMN_TIMER_VALUE;
+extern const kal_uint32 NWSEL_CUSTOM_DISABLE_EUTRAN_TIMER_PERIOD;
+extern const kal_uint32 NWSEL_INCREMENTAL_LTE_DISABLE_TIMER_VALUE[];
+extern const kal_uint32 NWSEL_INCREMENTAL_LTE_DISABLE_TIMER_MAX_COUNT;
+#ifdef __MODEM_EM_MODE__
+extern const kal_uint32 NWSEL_EM_REPORT_TIMER_VALUE;
+#endif
+extern kal_uint32 *NWSEL_RPLMN_MCC_LIST;
+extern kal_uint32 NWSEL_RPLMN_MCC_NUM;
+extern kal_uint32 *NWSEL_HPPLMN_MCC_LIST;
+extern kal_uint32 NWSEL_HPPLMN_MCC_NUM;
+
+/* CUSTOM_EQ_PLMN_SET_END indicates the end of each EQ PLMN set */
+#define CUSTOM_EQ_PLMN_SET_END "FFFFFF" // SHALL NOT MODIFY!
+extern const char **CUSTOM_EQ_PLMN;
+extern kal_uint32 CUSTOM_EQ_PLMN_NUM;
+
+extern const char *CUSTOM_TMO_LEGACY_SIM_EHPLMN_LIST[];
+
+extern const char *CUSTOM_CSFB_PREFER_2G_PLMN[];
+
+#define INVALID_CUSTOM_WL_PLMN "FFFFFF" // SHALL NOT MODIFY!
+extern const char *CUSTOM_WL_PLMN[];
+extern const kal_uint32 CUSTOM_WL_PLMN_NUM;
+
+#define INVALID_CUSTOM_BL_PLMN "FFFFFF" // SHALL NOT MODIFY!
+extern const char *CUSTOM_BL_PLMN[];
+extern const rat_enum CUSTOM_BL_RAT[];
+extern const kal_uint32 CUSTOM_BL_PLMN_NUM;
+
+extern const char *CUSTOM_EUTRAN_DISABLE_WL_PLMN[];
+extern const kal_uint32 CUSTOM_EUTRAN_DISABLE_WL_PLMN_NUM;
+
+extern const char *CUSTOM_CORRECT_HPLMN[];
+
+extern const char *CUSTOM_CORRECT_PLMN[];
+
+extern const kal_uint8 CUSTOM_MAX_LATA_FOR_TEST_CELL[2];
+
+extern const rat_enum CUSTOM_FROM_RAT[];
+
+extern const rat_enum CUSTOM_CORRECT_RAT[];
+
+extern const kal_uint32 CUSTOM_CORRECT_PLMN_NUM;
+
+extern const char *CUSTOM_FR_BL_PLMN[];
+extern const rat_enum CUSTOM_FR_BL_RAT[];
+extern const kal_uint32 CUSTOM_FR_BL_PLMN_NUM;
+
+#define NUM_OF_BD_MCC 2
+extern kal_uint32 NWSEL_BD_MCC_LIST[][NUM_OF_BD_MCC];
+extern const kal_uint32 NWSEL_BD_MCC_AREA_NUM;
+extern nwsel_custom_sim_operator_enum NWSEL_BD_SIM_LIST[];
+
+/* Ignore equivalent PLMN list assigned by operator */
+#define IGNORE_EQPLMN_OPERATOR_SET_END "FFFFFF" // SHALL NOT MODIFY!
+extern char *IGNORE_EQPLMN_OPERATOR[];
+extern kal_uint32 IGNORE_EQPLMN_OPERATOR_NUM;
+extern char *IGNORE_EQPLMN_OPERATOR_TEMP[];
+#define INVALID_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH "FFFFFF" // SHALL NOT MODIFY!
+extern char* ADD_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH[];
+extern kal_uint32 ADD_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH_NUM;
+extern char* YOIGO_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH[];
+extern char* ADD_CUSTOM_PLMN_IN_MANUAL_RECOVERY_SEARCH_TEMP[];
+
+extern const char *CUSTOM_NON_US_PLMN[];
+extern const kal_uint32 CUSTOM_NON_US_PLMN_NUM;
+
+extern const kal_uint32 NWSEL_ELEVATOR_SEARCH_LTE_TIMER_PERIOD;
+extern const kal_uint32 NWSEL_ELEVATOR_MODE_GUARD_TIMER_PERIOD;
+
+#define NWSEL_CUSTOM_HOME_MCC_NOT_DEFINED 0xffffffff // SHALL NOT MODIFY!
+#define NWSEL_RAT_ORDER_NUM 2 /* DO NOT MODIFY */
+#define NWSEL_RAT_ENTRY_NUM 4 /* DO NOT MODIFY */
+extern const kal_uint32 NWSEL_CUSTOM_HOME_MCC_NUM;
+
+#define NWSEL_OOS_INTERLEAVE_ENTRY_NUM 2  /* should be 0 to 2 */
+
+
+extern const kal_uint32 NWSEL_CUSTOM_HOME_MCC[];
+extern const rat_enum custom_rat_order_op01[NWSEL_RAT_ORDER_NUM][NWSEL_RAT_ENTRY_NUM];
+extern const rat_enum custom_rat_ocustom_rat_order_op01_roamingrder_op01[NWSEL_RAT_ORDER_NUM][NWSEL_RAT_ENTRY_NUM];
+extern const rat_enum custom_rat_order_def[NWSEL_RAT_ORDER_NUM][NWSEL_RAT_ENTRY_NUM];
+extern const rat_enum custom_power_on_search_rat[NWSEL_RAT_ENTRY_NUM];
+extern const rat_enum inter_rat_rssi_sorted_search_rat[NWSEL_RAT_ENTRY_NUM];
+extern const rat_enum custom_roaming_fullband_rat[NWSEL_RAT_ENTRY_NUM];
+extern const rat_enum custom_quick_search_rat[NWSEL_RAT_ENTRY_NUM];
+extern const rat_enum* custom_irrdt_failure_rat_order[NWSEL_IRRDT_MAX_TYPE];
+extern const rat_enum custom_consider_duplex_mode_fullband_rat[NWSEL_RAT_ENTRY_NUM];
+
+extern const rat_enum custom_power_on_flight_mode_on_ecc_search_rat_table[][NWSEL_RAT_ENTRY_NUM];
+extern const kal_uint8 NWSEL_MAX_POWER_ON_FLIGHT_MODE_ECC_DEARCH_RAT_TABLE_INDEX;
+
+extern const char *CUSTOM_PS_ONLY_PLMN[];
+extern const kal_uint32 CUSTOM_PS_ONLY_PLMN_NUM;
+extern const char *CUSTOM_FPLMN[];
+extern const kal_uint32 CUSTOM_FPLMN_NUM;
+
+extern const char *CUSTOM_PLMN_FOR_BLOCKING_SEARCH_IN_VIDLE[];
+
+/* each set contains CUSTOM_NWSEL_EHPLMN_MAX_NUM of EHPLMNs */
+#define CUSTOM_NWSEL_EHPLMN_MAX_NUM 5
+/* EHPLMN only support up to 8, shall not exceed or new value would be dropped */
+extern const char *CUSTOM_NWSEL_EHPLMN_LIST[][CUSTOM_NWSEL_EHPLMN_MAX_NUM];
+/* How many sets */
+extern const kal_uint32 CUSTOM_NWSEL_EHLMN_SET;
+
+// Korea MCC
+extern const kal_uint16 KOREA_MCC[];
+extern const kal_uint8 KOREA_MCC_NUM;
+
+/* IVSR guard timer definitions*/
+extern const kal_uint8 MAX_IVSR_GUARD_TIMER_NUM;
+extern const kal_uint8 MAX_IVSR_GUARD_TIMER_INTERVAL_NUM;
+extern const kal_uint32 IVSR_GUARD_TIMER_INTERVAL[];
+
+/* Periodic clear FPLMN timer length, unit: min */
+extern const kal_uint32 PERIODIC_CLEAR_FPLMN_TIMER_LENGTH;
+extern const kal_uint32 SPRINT_PERIODIC_CLEAR_FPLMN_TIMER_LENGTH; 
+
+
+#define CUSTOM_DISABLE_RPLMN_RAT_SET_END "FFFFFF" // SHALL NOT MODIFY!
+extern const char *CUSTOM_NWSEL_DISABLE_RPLMN_RAT_LIST[];
+extern const kal_uint32 CUSTOM_NWSEL_DISABLE_RPLMN_RAT_NUM;
+
+#define CUSTOM_DISABLE_RPLMN_RAT_MCC_SET_END 0xffffffff // SHALL NOT MODIFY!
+extern const kal_uint32 CUSTOM_NWSEL_DISABLE_RPLMN_RAT_MCC_LIST[];
+extern const kal_uint32 CUSTOM_NWSEL_DISABLE_RPLMN_RAT_MCC_NUM;
+
+extern const kal_uint8 NWSEL_INACTIVE_MODE_MAX_NORMAL_OOS_RECOVERY_DEFAULT_VALUE;
+extern const kal_uint32 NWSEL_INACTIVE_FULLBAND_PERIOD_DEFAULT_VALUE;
+
+/* Customize rude wakeup disable timer */
+extern const kal_uint32 NWSEL_RUDE_WAKEUP_DISABLE_TIMER_VALUE;
+
+#define CUSTOM_SIM_SPECIFIC_EQ_PLMN_MAX_NUM 5
+extern const char *CUSTOM_SIM_SPECIFIC_EQ_PLMN_LIST[][CUSTOM_SIM_SPECIFIC_EQ_PLMN_MAX_NUM];
+extern const kal_uint32 CUSTOMSIM_SPECIFIC_EQ_PLMN_SET;
+
+#define CUSTOM_BLOCK_ILLEGAL_ME_PLMN_MAX_NUM 5
+extern const char *CUSTOM_BLOCK_ILLEGAL_ME_PLMN_LIST[][CUSTOM_BLOCK_ILLEGAL_ME_PLMN_MAX_NUM];
+extern const kal_uint32 CUSTOM_BLOCK_ILLEGAL_ME_PLMN_SET;
+
+extern const kal_uint32 CUSTOM_BLOCK_ILLEGAL_ME_SIM_SBP_LIST[];
+extern const kal_uint32 CUSTOM_BLOCK_ILLEGAL_ME_SIM_SBP_NUM;
+extern const char *NWSEL_CUSTOM_INVALID_PLMN_ID_STR;
+/***GPS***/
+
+#define MANUAL_LIST_BOUNDARY_NEIGHBOR_COUNTRY_MAX_NUM 10
+#define NWSEL_MAX_GPS_DISABLE_EUTRAN_PLMN_NUM 10
+
+extern const kal_uint32 NWSEL_RETRY_FPLMN_TIMER_PERIOD;
+
+extern geo_area_struct MANUAL_LIST_BOUNDARY_AREA[];
+extern char *MANUAL_LIST_BOUNDARY_NEIGHBOR_COUNTRY_MCC[][MANUAL_LIST_BOUNDARY_NEIGHBOR_COUNTRY_MAX_NUM];
+extern kal_uint32 MANUAL_LIST_BOUNDARY_AREA_NUM;
+extern geo_area_struct NWSEL_GPS_DISABLE_EUTRAN_AREA;
+
+/* NR MAP */
+#define NWSEL_OOS_NR_AVAIL_HIGH 20
+#define NWSEL_OOS_NR_AVAIL_LOW 10
+#define NWSEL_OOS_NR_UNAVAIL_HIGH 20
+#define NWSEL_OOS_NR_UNAVAIL_LOW 10
+#define NWSEL_OOS_NR_AVAIL_UNKNOW 0
+extern const kal_uint32 NR_MAP_OOS_NR_AVAIL_CONFIDENCE_TABLE[NR_AVAIL_MAX][NR_AVAIL_MAX];
+
+/* Customize Timer Table */
+#define NWSEL_CUSTOMIZE_TIMER_NUM 7
+#define NWSEL_CUSTOMIZE_TIMER_SUPPORT_PLMN_NUM 16
+
+typedef struct
+{
+    char     timer_id[50];
+    kal_uint32 (* customize_timer_value)(int n);
+} customize_timer_table;
+
+extern customize_timer_table NWSEL_CUSTOMIZE_TIMER_TABLE[];
+
+/*************************************************************************
+* Function
+*************************************************************************/
+
+//extern kal_uint8 nwsel_get_max_recovery_timer_num(void);
+extern kal_bool nwsel_custom_skip_no_suitable_plmn_rat(void);
+extern emm_state_after_detach_not_req_abnormal_enum nwsel_custom_state_after_detach_not_req_abnormal(void);
+extern kal_bool nwsel_custom_is_try_abnormal_lai_once_more(void); 
+extern kal_bool nwsel_custom_search_next_plmn_when_access_class_barred(void);
+extern kal_bool nwsel_custom_ignore_eqplmn_in_manual_mode(void);
+extern kal_bool nwsel_custom_ignore_eqplmn_in_auto_mode(void);
+extern kal_bool nwsel_custom_disable_stored_rplmn_from_nvram(void);
+extern kal_bool nwsel_custom_disable_rplmn_from_gloci(void);
+extern kal_bool nwsel_custom_disable_rplmn_from_epsloci(void);
+extern kal_bool nwsel_custom_is_hpplmn_1st_attempt_enhance(void);
+extern kal_bool nwsel_custom_is_disable_eutran_after_reject(nwsel_disable_eutran_cause_enum cause);
+extern kal_bool nwsel_custom_is_display_roaming_hplmn_in_eplmn(kal_uint8 sim_interface);
+extern kal_bool nwsel_custom_is_disable_skip_new_fplmn_manual_resel(void);
+extern kal_bool nwsel_custom_enable_plmnsel_oplmn_coexist(void);
+extern kal_bool nwsel_custom_use_fplmn(void);
+extern kal_uint32 nwsel_custom_get_hpplmn_search_timer_period(void);
+extern kal_uint32 nwsel_custom_get_hpplmn_search_timer_period_from_sbp_data(kal_uint8 sim_interface);
+extern void nwsel_init_sbp_config(void);
+extern kal_bool nwsel_custom_trigger_ivsr_after_sim_invalid(kal_bool is_registered_before, kal_bool is_trigger_ivsr_needed, kal_bool is_ivsr_after_guard_timer, kal_bool is_test_sim, mm_cause_enum cause, kal_uint8 ivsr_attempt_count);
+extern kal_uint32 nwsel_custom_get_block_illegal_me_plmn_max_num(void);
+extern nwsel_custom_sbp_result_enum nwsel_custom_query_sbp_feature(kal_uint8 simInterface, sbp_md_feature_enum feature, kal_uint8 *nw_plmn_id_ptr, kal_uint8 *hplmn_id_ptr);
+extern kal_uint32 nwsel_custom_get_bd_mcc_num(void);
+extern kal_uint32 nwsel_custom_get_nwsel_ehplmn_max_num(void);
+extern kal_uint32 nwsel_custom_get_nwsel_tmo_legacy_sim_max_num(void);
+extern kal_uint32 nwsel_custom_get_sim_specific_eq_plmn_max_num(void);
+extern void nwsel_custom_config_ignore_eqplmn_operator_list(void);
+extern void nwsel_custom_config_hpplmn_search_mcc_list(void);   
+extern void nwsel_custom_config_custom_eq_plmn_list(void);
+extern nwsel_search_action_for_reject_cause_enum nwsel_custom_search_action_for_roaming_not_allow(const kal_uint8 *nw_plmn_id_ptr, rat_enum rat, kal_bool is_on_hplmn, kal_bool is_manual_resel);
+#endif /* _CUSTOM_NWSEL_CONFIG_H */
+
diff --git a/mcu/custom/protocol/common/ps/custom_pam_config.c b/mcu/custom/protocol/common/ps/custom_pam_config.c
new file mode 100644
index 0000000..3957a78
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_pam_config.c
@@ -0,0 +1,109 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CUSTOM_PAM_CONFIG.C
+ *
+ * Project:
+ * --------
+ *   
+ *
+ * Description:
+ * ------------
+ *
+ *
+ * Author:
+ * -------
+ *
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#include "custom_pam_config.h"
+ 
+const kal_char *CUSTOM_PAM_T3396_STOPS_IN_PLMNS[] = { 
+    "310004", 
+    "310005", 
+    "311012", 
+    "311480", 
+    "311481", 
+    "311482", 
+    "311483", 
+    "311484", 
+    "311485", 
+    "311486", 
+    "311487", 
+    "311488", 
+    "311489", 
+
+    /* Add before this line. */
+    END_OF_CUSTOM_PAM_T3396_STOPS_IN_PLMNS 
+} ;
+
+#define CUSTOM_PAM_23G_PDP_MIN_NUM 2 /* Contact MTK's PAM owner before modifying it. */ 
+#define CUSTOM_PAM_4G_PDP_MIN_NUM  3 /* Contact MTK's PAM owner before modifying it. */
+#define CUSTOM_PAM_DEFAULT_BACKOFF_TIMER_IN_SEC 720 /* Contact MTK's PAM owner before modifying it. TS 24.301 and TS 24.008 require 12 mins (720 secs) for the default value. */
+
+kal_uint8 custom_pam_23g_pdp_min_num(void) {
+    return CUSTOM_PAM_23G_PDP_MIN_NUM ;
+}
+
+kal_uint8 custom_pam_4g_pdp_min_num(void) {
+    return CUSTOM_PAM_4G_PDP_MIN_NUM ;    
+}
+
+kal_uint32 custom_pam_default_backoff_timer_in_sec(void) {
+    return CUSTOM_PAM_DEFAULT_BACKOFF_TIMER_IN_SEC ;    
+}
diff --git a/mcu/custom/protocol/common/ps/custom_pam_config.h b/mcu/custom/protocol/common/ps/custom_pam_config.h
new file mode 100644
index 0000000..141e5a0
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_pam_config.h
@@ -0,0 +1,94 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CUSTOM_PAM_CONFIG.H
+ *
+ * Project:
+ * --------
+ *   
+ *
+ * Description:
+ * ------------
+ *
+ *
+ * Author:
+ * -------
+ *
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef _CUSTOM_PAM_CONFIG_H
+#define _CUSTOM_PAM_CONFIG_H
+
+/** kal */
+#include "kal_general_types.h"
+
+/** enum */
+
+/** struct */
+
+/** Macros */
+#define END_OF_CUSTOM_PAM_T3396_STOPS_IN_PLMNS "FFFFFF"
+
+extern const kal_char *CUSTOM_PAM_T3396_STOPS_IN_PLMNS[] ;
+
+kal_uint8 custom_pam_23g_pdp_min_num(void) ;
+kal_uint8 custom_pam_4g_pdp_min_num(void) ;
+
+kal_uint32 custom_pam_default_backoff_timer_in_sec(void) ;
+
+#endif /* _CUSTOM_PAM_CONFIG_H */
diff --git a/mcu/custom/protocol/common/ps/custom_recovery_timer.c b/mcu/custom/protocol/common/ps/custom_recovery_timer.c
new file mode 100644
index 0000000..1bbf73e
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_recovery_timer.c
@@ -0,0 +1,150 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_recovery_timer.c
+ *
+ * Project:
+ * --------
+ *   MONZA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the recovery timer configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "custom_recovery_timer.h"
+
+/*************************************************************************
+* Time unit definition. Please do not change !!
+*************************************************************************/
+#define RECOVERY_TICKS_20_SEC    (KAL_TICKS_5_SEC+KAL_TICKS_5_SEC+KAL_TICKS_5_SEC+KAL_TICKS_5_SEC)
+#define RECOVERY_TICKS_30_SEC    (KAL_TICKS_30_SEC)
+#define RECOVERY_TICKS_1_MIN     (KAL_TICKS_1_MIN)
+#define RECOVERY_TICKS_2_MIN     (KAL_TICKS_1_MIN + KAL_TICKS_1_MIN)
+
+
+/*************************************************************************
+* Recovery timer interval
+*************************************************************************/
+
+const kal_uint32 RECOVERY_TIMER_INTERVAL[MAX_RECOVERY_TIMER_NUM] =
+{
+  RECOVERY_TICKS_20_SEC, RECOVERY_TICKS_20_SEC, RECOVERY_TICKS_20_SEC,
+  RECOVERY_TICKS_20_SEC, RECOVERY_TICKS_20_SEC, RECOVERY_TICKS_20_SEC,
+  RECOVERY_TICKS_30_SEC, RECOVERY_TICKS_30_SEC, RECOVERY_TICKS_30_SEC,
+  RECOVERY_TICKS_30_SEC, RECOVERY_TICKS_30_SEC, RECOVERY_TICKS_30_SEC,
+  RECOVERY_TICKS_1_MIN,  RECOVERY_TICKS_1_MIN,  RECOVERY_TICKS_1_MIN, 
+  RECOVERY_TICKS_1_MIN,  RECOVERY_TICKS_1_MIN,  RECOVERY_TICKS_1_MIN,
+  RECOVERY_TICKS_2_MIN,  RECOVERY_TICKS_2_MIN,  RECOVERY_TICKS_2_MIN,
+  RECOVERY_TICKS_2_MIN,  RECOVERY_TICKS_2_MIN
+ };
+
+
+/*****************************************************************************
+* FUNCTION
+*  mm_get_max_recovery_timer_num
+* DESCRIPTION
+*   This function is used to get the maximum recovery timer number
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint8 mm_get_max_recovery_timer_num(void)
+{
+   return (MAX_RECOVERY_TIMER_NUM);
+}  
+
+
diff --git a/mcu/custom/protocol/common/ps/custom_recovery_timer.h b/mcu/custom/protocol/common/ps/custom_recovery_timer.h
new file mode 100644
index 0000000..9d08234
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_recovery_timer.h
@@ -0,0 +1,121 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * custom_recovery_timer.h
+ *
+ * Project:
+ * --------
+ *   Monza
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the recovery timer configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef _CUSTOM_RECOVERY_TIMER_H
+#define _CUSTOM_RECOVERY_TIMER_H
+
+#include "kal_general_types.h"
+
+/*************************************************************************
+* Constant
+*************************************************************************/
+extern const kal_uint32 RECOVERY_TIMER_INTERVAL[];
+#define MAX_RECOVERY_TIMER_NUM  23 /* Should in range 1 ~ 256 */
+
+
+/*************************************************************************
+* Function
+*************************************************************************/
+extern kal_uint8 mm_get_max_recovery_timer_num(void);
+
+#endif /* _CUSTOM_RECOVERY_TIMER_H */
+
diff --git a/mcu/custom/protocol/common/ps/custom_rrce_config.c b/mcu/custom/protocol/common/ps/custom_rrce_config.c
new file mode 100644
index 0000000..da7a4e2
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_rrce_config.c
@@ -0,0 +1,403 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*
+**   Includes
+*/
+#include "kal_general_types.h"
+
+#include "custom_rrce_config.h"
+/*
+**   Macros
+*/
+
+/* For custom to determine support UPA or not */
+/* KAL_TRUE: support UPA */
+/* KAL_FALSE: not support UPA */
+#define RRCE_IS_SUPPORT_HSUPA KAL_TRUE
+
+const custom_plmn_list CUSTOM_PLMN_BLACK_LIST[] = 
+{
+/* New MCCMNC can be added by customer in this as below. But make sure that it is either 5 digit or 6 digit and should not have*/
+    {46001}
+};
+
+const custom_plmn_list CUSTOM_PLMN_FD_WHEN_CS_CALL_WHITE_LIST[] =
+{
+/* New MCCMNC can be added by customer in this as below. But make sure that it is either 5 digit or 6 digit and should not have*/
+     {45005} // SKT
+};
+
+const kal_uint32 CUSTOM_PLMN_BLACK_LIST_NUM = sizeof(CUSTOM_PLMN_BLACK_LIST)/sizeof(custom_plmn_list);
+
+const kal_uint32 CUSTOM_PLMN_FD_WHEN_CS_CALL_WHITE_LIST_NUM = sizeof(CUSTOM_PLMN_FD_WHEN_CS_CALL_WHITE_LIST)/sizeof(custom_plmn_list);
+
+const kal_uint16 custom_conn_temp_fail_bar_time = 300; // Default value. Customer can change as per requirement.
+
+const kal_int16 custom_rach_fail_bar_EcNo = 0; // Cell will be barred after V300>N300 RACH fail based on EcNo when custom_rach_fail_bar_EcNo != 0. The recommended value of custom_rach_fail_bar_EcNo is -15
+
+const kal_uint16 custom_tgps_tmr_time = 5; //10sec
+
+const kal_uint16 custom_tgps_tmr_const_mult = 2; 
+
+const kal_uint16 custom_tgps_tmr_max_time = 60; //60sec
+
+const custom_cat7_plmn_list CUSTOM_CAT7_3G_BLACK_LIST[] = 
+{
+/* New MCC can be added by customer in this as below
+    {250}, // RUSSIA MCC
+    {000},
+    {111}
+*/
+   {0xFFFFFFFF}
+};
+
+const kal_uint32 CUSTOM_CAT7_3G_BLACK_LIST_NUM = sizeof(CUSTOM_CAT7_3G_BLACK_LIST)/sizeof(custom_cat7_plmn_list);
+
+const custom_plmn_list CUSTOM_PLMN_FOR_RELEASE_INDICATOR[] = 
+{
+	 /* New MCCMNC can be added by customer in this as below. But make sure that it is either 5 digit or 6 digit */
+	 {310950},
+	 {312670},
+	 {313100},
+	 {310260}
+};
+
+const kal_uint32 CUSTOM_PLMN_FOR_RELEASE_INDICATOR_NUM = sizeof(CUSTOM_PLMN_FOR_RELEASE_INDICATOR)/sizeof(custom_plmn_list);
+
+const custom_rlf_plmn_list CUSTOM_RLF_WHITE_LIST[] = 
+{
+/* New MCC can be added by customer in this as below. Please make sure that it is either 5 digit or 6 digit and should not have hex values like 46001f
+     PLMN   T313_threshold
+    {40405,    3},
+    {40486,    3},
+*/
+   {46001,      3},
+   {0xFFFFFFFF, 0xFF}
+};
+
+const kal_uint32 CUSTOM_RLF_WHITE_LIST_NUM = sizeof(CUSTOM_RLF_WHITE_LIST)/sizeof(custom_rlf_plmn_list);
+const kal_uint16 custom_CC_no_detect_uarfcn_bar_time = 300; // Default value. Customer can change as per requirement.
+
+const kal_uint16 custom_CC_no_detect_Bar_Threshold = 3; // Default value. Customer can change as per requirement.
+
+const custom_plmn_list CUSTOM_DRX_CYCLE_LENGTH_CHANGE_FOR_PLMN_LIST[] = 
+{
+/* New MCCMNC can be added by customer in this as below. But make sure that it is either 5 digit or 6 digit (decimal)
+    {40402},   // for 5 digit
+    {404037},  // for 6 digit
+*/
+    {46001}
+};
+
+const kal_uint32 CUSTOM_DRX_CYCLE_LENGTH_CHANGE_FOR_PLMN_LIST_NUM = sizeof(CUSTOM_DRX_CYCLE_LENGTH_CHANGE_FOR_PLMN_LIST)/sizeof(custom_plmn_list);
+
+/*****************************************************************************
+* FUNCTION
+*  rrce_is_support_HSUPA
+* DESCRIPTION
+*
+*  this function allow custom to determine support UPA or not
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool rrce_is_support_HSUPA (void)
+{
+   return (RRCE_IS_SUPPORT_HSUPA);
+}
+
+
+kal_bool rrce_is_support_opt1(void)
+{
+
+#ifdef __TC7_CS_OPT1__   
+return KAL_TRUE;
+#else
+return KAL_FALSE;
+#endif
+
+}
+
+
+
+kal_bool rrce_is_support_opt2(void)
+{
+
+
+#ifdef __TC7_CS_OPT2__   
+return KAL_TRUE;
+#else
+return KAL_FALSE;
+#endif
+
+
+
+}
+
+extern kal_bool is_plmn_blacklisted_in_custom_config(void* plmn_id)
+{
+    kal_uint32 mccmnc;
+    kal_uint32 i;
+    CUSTOM_RRC_PLMN_Identity* rrc_plmn = (CUSTOM_RRC_PLMN_Identity*)plmn_id;
+
+    mccmnc = rrc_plmn->mcc.element[0];                        // mcc1
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mcc.element[1]);      // mcc2
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mcc.element[2]);        // mcc3
+
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[0]);      // mnc1
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[1]);        // mnc2
+    if (rrc_plmn->mnc.numElements == 3)
+    {
+       mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[2]);  // mnc3
+    }
+        
+    for(i = 0; i < CUSTOM_PLMN_BLACK_LIST_NUM; i++)
+    {    
+        if(CUSTOM_PLMN_BLACK_LIST[i].mccMnc == 0xFFFFFF)    
+        {
+           return KAL_TRUE;
+        }
+        else if(CUSTOM_PLMN_BLACK_LIST[i].mccMnc == mccmnc)
+        {    // Found in the table
+            return KAL_TRUE;
+        }
+    }
+
+    return KAL_FALSE;
+ 
+}
+
+extern  kal_uint16 custom_config_barcell_time(void)
+{
+
+   return custom_conn_temp_fail_bar_time;
+   
+}
+
+extern  kal_int16 custom_config_barcell_EcNo(void)
+{
+
+   return custom_rach_fail_bar_EcNo;
+   
+}
+
+
+extern  kal_uint16 custom_tgps_tmr(void)
+{
+
+   return custom_tgps_tmr_time;
+   
+}
+extern  kal_uint16 custom_config_tgps_tmr(kal_uint16 tmr)
+{
+
+   if(tmr != custom_tgps_tmr_time)
+   {
+     if(tmr > custom_tgps_tmr_max_time)
+     {
+	    tmr = custom_tgps_tmr_max_time;
+     }
+     else
+     {
+	    tmr = custom_tgps_tmr_time * custom_tgps_tmr_const_mult;
+     }
+   }
+   return tmr;
+   
+}
+
+
+
+extern kal_bool custom_config_3g_cat7_black_list(void* plmn_id)
+{
+    kal_uint32 mccmnc;
+    kal_uint32 i;
+    RRC_PLMN_Identity1* rrc_plmn = (RRC_PLMN_Identity1*)plmn_id;
+
+    mccmnc = rrc_plmn->mcc.element[0];                        // mcc1
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mcc.element[1]);      // mcc2
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mcc.element[2]);        // mcc3
+
+        
+    for(i = 0; i < CUSTOM_CAT7_3G_BLACK_LIST_NUM; i++)
+    {        
+        if(CUSTOM_CAT7_3G_BLACK_LIST[i].mccMnc == mccmnc)
+        {    // Found in the table
+            return KAL_TRUE;
+        }
+    }
+
+    return KAL_FALSE;
+ 
+}
+extern kal_bool is_plmn_available_for_drx_cycle_change_in_custom_config(void* plmn_id)
+{
+    kal_uint32 mccmnc;
+    kal_uint32 i;
+    CUSTOM_RRC_PLMN_Identity* rrc_plmn = (CUSTOM_RRC_PLMN_Identity*)plmn_id;
+
+    mccmnc = rrc_plmn->mcc.element[0];                        // mcc1
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mcc.element[1]);      // mcc2
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mcc.element[2]);        // mcc3
+
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[0]);      // mnc1
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[1]);        // mnc2
+    if (rrc_plmn->mnc.numElements == 3)
+    {
+       mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[2]);  // mnc3
+    }
+        
+    for(i = 0; i < CUSTOM_DRX_CYCLE_LENGTH_CHANGE_FOR_PLMN_LIST_NUM; i++)
+    {    
+        if(CUSTOM_DRX_CYCLE_LENGTH_CHANGE_FOR_PLMN_LIST[i].mccMnc == 0xFFFFFF)    
+        {
+           return KAL_TRUE;
+        }
+        else if(CUSTOM_DRX_CYCLE_LENGTH_CHANGE_FOR_PLMN_LIST[i].mccMnc == mccmnc)
+        {    // Found in the table
+            return KAL_TRUE;
+        }
+    }
+
+    return KAL_FALSE;
+ 
+}
+
+extern kal_bool is_plmn_available_for_rel_ind_in_custom_config(void* plmn_id)
+{
+    kal_uint32 mccmnc;
+    kal_uint32 i;
+    CUSTOM_RRC_PLMN_Identity* rrc_plmn = (CUSTOM_RRC_PLMN_Identity*)plmn_id;
+
+    mccmnc = rrc_plmn->mcc.element[0];                        // mcc1
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mcc.element[1]);      // mcc2
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mcc.element[2]);        // mcc3
+
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[0]);      // mnc1
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[1]);        // mnc2
+    if (rrc_plmn->mnc.numElements == 3)
+    {
+       mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[2]);  // mnc3
+    }
+        
+    for(i = 0; i < CUSTOM_PLMN_FOR_RELEASE_INDICATOR_NUM; i++)
+    {    
+        if(CUSTOM_PLMN_FOR_RELEASE_INDICATOR[i].mccMnc == mccmnc)
+        {    // Found in the table
+            return KAL_TRUE;
+        }
+    }
+
+    return KAL_FALSE;
+ 
+}
+
+extern kal_bool is_plmn_whitelisted_in_FD_during_cs_call_custom_list(void* plmn_id)
+{
+    kal_uint32 mccmnc;
+    kal_uint32 i;
+    CUSTOM_RRC_PLMN_Identity* rrc_plmn = (CUSTOM_RRC_PLMN_Identity*)plmn_id;
+
+    mccmnc = rrc_plmn->mcc.element[0];                        // mcc1
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mcc.element[1]);      // mcc2
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mcc.element[2]);        // mcc3
+
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[0]);      // mnc1
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[1]);        // mnc2
+
+    if (rrc_plmn->mnc.numElements == 3)
+    {
+       mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[2]);  // mnc3
+    }
+        
+    for(i = 0; i < CUSTOM_PLMN_FD_WHEN_CS_CALL_WHITE_LIST_NUM; i++)
+    {    
+        if(CUSTOM_PLMN_FD_WHEN_CS_CALL_WHITE_LIST[i].mccMnc == mccmnc)
+        {    // Found in the table
+            return KAL_TRUE;
+        }
+    }
+
+    return KAL_FALSE;
+}
+
+extern  kal_uint16 custom_config_baruarfcn_time(void)
+{
+
+   return custom_CC_no_detect_uarfcn_bar_time;
+   
+}
+
+extern  kal_uint16 custom_config_baruarfcn_threshold(void)
+{
+
+   return custom_CC_no_detect_Bar_Threshold;
+   
+}
+
+extern kal_bool isPlmnPresentInRlfCustomWhiteList(void* plmn_id, kal_uint8 *maxT313Threshold)
+{
+    kal_uint32 mccmnc;
+    kal_uint32 i;
+    CUSTOM_RRC_PLMN_Identity* rrc_plmn = (CUSTOM_RRC_PLMN_Identity*)plmn_id;
+
+    mccmnc = rrc_plmn->mcc.element[0];                        // mcc1
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mcc.element[1]);      // mcc2
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mcc.element[2]);        // mcc3
+
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[0]);      // mnc1
+    mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[1]);        // mnc2
+
+    if (rrc_plmn->mnc.numElements == 3)
+    {
+       mccmnc = (mccmnc * 10) + (rrc_plmn->mnc.element[2]);  // mnc3
+    }
+
+    for(i = 0; i < CUSTOM_RLF_WHITE_LIST_NUM; i++)
+    {        
+        if(CUSTOM_RLF_WHITE_LIST[i].mccMnc == mccmnc)
+        {    // Found in the table
+            *maxT313Threshold = CUSTOM_RLF_WHITE_LIST[i].maxT313Threshold;
+            return KAL_TRUE;
+        }
+    }
+
+    return KAL_FALSE; 
+}
+
diff --git a/mcu/custom/protocol/common/ps/custom_rrce_config.h b/mcu/custom/protocol/common/ps/custom_rrce_config.h
new file mode 100644
index 0000000..a59b865
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_rrce_config.h
@@ -0,0 +1,204 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_mm_config.h
+ *
+ * Project:
+ * --------
+ *   MONZA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the MM configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifndef _CUSTOM_RRCE_CONFIG_H
+#define _CUSTOM_RRCE_CONFIG_H
+
+#include "kal_general_types.h"
+
+#include "ps_public_utility.h"
+
+typedef kal_uint8 RRC_Digit1;
+
+
+typedef struct RRC_MCC1
+{
+   kal_uint8 numElements;
+
+   RRC_Digit1 element[3];
+}
+RRC_MCC1;
+
+/* SEQUENCE OF MNC */
+typedef struct RRC_MNC1
+{
+   kal_uint8 numElements;
+
+   RRC_Digit1 element[3];
+}
+RRC_MNC1;
+
+
+/* SEQUENCE PLMN-Identity */
+typedef struct CUSTOM_RRC_PLMN_Identity
+{
+   RRC_MCC1 mcc; /* MANDATORY */
+   RRC_MNC1 mnc; /* MANDATORY */
+}
+CUSTOM_RRC_PLMN_Identity;
+
+
+typedef struct
+{
+    /* PLMN identity */
+    kal_uint32 mccMnc;
+} custom_plmn_list;
+
+typedef struct RRC_PLMN_Identity1
+{
+   RRC_MCC1 mcc; /* MANDATORY */
+   RRC_MNC1 mnc; /* MANDATORY */
+}
+RRC_PLMN_Identity1;
+
+
+typedef struct
+{
+    /* PLMN identity */
+    kal_uint32 mccMnc;
+} custom_cat7_plmn_list;
+
+typedef struct {    
+    kal_uint32 mccMnc;
+    kal_uint8  maxT313Threshold;
+} custom_rlf_plmn_list;
+
+/*************************************************************************
+* Function
+*************************************************************************/
+
+extern kal_bool rrce_is_support_HSUPA(void);
+
+extern kal_bool is_plmn_blacklisted_in_custom_config(void* plmn_id);
+
+extern  kal_uint16 custom_config_barcell_time(void);
+
+extern  kal_int16 custom_config_barcell_EcNo(void);
+
+extern kal_bool is_plmn_available_for_rel_ind_in_custom_config(void* plmn_id);
+
+extern kal_bool is_plmn_whitelisted_in_FD_during_cs_call_custom_list(void* plmn_id);
+
+extern  kal_uint16 custom_config_baruarfcn_time(void);
+
+extern  kal_uint16 custom_config_baruarfcn_threshold(void);
+
+extern kal_bool custom_config_3g_cat7_black_list(void* plmn_id);
+
+extern kal_bool isPlmnPresentInRlfCustomWhiteList(void* plmn_id, kal_uint8 *maxT313Threshold);
+
+extern kal_bool is_plmn_available_for_drx_cycle_change_in_custom_config(void* plmn_id);
+
+extern  kal_uint16 custom_config_tgps_tmr(kal_uint16 tmr);
+extern  kal_uint16 custom_tgps_tmr(void);
+
+#endif /* _CUSTOM_RRCE_CONFIG_H */
+
diff --git a/mcu/custom/protocol/common/ps/custom_sdm_utility.c b/mcu/custom/protocol/common/ps/custom_sdm_utility.c
new file mode 100644
index 0000000..6e1f0b4
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_sdm_utility.c
@@ -0,0 +1,910 @@
+/*****************************************************************************
+*  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) 2015
+*
+*  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:
+ * ---------
+ * custom_sdm_utility.c
+ *
+ * Project:
+ * --------
+ * MOLY
+ *
+ * Description:
+ * ------------
+ * This file is for sms domain management customization functions, 
+ * customer can use these functions to configure parameters for SMS
+ * domain selection. 
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+/*
+**   Includes
+*/
+#include <string.h>
+
+#include "kal_general_types.h"
+#include "custom_sdm_utility.h"
+#include "kal_trace.h"
+
+
+static const sdm_customized_plmn_table_entry sdm_cust_prefer_sms_over_sgs_to_ims_tbl[] =
+{
+    /* Telefonica Germany */
+    {"262", "03", 1}, {"262", "07", 1}, {"262", "08", 1}, {"262", "11", 1}, {"262", "77", 1},
+
+    /* Telefonica UK */
+    {"234", "10", 1},
+    
+    /* Telefonica Spain */
+    {"214", "05", 1}, {"214", "07", 1},
+
+    /* VDF Spain */
+    {"214", "01", 1},
+
+    /* VDF Portugal */
+    {"268", "01", 1},
+
+    /* VDF Ireland */
+    {"272", "01", 1},
+
+    /* VDF Hungary */
+    {"216", "70", 1},
+
+    /* MegaFon Russia */
+    {"250", "02", 1}, {"250", "11", 1},
+
+    /* Movistar Argentina */
+    {"722", "07", 1},
+
+    /* ViVo Brazil */
+    {"724", "06", 1}, {"724", "10", 1}, {"724", "11", 1}, {"724", "23", 1},
+
+    /* TIM Italy */
+    {"222", "01", 1},
+
+    /* TIM Brazil */
+    {"724", "02", 1}, {"724", "03", 1}, {"724", "04", 1},
+
+    /* Orange Spain */
+    {"214", "03", 1}, {"214", "09", 1}, {"214", "11", 1}, {"214", "19", 1}, {"214", "21", 1},
+
+    /* Orange Romania */
+    {"226", "10", 1},
+
+    /* Orange Belgium */
+    {"206", "10", 1},
+
+    /* Orange Luxembourg */
+    {"270", "99", 1},
+
+    /* Etisalat United Arab Emirates */
+    {"424", "02", 1},
+
+    /* STC Saudi Arabia */
+    {"420", "01", 1},
+
+    /* Digi Mobil Romania */
+    {"226", "05", 1},
+
+    /* Bouygues France */
+    {"208", "20", 1},
+
+    /* Telia Lithuania  */
+    {"246", "01", 1},
+
+    /* T-Star */
+    {"466", "89", 1}, {"466", "90", 1},
+
+    /* TMOEU Macedonia */
+    {"294", "01", 1},
+
+    /* Telenor Bulgaria */
+    {"284", "05", 1},
+
+    /* Telenor Hungary */
+    {"216", "01", 1},
+
+    /* Vivacom Bulgaria */
+    {"284", "03", 1},
+
+    /* Movistar Colombia */
+    {"732", "123", 1},
+
+    /* Movistar Ecuador */
+    {"740", "00", 1},
+
+    /* TDC Denmark */
+    //{"238", "01", 1}, {"238", "10", 1},
+
+    /* VDF New Zealand */
+    {"530", "01", 1},
+
+
+    /* Zain/Kuwait */
+    {"419", "02", 1},
+    
+    /* Zain/Bahrain */
+    {"426", "02", 1},
+
+    /* C&W Panama */
+    {"714", "01", 1},
+
+    /* Entel Chile */
+    {"730", "01", 1},
+
+    /* Claro Chile */
+    {"730", "03", 1},
+
+    /* Vodafone Egypt */
+    {"602", "02", 1},
+
+    /* Claro Argentina */
+    {"722", "310", 1}, {"722", "320", 1}, {"722", "330", 1},   
+
+    /* A1 Slovenia */
+    {"293", "40", 1},
+
+    /* A1 Bulgaria */
+    {"284", "01", 1},
+
+    /* A1 Croatia */
+    {"219", "10", 1},
+
+    /* MEO Portugal */
+    {"268", "06", 1},
+
+    /* NOS Portugal */
+    {"268", "03", 1},{"268", "93", 1},{"268", "97", 1},{"268", "98", 1},{"268", "99", 1},
+
+    /*Maxis/Malaysia*/
+    {"502", "12", 1},  {"502", "17", 1},
+
+    /*Pelephone/ Israel*/
+    {"425", "03", 1},
+
+    /*MTN/Nigeria*/
+    {"621", "30", 1},
+
+    /* MTS Serbia */
+    {"220", "03", 1},
+
+    /* Default */
+
+};
+
+static const sdm_customized_plmn_table_entry sdm_cust_sms_over_wifi_allowed_tbl[] =
+{
+
+    /* VDF Ireland */
+    {"272", "01", 0},
+
+    /* VDF Hungary */
+    {"216", "70", 0},
+    
+    /* Telefonica Germany */
+    {"262", "03", 0}, {"262", "07", 0}, {"262", "08", 0}, {"262", "11", 0}, {"262", "77", 0},
+
+    /* Telefonica UK */    
+    {"234", "10", 0},
+    
+    /* Telefonica Spain */
+    {"214", "05", 0}, {"214", "07", 0},
+
+    /* MegaFon Russia */
+    {"250", "02", 0}, {"250", "11", 0},
+
+    /* TIM Italy */
+    {"222", "01", 0},
+
+    /* TIM Brazil */
+    {"724", "02", 0}, {"724", "03", 0}, {"724", "04", 0},
+    
+    /* Orange Spain */
+    {"214", "03", 0}, {"214", "09", 0}, {"214", "11", 0}, {"214", "19", 0}, {"214", "21", 0},
+
+    /* Orange Romania */
+    {"226", "10", 0},
+
+    /* Orange Belgium */
+    {"206", "10", 0},
+
+    /* Orange Luxembourg */
+    {"270", "99", 0},
+
+	/* Orange Morocco*/
+    {"604", "00", 0},
+    
+    /* Etisalat United Arab Emirates */
+    {"424", "02", 0},
+
+    /* STC Saudi Arabia */
+    {"420", "01", 0},    
+    
+    /* Digi Mobil Romania */
+    {"226", "05", 0},
+
+    /* Telenor Bulgaria */
+    {"284", "05", 0},        
+
+    /* Telenor Hungary */
+    {"216", "01", 0},
+
+    /* Vivacom Bulgaria */
+    {"284", "03", 0},        
+
+    /* Movistar Argentina */
+    {"722", "07", 0},        
+
+    /* Movistar Colombia */
+    {"732", "123", 0},        
+    
+    /* TDC Denmark */
+    //{"238", "01", 0}, {"238", "10", 0},
+
+    /* Claro Argentina */
+    {"722", "310", 0}, {"722", "320", 0}, {"722", "330", 0},
+
+    /* SKT Korea*/
+    {"450", "05", 0},
+
+    /* Claro Uruguay*/
+    {"748", "10", 0}, {"748", "010", 0},
+
+    /* Wind Italy*/
+    {"222", "88", 0}, {"222", "99", 0},
+
+    /* TMOEU Albania*/
+    {"276", "01", 0},
+
+    /* TMOEU Macedonia*/
+    {"294", "01", 0},
+
+    /* Wind Greece*/
+    {"202", "09", 0}, {"202", "10", 0},
+
+    /* A1 Slovenia */
+    {"293", "40", 0},
+
+    /* A1 Bulgaria */
+    {"284", "01", 0},
+
+    /* A1 Croatia */
+    {"219", "10", 0},
+
+    /* Telenet Belgium */
+    {"206", "05", 0},
+
+    /* Free France*/
+    {"208", "15", 0}, {"208", "16", 0}, {"208", "35", 0},
+
+	/*Maxis/Malaysia*/
+    {"502", "12", 0},  {"502", "17", 0},
+
+	/* Zain/Bahrain */
+    {"426", "02", 0},
+
+	/* Bateclo/Bahrain */
+    {"426", "01", 0},
+
+	/*Pelephone/ Israel*/
+    {"425", "03", 0},
+
+	/*MTN/Nigeria*/
+    {"621", "30", 0},
+
+	/*MPT/Myanmar*/
+    {"414", "01", 0},
+
+    /* Eir Ireland */
+    {"272", "03", 0}, {"272", "07", 0}, {"272", "08", 0},
+
+    /*Partner/Israel*/
+    {"425", "01", 0}, {"425", "10", 0},
+
+    /* Default */
+
+};
+
+static const sdm_customized_plmn_table_entry sdm_cust_retry_domain_preference_tbl[] =
+{
+
+    /* RJIL */
+    {"405", "840", SDM_RETRY_IMS_ONLY}, {"405", "854", SDM_RETRY_IMS_ONLY}, {"405", "855", SDM_RETRY_IMS_ONLY}, {"405", "856", SDM_RETRY_IMS_ONLY}, {"405", "857", SDM_RETRY_IMS_ONLY},
+    {"405", "858", SDM_RETRY_IMS_ONLY}, {"405", "859", SDM_RETRY_IMS_ONLY}, {"405", "860", SDM_RETRY_IMS_ONLY}, {"405", "861", SDM_RETRY_IMS_ONLY}, {"405", "862", SDM_RETRY_IMS_ONLY},
+    {"405", "863", SDM_RETRY_IMS_ONLY}, {"405", "864", SDM_RETRY_IMS_ONLY}, {"405", "865", SDM_RETRY_IMS_ONLY}, {"405", "866", SDM_RETRY_IMS_ONLY}, {"405", "867", SDM_RETRY_IMS_ONLY},
+    {"405", "868", SDM_RETRY_IMS_ONLY}, {"405", "869", SDM_RETRY_IMS_ONLY}, {"405", "870", SDM_RETRY_IMS_ONLY}, {"405", "871", SDM_RETRY_IMS_ONLY}, {"405", "872", SDM_RETRY_IMS_ONLY},
+    {"405", "873", SDM_RETRY_IMS_ONLY}, {"405", "874", SDM_RETRY_IMS_ONLY}, 
+
+    /* AT&T/Mexico */
+    {"334", "050", SDM_RETRY_CS_ONLY},
+};
+
+static const sdm_customized_plmn_table_entry sdm_cust_sms_over_cs_when_2g_call_on_going_tbl[] =
+{
+    /* Telia SE */
+    {"240", "01", 1},
+    
+    /* Telia FI */
+    {"244", "91", 1}, {"244", "36", 1},
+  
+};
+
+static const sdm_customized_plmn_table_entry sdm_cust_sms_over_wifi_preference_tbl[] =
+{
+
+    /* Claro Argentina */
+    {"722", "310", WFC_PROFILE_CELLULAR_PREFERRED}, {"722", "320", WFC_PROFILE_CELLULAR_PREFERRED}, {"722", "330", WFC_PROFILE_CELLULAR_PREFERRED},
+   
+};
+
+static const sdm_customized_plmn_table_entry sdm_cust_sms_over_ip_allowed_tbl[] =
+{
+
+    /* Movistar Argentina*/
+    {"722", "07", 0},
+
+    /* Movistar Peru */
+    {"716", "06", 0}, {"716", "006", 0},
+
+    /* Movistar columbia */
+    {"732", "123", 0},
+
+    /* Vivo Brazil */
+    {"724", "06", 0}, {"724", "10", 0}, {"724", "11", 0}, {"724", "23", 0},
+
+    /* Vivo Brazil */
+    {"334", "030", 0}, {"334", "03", 0},
+
+    /* Chile */
+    {"730", "02", 0}, 
+
+    /* Movistar Ecuador */
+    {"740", "00", 0}, 
+
+    /* Movistar Uruguay */
+    {"748", "07", 0},     
+
+    /* Movistar Venezuela */
+    {"734", "04", 0},
+
+    /* Movistar Columbia */
+    {"732", "123", 0},
+
+    /* Orange French Guiana*/
+    {"340", "01", 0}, 
+
+    /* Orange Spain*/
+    {"214", "03", 0}, {"214", "09", 0}, {"214", "11", 0}, 
+
+    /* Orange Egypt*/
+    {"602", "01", 0}, 
+
+    /* Orange Romania*/
+    {"226", "10", 0}, 
+
+    /* Orange Belgium*/
+    {"206", "10", 0},  
+
+    
+	/* Orange Morocco*/
+	{"604", "00", 0},
+
+    /* Orange Moldova */
+    {"259", "01", 0},
+   
+    /* M1 Singapore*/
+    {"525", "03", 0},
+
+    /* Starhub Singapore*/
+    {"525", "05", 0},
+    
+    /* Mytel Myanmar*/
+    {"414", "09", 0},
+
+    /* SKT Korea*/
+    {"450", "05", 0},
+
+    /* Claro Uruguay*/
+    {"748", "10", 0}, {"748", "010", 0},
+
+    /* Wind Italy*/
+    {"222", "88", 0}, {"222", "99", 0},
+
+    /* TMOEU Albania*/
+    {"276", "01", 0},
+
+    /* TMOEU Romania */
+    {"226", "03", 0}, {"226", "06", 0},
+
+    /* Wind Greece*/
+    {"202", "09", 0}, {"202", "10", 0},
+
+    /* Spark/NewZealand */
+    {"530", "05", 0}, {"530", "99", 0}, {"530", "099", 0},
+
+    /* Vietnamobile/Vietnam */
+    {"452", "05", 0},
+    
+    /* Claro Gautemala*/
+    {"704", "01", 0},
+    
+    /* VIP Serbia*/
+    {"220", "05", 0},
+
+    /* Telenor Montenegro */
+    {"297", "01", 0},
+
+    /* Free France*/
+    {"208", "15", 0}, {"208", "16", 0}, {"208", "35", 0},
+
+    /*Telkomsel/Indonesia */
+    {"510", "010", 0}, {"510", "10", 0},
+
+    /* Eir Ireland */
+    {"272", "03", 0}, {"272", "07", 0}, {"272", "08", 0},
+
+    /*Maxis/Malaysia*/
+    {"502", "12", 0},  {"502", "17", 0},
+
+    /* Zain/Bahrain */
+    {"426", "02", 0},
+
+    /* Bateclo/Bahrain */
+    {"426", "01", 0},
+
+    /*Pelephone/ Israel*/
+    {"425", "03", 0},
+
+    /*MTN/Nigeria*/
+    {"621", "30", 0},
+
+    /* LMT Latvia*/
+    {"247", "01", 0}, {"247", "10", 0},
+
+    /* Lycamobile/Italy */
+    {"222", "35", 0},
+
+    /* VDF Albania */
+    {"276", "02", 0},
+
+    /*Partner/Israel*/
+    {"425", "01", 0}, {"425", "10", 0},
+    
+    /* Claro Nicaragua*/
+    {"710", "21", 0},
+
+    /* Coriolis/France */
+    {"208", "27", 0},
+
+    /* Moldcell/Moldova */
+    {"259", "02", 0},
+
+    /* Monaco Telecom/France */
+    {"212", "01", 0}, {"212", "10", 0},
+
+    /* Plintron/Italy */
+    {"222", "54", 0},
+
+    /*Spusu/Austria*/
+    {"232", "17", 0},
+
+    /* Gibtelecom/Gibraltar */
+    {"266", "01", 0},
+
+    /* VDF/CyTa Cyprus */
+    {"280", "01", 0},
+};
+
+static const sdm_customized_plmn_table_entry sdm_cust_sms_over_cs_when_roaming_tbl[] =
+{
+    /* Orange France */
+    {"208", "01", 0}, {"208", "02", 0},
+
+    /* Orange Slovakia */
+    {"231", "01", 0}, {"231", "05", 0},
+    
+    /* Orange Poland */
+    {"260", "03", 0},
+    
+};
+
+/*****************************************************************************
+* FUNCTION
+*   sdm_get_customized_plmn_table
+* DESCRIPTION
+*   This function is used to return the correct table
+*
+* PARAMETERS
+* [IN]:  tbl_type, tbl_ptr, tbl_size
+* [OUT]: tbl_ptr, tbl_size
+*
+* RETURNS
+*   kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool sdm_get_customized_plmn_table(sdm_customized_plmn_table_category tbl_type, sdm_customized_plmn_table_entry **tbl_ptr, kal_uint32 *tbl_size)
+{
+    switch(tbl_type)
+    {
+        case SDM_CUST_SMS_OVER_SGS_PREFERRED:
+            *tbl_ptr = (sdm_customized_plmn_table_entry *)sdm_cust_prefer_sms_over_sgs_to_ims_tbl;
+            *tbl_size = sizeof(sdm_cust_prefer_sms_over_sgs_to_ims_tbl)/sizeof(sdm_customized_plmn_table_entry);         
+            break;
+
+        case SDM_CUST_SMS_OVER_WIFI_ENABLE:
+            *tbl_ptr = (sdm_customized_plmn_table_entry *)sdm_cust_sms_over_wifi_allowed_tbl;
+            *tbl_size = sizeof(sdm_cust_sms_over_wifi_allowed_tbl)/sizeof(sdm_customized_plmn_table_entry);         
+            break;
+
+        case SDM_CUST_SMS_OVER_CS_WHEN_2G_CALL_ONGOING:
+            *tbl_ptr = (sdm_customized_plmn_table_entry *)sdm_cust_sms_over_cs_when_2g_call_on_going_tbl;
+            *tbl_size = sizeof(sdm_cust_sms_over_cs_when_2g_call_on_going_tbl)/sizeof(sdm_customized_plmn_table_entry);                
+            break;
+
+        case SDM_CUST_SMS_OVER_WIFI_PREFERENCE:
+            *tbl_ptr = (sdm_customized_plmn_table_entry *)sdm_cust_sms_over_wifi_preference_tbl;
+            *tbl_size = sizeof(sdm_cust_sms_over_wifi_preference_tbl)/sizeof(sdm_customized_plmn_table_entry);                       
+            break;
+
+        case SDM_CUST_SMS_OVER_IP_ALLOWED:
+            *tbl_ptr = (sdm_customized_plmn_table_entry *)sdm_cust_sms_over_ip_allowed_tbl;
+            *tbl_size = sizeof(sdm_cust_sms_over_ip_allowed_tbl)/sizeof(sdm_customized_plmn_table_entry);                               
+            break;
+
+        case SDM_CUST_SMS_RETRY_DOMAIN_PREFERENCE:
+            *tbl_ptr = (sdm_customized_plmn_table_entry *)sdm_cust_retry_domain_preference_tbl;
+            *tbl_size = sizeof(sdm_cust_retry_domain_preference_tbl)/sizeof(sdm_customized_plmn_table_entry);            
+            break;
+
+        case SDM_CUST_SMS_OVER_CS_WHEN_ROAMING:
+            *tbl_ptr = (sdm_customized_plmn_table_entry *)sdm_cust_sms_over_cs_when_roaming_tbl;
+            *tbl_size = sizeof(sdm_cust_sms_over_cs_when_roaming_tbl)/sizeof(sdm_customized_plmn_table_entry);
+            break;
+
+        default:
+            //invalid  category
+            return KAL_FALSE;
+            break;
+            
+    }
+
+    return KAL_TRUE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   sdm_search_customer_setting
+* DESCRIPTION
+*   This function is used to search customer setting
+*
+* PARAMETERS
+* [IN]:  tbl, mcc, mnc
+* [OUT]: setting
+*
+* RETURNS
+*   kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool sdm_find_customized_setting(const sdm_customized_plmn_table_entry *tbl, kal_uint32 tbl_entry_num, char *mcc, char *mnc, kal_uint8 *setting)
+{
+    //find table size
+    kal_uint32 index = 0;
+
+    //kal_prompt_trace(MOD_SDM, "sdm_find_customized_setting(), tbl_entry_num = %d, mcc=%s, mnc=%s", tbl_entry_num, mcc, mnc);
+
+    //search mcc/mnc
+    for(index = 0; index <tbl_entry_num; index++)
+    {
+        if((0 == strcmp((char *)(tbl[index].mcc), (char *)mcc)) && (0 == strcmp((char *)(tbl[index].mnc), (char *)mnc)))
+        {
+            //fill in setting if found matched mcc/mnc
+            *setting = tbl[index].setting;
+            //kal_prompt_trace(MOD_SDM, "sdm_find_customized_setting(), setting = %d", *setting);            
+            return KAL_TRUE;
+
+        }
+    }
+	
+
+    return KAL_FALSE;
+
+}
+
+/*****************************************************************************
+* FUNCTION
+*   sms_over_sgs_preferred_in_lte
+* DESCRIPTION
+*   This function is used to define SMS over SGs preference to SMS over IP
+*   for 4G MO SMS domain selection in specific networks (MCC & MNC)
+*
+* PARAMETERS
+*
+* RETURNS
+*   kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_bool sms_over_sgs_preferred_in_lte(char *mcc, char *mnc)
+{
+
+    kal_uint8 setting = 0;
+    kal_uint32 tbl_entry_num = sizeof(sdm_cust_prefer_sms_over_sgs_to_ims_tbl)/sizeof(sdm_customized_plmn_table_entry);
+
+    //kal_prompt_trace(MOD_SDM, "sms_over_sgs_preferred_in_lte(), mcc=%s, mnc=%s", mcc, mnc);
+
+    if(KAL_TRUE == sdm_find_customized_setting(sdm_cust_prefer_sms_over_sgs_to_ims_tbl, tbl_entry_num, mcc, mnc, &setting))
+    {
+        return setting;
+    }
+    else
+    {
+        /* Default */
+        return (KAL_FALSE);
+    }
+
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   sms_over_wifi_allowed
+* DESCRIPTION
+*   This function is used to define whether SMS over IP is allowed when using
+*   WiFi access for MO SMS domain selection in specific networks (MCC & MNC)
+*
+* PARAMETERS
+*
+* RETURNS
+*   kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_bool sms_over_wifi_allowed(char *mcc, char *mnc)
+{
+    /* When TRUE is returned, SMS over IP is allowed on WiFi */
+
+    kal_uint8 setting = 0;
+    kal_uint32 tbl_entry_num = sizeof(sdm_cust_sms_over_wifi_allowed_tbl)/sizeof(sdm_customized_plmn_table_entry);
+
+    //kal_prompt_trace(MOD_SDM, "sms_over_wifi_allowed(), mcc=%s, mnc=%s", mcc, mnc);
+
+    if(KAL_TRUE == sdm_find_customized_setting(sdm_cust_sms_over_wifi_allowed_tbl, tbl_entry_num, mcc, mnc, &setting))
+    {
+        return setting;
+    }
+    else
+    {
+        /* Default */
+        return (KAL_TRUE);
+    }    
+
+}
+
+/*****************************************************************************
+* FUNCTION
+*   sdm_cust_retry_domain_preference
+* DESCRIPTION
+*   This function is used to customize the retry domain preference for specific networks (MCC & MNC) 
+*
+* PARAMETERS
+*
+* RETURNS
+*   kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+sdm_retry_domain_preference_enum sdm_cust_retry_domain_preference(char *mcc, char *mnc)
+{
+
+    kal_uint8 setting = 0;
+    kal_uint32 tbl_entry_num = sizeof(sdm_cust_retry_domain_preference_tbl)/sizeof(sdm_customized_plmn_table_entry);
+
+    //kal_prompt_trace(MOD_SDM, "sdm_cust_retry_domain_preference(), mcc=%s, mnc=%s", mcc, mnc);
+
+    if(KAL_TRUE == sdm_find_customized_setting(sdm_cust_retry_domain_preference_tbl, tbl_entry_num, mcc, mnc, &setting))
+    {
+        return (sdm_retry_domain_preference_enum)setting;
+    }
+    else
+    {
+        /* Default */
+        return (SDM_RETRY_NO_PREFERENCE);
+    } 
+
+}
+
+/*****************************************************************************
+* FUNCTION
+*   sms_over_cs_in_2g_call_allowed
+* DESCRIPTION
+*   This function is used to define whether SMS should be sent over CS when 2G
+*   call is ongoing.
+*
+* PARAMETERS
+*
+* RETURNS
+*   kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_bool sms_over_cs_when_2g_call_ongoing(char *mcc, char *mnc)
+{
+    /* When TRUE is returned, SMS over CS is atttempted
+     * when call is ongoing 2G */
+
+    kal_uint8 setting = 0;
+    kal_uint32 tbl_entry_num = sizeof(sdm_cust_sms_over_cs_when_2g_call_on_going_tbl)/sizeof(sdm_customized_plmn_table_entry);
+
+    //kal_prompt_trace(MOD_SDM, "sms_over_cs_when_2g_call_ongoing(), mcc=%s, mnc=%s", mcc, mnc);
+
+    if(KAL_TRUE == sdm_find_customized_setting(sdm_cust_sms_over_cs_when_2g_call_on_going_tbl, tbl_entry_num, mcc, mnc, &setting))
+    {
+        return setting;
+    }
+    else
+    {
+        /* Default */
+        return KAL_FALSE;
+    } 
+
+}
+
+/*****************************************************************************
+* FUNCTION
+*   sdm_cust_sms_over_wifi_preference
+* DESCRIPTION
+*   This function is used to customize the WiFI Preference for
+*   MO SMS domain selection in specific networks (MCC & MNC)
+*
+* PARAMETERS
+*
+* RETURNS
+*   kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+wfc_profile_enum sdm_cust_sms_over_wifi_preference(char *mcc, char *mnc, wfc_profile_enum user_deafult)
+{
+    /* Regardless the WFCP setting, customize the SMS over WIFI preference according to MCC/MNC */
+
+    kal_uint8 setting = 0;
+    kal_uint32 tbl_entry_num = sizeof(sdm_cust_sms_over_wifi_preference_tbl)/sizeof(sdm_customized_plmn_table_entry);
+
+    //kal_prompt_trace(MOD_SDM, "sdm_cust_sms_over_wifi_preference(), mcc=%s, mnc=%s", mcc, mnc);
+
+    if(KAL_TRUE == sdm_find_customized_setting(sdm_cust_sms_over_wifi_preference_tbl, tbl_entry_num, mcc, mnc, &setting))
+    {
+        return (wfc_profile_enum)setting;
+    }
+    else if(user_deafult != WFC_PROFILE_NUM)
+    {
+        return user_deafult;
+    }
+    else
+    {
+        /* Default */
+        return WFC_PROFILE_NUM;
+    } 
+}
+
+/*****************************************************************************
+* FUNCTION
+*   sdm_cust_sms_over_ip_allowed
+* DESCRIPTION
+*   This function is used to define whether SMS over IP is allowed for
+*   MO SMS domain selection in specific networks (MCC & MNC)
+*
+* PARAMETERS
+*
+* RETURNS
+*   kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool sdm_cust_sms_over_ip_allowed(char *mcc, char *mnc, kal_bool user_deafult)
+{
+
+    /* When TRUE is returned, SMS over IP is allowed*/
+
+    kal_uint8 setting = 0;
+    kal_uint32 tbl_entry_num = sizeof(sdm_cust_sms_over_ip_allowed_tbl)/sizeof(sdm_customized_plmn_table_entry);
+
+
+    if(KAL_TRUE == sdm_find_customized_setting(sdm_cust_sms_over_ip_allowed_tbl, tbl_entry_num, mcc, mnc, &setting))
+    {
+        return setting;
+    }
+    else if(user_deafult != KAL_TRUE)
+    {
+        return user_deafult;
+    }
+    else
+    {
+        /* Default */
+        return KAL_TRUE;
+    }     
+
+}
+
+/*****************************************************************************
+* FUNCTION
+*   sdm_cust_sms_over_cs_when_roaming
+* DESCRIPTION
+*   This function is used to define whether MO SMS over CS when roaming is allowed
+*   in specific networks (MCC & MNC)
+*
+* PARAMETERS
+*
+* RETURNS
+*   kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool sdm_cust_sms_over_cs_when_roaming(char *mcc, char *mnc)
+{
+    kal_uint8 setting = 0;
+    kal_uint32 tbl_entry_num = sizeof(sdm_cust_sms_over_cs_when_roaming_tbl)/sizeof(sdm_customized_plmn_table_entry);
+
+    //kal_prompt_trace(MOD_SDM, "sdm_cust_sms_over_cs_when_roaming(), mcc=%s, mnc=%s", mcc, mnc);
+
+    if(KAL_TRUE == sdm_find_customized_setting(sdm_cust_sms_over_cs_when_roaming_tbl, tbl_entry_num, mcc, mnc, &setting))
+    {
+        return setting;
+    }
+    else
+    {
+        /* Default */
+        return KAL_TRUE;
+    }
+}
diff --git a/mcu/custom/protocol/common/ps/custom_sdm_utility.h b/mcu/custom/protocol/common/ps/custom_sdm_utility.h
new file mode 100644
index 0000000..c8045cc
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_sdm_utility.h
@@ -0,0 +1,93 @@
+/*****************************************************************************
+*  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) 2015
+*
+*  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:
+ * ---------
+ * custom_sdm_utility.h
+ *
+ * Project:
+ * --------
+ * MOLY
+ *
+ * Description:
+ * ------------
+ * This file is intended for header file of SMS domain management
+ * customization functions.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ ****************************************************************************/
+ 
+#ifndef _CUSTOM_SDM_UTILITY_H
+#define _CUSTOM_SDM_UTILITY_H
+
+#include "kal_general_types.h"
+#include "ims_common_def.h"
+
+
+typedef struct
+{
+    kal_uint8   mcc[MAX_MCC_STR_LEN];
+    kal_uint8   mnc[MAX_MNC_STR_LEN];
+    kal_uint8   setting;
+} sdm_customized_plmn_table_entry;
+
+typedef enum
+{
+    SDM_CUST_SMS_OVER_SGS_PREFERRED,
+    SDM_CUST_SMS_OVER_WIFI_ENABLE,
+    SDM_CUST_SMS_OVER_CS_WHEN_2G_CALL_ONGOING,
+    SDM_CUST_SMS_OVER_WIFI_PREFERENCE,
+    SDM_CUST_SMS_OVER_IP_ALLOWED,
+    SDM_CUST_SMS_RETRY_DOMAIN_PREFERENCE,    
+    SDM_CUST_SMS_OVER_CS_WHEN_ROAMING,
+}sdm_customized_plmn_table_category;
+
+/* implemented in custom/modem/common/ps/custom_sdm_utility.c */
+extern kal_bool sdm_get_customized_plmn_table(sdm_customized_plmn_table_category tbl_type, sdm_customized_plmn_table_entry **tbl_ptr, kal_uint32 *tbl_size);
+extern kal_bool sdm_find_customized_setting(const sdm_customized_plmn_table_entry *tbl, kal_uint32 tbl_entry_num, char *mcc, char *mnc, kal_uint8 *setting);
+extern kal_bool sms_over_sgs_preferred_in_lte(char *mcc, char *mnc);
+extern kal_bool sms_over_wifi_allowed(char *mcc, char *mnc);
+//extern kal_bool sdm_retry_ims_when_cs_send_fail(char *mcc, char *mnc);
+extern kal_bool sms_over_cs_when_2g_call_ongoing(char *mcc, char *mnc);
+extern wfc_profile_enum sdm_cust_sms_over_wifi_preference(char *mcc, char *mnc, wfc_profile_enum user_deafult);
+extern kal_bool sdm_cust_sms_over_ip_allowed(char *mcc, char *mnc, kal_bool user_deafult);
+extern sdm_retry_domain_preference_enum sdm_cust_retry_domain_preference(char *mcc, char *mnc);
+extern kal_bool sdm_cust_sms_over_cs_when_roaming(char *mcc, char *mnc);
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_sml.c b/mcu/custom/protocol/common/ps/custom_sml.c
new file mode 100644
index 0000000..95421e5
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_sml.c
@@ -0,0 +1,2789 @@
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * custom_sml.c
+ *
+ * Project:
+ * --------
+ *  UMOLYA
+ *
+ * Description:
+ * ------------
+ *  This file is for SIM ME Lock customization
+ *
+ * Author:
+ * -------
+ * -------
+ ****************************************************************************/
+#if !defined(__MAUI_BASIC__)
+
+#include <string.h>
+
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "global_def.h"
+
+#include "custom_sml.h"
+#include "custom_sml_trc.h"
+#include "custom_nvram_extra.h"
+
+#include "ps_public_enum.h"
+#include "sim_ps_enum.h"
+#include "smu_common_enums.h"
+
+#include "mcd_l3_inc_struct.h"
+
+#include "nvram_interface.h"
+#include "cust_chl_interface.h"
+#include "custom_sml_sec_verify.h"
+
+#include "l4c_utility.h"
+#include "ps_public_utility.h"
+
+
+extern void smu_nvram_write(nvram_lid_enum file_idx, kal_uint8 access_id, kal_bool is_write_protect2);
+
+
+
+#ifndef L4_NOT_PRESENT
+/****************************************************************************
+ *
+ *  SIM ME Lock
+ *
+ ****************************************************************************/
+
+#ifdef __CUST_SML_RULE__
+const kal_uint8 sml_gblob_max_cust_rule[SML_LOCK_CUST_CODE_SIZE + 1] = SML_GBLOB_MAX_CUST_RULE_LIST;
+#endif
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_mini_trace
+ * DESCRIPTION
+ *  trace for short strings
+ * PARAMETERS
+ *  title       [const kal_char]
+ *  data        [kal_uint8]
+ *  len         [kal_uint8]
+ * RETURN
+ *  void
+*******************************************************************************/
+void sml_mini_trace(const kal_char *title, kal_uint8 *data, kal_uint8 len)
+{    
+    kal_uint8 *buf = NULL;
+    kal_uint8 buf_len = (len < 128 ? len : 128);
+
+    buf = get_ctrl_buffer(128 + 1);
+    kal_mem_set(buf, 0, 128 + 1);
+
+    kal_mem_cpy(buf, data, buf_len);
+    kal_prompt_trace(kal_get_active_module_id(), "%s: ", title);
+    kal_prompt_trace(kal_get_active_module_id(), "%s", (const kal_char *)buf);
+}
+
+/*******************************************************************************
+ * FUNCTION  
+ *  custom_sml_query_key_input_type
+ * DESCRIPTION
+ *  This function is to query under particular protection algorithm and operation pair,
+ *    whether our key input is plaintext key (e.g. '123456') or hashed key (e.g. {0xAA, 0xBB, ...})
+ * PARAMETERS
+ *  algo    key protection algorithm
+ *  op      operation for querying key input type
+ * RETURN
+ *  SML_VERIFY_WITH_PLAINKEY: Input is plaintext key, may need to derive its hashed value for verification
+ *  SML_VERIFY_WITH_HCK: Input is hashed key, directly compare its stored hashed value for verification
+ * GLOBALS AFFECTED
+ *  N/A
+*******************************************************************************/
+sml_key_input_type_enum custom_sml_query_key_input_type(sml_key_algo_enum algo, sml_op_enum op)
+{
+    sml_key_input_type_enum input_type = SML_INPUT_WITH_PLAINKEY;
+
+    if (algo == SML_KEY_ALGO_BCD)     /* algo == 0 */
+    {
+        input_type = SML_INPUT_WITH_PLAINKEY;
+    }
+
+    else if (algo == SML_KEY_ALGO_PBKDF2_HMAC_SHA256_SALT128)      /* algo == 1 */
+    {
+        switch (op)
+        {
+            case SML_OP_VERIFY:
+            case SML_OP_CHANGE_PWD:
+                input_type = SML_INPUT_WITH_PLAINKEY;
+                break;
+
+            case SML_OP_UNLOCK:
+            case SML_OP_LOCK:
+            case SML_OP_ADD:
+            case SML_OP_REMOVE:
+            case SML_OP_DISABLE:
+            case SML_OP_UPDATE_AUTOLOCK_COUNT:
+                input_type = SML_INPUT_WITH_HCK;
+                break;
+
+            default:
+                break;
+        }
+    }
+
+    return input_type;
+}
+
+#ifdef __SML_PUK__
+/*******************************************************************************
+ * FUNCTION  
+ *  custom_sml_query_puk_key_input_type
+ * DESCRIPTION
+ *  This function is to query under particular protection algorithm and operation pair,
+ *    whether our key input is plaintext key (e.g. '123456') or hashed key (e.g. {0xAA, 0xBB, ...})
+ * PARAMETERS
+ *  algo    key protection algorithm
+ *  op      operation for querying key input type
+ * RETURN
+ *  SML_VERIFY_WITH_PLAINKEY: Input is plaintext key, may need to derive its hashed value for verification
+ *  SML_VERIFY_WITH_HCK: Input is hashed key, directly compare its stored hashed value for verification
+ * GLOBALS AFFECTED
+ *  N/A
+*******************************************************************************/
+sml_key_input_type_enum custom_sml_query_puk_key_input_type(sml_key_algo_enum algo, sml_puk_key_op_enum op)
+{
+    sml_key_input_type_enum input_type = SML_INPUT_WITH_PLAINKEY;
+
+    if (algo == SML_KEY_ALGO_BCD)     /* algo == 0 */
+    {
+        input_type = SML_INPUT_WITH_PLAINKEY;   // Only PLAINTEXT allowed
+    }
+
+    else if (algo == SML_KEY_ALGO_PBKDF2_HMAC_SHA256_SALT128)      /* algo == 1 */
+    {
+        switch (op)
+        {
+            case SML_PUK_OP_VERIFY:
+                input_type = SML_INPUT_WITH_PLAINKEY;
+                break;
+
+            case SML_PUK_OP_UPDATE:
+                input_type = SML_INPUT_WITH_HCK;
+                break;
+
+            default:
+                break;
+        }
+    }
+
+    return input_type;
+}
+#endif /* __SML_PUK__ */
+
+
+/****************************************************************************
+ *
+ *  Verizon SIM Lock
+ *
+ ****************************************************************************/
+
+/* define the Local variable of VZW SML object */
+static sml_vzw_sim_lock_context_struct sml_vzw_cntxt_obj[MAX_SIM_NUM];
+static nvram_ef_sml_vzw_sim_lock_obj_struct SMLVZWOBJ[MAX_SIM_NUM];
+
+/* define the Global access pointer of VZW SML object */
+nvram_ef_sml_vzw_sim_lock_obj_struct * pSMLVZWg = &SMLVZWOBJ[0];
+
+
+/*******************************************************************************
+ * FUNCTION  
+ *  sml_clean_vzw_cntxt
+ * DESCRIPTION
+ *  Clean sensitive data in MD Dump.
+ * PARAMETERS
+ *  N/A
+ * RETURN
+ *  N/A
+ * GLOBALS AFFECTED
+ *  sml_vzw_cntxt_obj
+*******************************************************************************/
+void sml_clean_vzw_cntxt(void)
+{
+    kal_mem_set(sml_vzw_cntxt_obj, 0x00, sizeof(sml_vzw_cntxt_obj));
+}
+
+/*******************************************************************************
+ * FUNCTION  
+ *  custom_sml_vzw_is_test_purpose
+ * DESCRIPTION
+ *  This function is to query if VzW testing functions are enabled
+ * PARAMETERS
+ *  N/A
+ * RETURN
+ *  KAL_TRUE: For test purpose, testing function enabled
+ *  KAL_FALSE: Normal purpose
+ * GLOBALS AFFECTED
+ *  N/A
+*******************************************************************************/
+kal_bool custom_sml_vzw_is_test_purpose(void)
+{
+#ifdef __VZW_RSU_TEST__
+    return KAL_TRUE;
+#else
+    return KAL_FALSE;
+#endif
+}
+
+
+/*******************************************************************************
+ * FUNCTION  
+ *  sml_vzw_give
+ * DESCRIPTION
+ *  This method copys the LID files read from NVRAM to the SML obj
+ * PARAMETERS
+ *  IN          * pLidToObj
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+*******************************************************************************/
+void sml_vzw_give(void *pLidToObj, kal_uint8 source)
+{
+    sml_vzw_sim_lock_context_struct * pObj = NULL;
+  
+    if(NULL != pSMLVZWg[source].pObj)
+    {
+        pSMLVZWg[source].pObj = NULL;   
+    }
+       
+    pObj = &(sml_vzw_cntxt_obj[source]);
+    
+    kal_mem_cpy(pObj,
+                pLidToObj,
+                sizeof(sml_vzw_sim_lock_context_struct)
+                ); 
+   
+    pSMLVZWg[source].pObj = pObj;
+}
+
+/*******************************************************************************
+ * FUNCTION  
+ *  sml_vzw_take
+ * DESCRIPTION
+ *  This method copys the contex of the SML object to the provided NVRAM LID.
+ * PARAMETERS
+ *  OUT         * pObjToLid
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+void sml_vzw_take( void *pObjToLid, kal_uint8 source )
+{
+    sml_vzw_sim_lock_context_struct * pObj = (sml_vzw_sim_lock_context_struct *) pSMLVZWg[source].pObj;
+
+    kal_mem_cpy(pObjToLid,
+                pObj,
+                sizeof(sml_vzw_sim_lock_context_struct)
+                );
+}
+
+/*******************************************************************************
+ * FUNCTION  
+ *  sml_vzw_destory
+ * DESCRIPTION
+ *  This method free the SML object in memory if it is not used.
+ * PARAMETERS
+ *  void
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/    
+void sml_vzw_destory(kal_uint8 source)
+{
+    pSMLVZWg[source].pObj = NULL;
+}
+
+/*******************************************************************************
+ * FUNCTION  
+ *  sml_vzw_Load
+ * DESCRIPTION
+ *  This function loads the SML obj from NVRAM LID (NVRAM_READ_CNF)
+ * PARAMETERS
+ *  IN          pLid
+ * RETURN
+ *  kal_uint16  Obj size
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/ 
+kal_uint16 sml_vzw_Load( void *pLid, kal_uint8 source )
+{
+    nvram_ef_sml_vzw_sim_lock_obj_struct *p = &pSMLVZWg[source];
+
+    kal_uint16 length = sizeof(sml_vzw_sim_lock_context_struct);
+
+    /* Clean the old ones */
+    (*p->destory)(source);
+
+    /* Load the new one */
+    (*p->give)(pLid, source);
+
+    return length;
+}
+
+/*******************************************************************************
+ * FUNCTION  
+ *  sml_vzw_Save
+ * DESCRIPTION
+ *  This function saves the SML obj to NVRAM LID (NVRAM_WRITE_REQ)
+ * PARAMETERS
+ *  OUT          pLid
+ * RETURN
+ *  kal_uint16  Obj size
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/ 
+kal_uint16 sml_vzw_Save( void *pLid, kal_uint8 source )
+{
+    nvram_ef_sml_vzw_sim_lock_obj_struct *p = &pSMLVZWg[source];
+
+    kal_uint16 length = sizeof(sml_vzw_sim_lock_context_struct);
+
+    kal_uint8 lock_state = SML_VZW_LOCK_STATE_LOCK;
+
+    kal_bool ret_val = KAL_FALSE;
+
+    kal_bool temp_unlock_restore_required = KAL_FALSE;
+
+    /* Check if NW lock op is set to Temp unlock in SML VzW OBJ. If yes, then change it to Lock before performing 'take' operation.
+           Then restore back to Temp unlock after 'take' operation */
+
+    ret_val = sml_vzw_get_int_data(source, SML_VZW_CAT_NONE, SML_VZW_RSU_NETWORK_LOCK_OPERATION, &lock_state);
+
+    if (KAL_FALSE == ret_val)
+    {
+        DEBUG_ASSERT(0);
+    }
+    else
+    {
+        if (lock_state == SML_VZW_LOCK_STATE_TEMP_UNLOCK)
+        {
+            ret_val = sml_vzw_update_int_data(source, SML_VZW_CAT_NONE, SML_VZW_RSU_NETWORK_LOCK_OPERATION, SML_VZW_LOCK_STATE_LOCK);
+            if (ret_val == KAL_TRUE)
+            {
+                temp_unlock_restore_required = KAL_TRUE;
+            }
+        }
+    }
+
+    (*p->take)(pLid, source);
+
+    if (KAL_TRUE == temp_unlock_restore_required)
+    {
+        sml_vzw_update_int_data(source, SML_VZW_CAT_NONE, SML_VZW_RSU_NETWORK_LOCK_OPERATION, SML_VZW_LOCK_STATE_TEMP_UNLOCK);
+    }
+
+    return length;  
+}
+
+/*******************************************************************************
+ * FUNCTION  
+ *  sml_vzw_getItem
+ * DESCRIPTION
+ *  This method returns the structure pointer and length of the structure
+ *  of the desired SML object items.
+ * PARAMETERS
+ *  IN          cat
+ *  IN          item
+ *  OUT         *length
+ * RETURN
+ *  void *
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+void * sml_vzw_getItem(sml_vzw_cat_enum category, 
+                              sml_ctx_enum item, 
+                              kal_uint16 *plength,
+                              kal_uint8 source)
+{
+    sml_vzw_sim_lock_context_struct *pObj = (sml_vzw_sim_lock_context_struct *) pSMLVZWg[source].pObj;
+
+    ASSERT(NULL != pObj);
+
+    switch(item)
+    {
+        case SML_VZW_RSU_MAJOR_VERSION:
+            *plength = sizeof(kal_uint8);
+            return (kal_uint8 *) &(pObj->major_version);
+
+        case SML_VZW_RSU_MINOR_VERSION:
+            *plength = sizeof(kal_uint8);
+            return (kal_uint8 *) &(pObj->minor_version);
+
+        case SML_VZW_RSU_PROTECTION_ALGORITHM:
+            *plength = sizeof(kal_uint8);
+            return (kal_uint8 *) &(pObj->protection_algo);
+
+        case SML_VZW_RSU_NETWORK_LOCK_OPERATION:
+            *plength = sizeof(kal_uint8);
+            return (kal_uint8 *) &(pObj->nw_lock_op);
+
+        case SML_VZW_RSU_TIME_STAMP:
+            *plength = SML_VZW_RSU_TIME_STAMP_LEN;
+            return (kal_uint8 *) &(pObj->timestamp[0]);
+
+        case SML_VZW_RSU_SESSION_ID:
+            *plength = SML_VZW_RSU_SESSION_ID_LEN;
+            return (kal_uint8 *) &(pObj->session_id[0]);
+
+        case SML_VZW_RSU_CAT_CODE:
+            switch(category)
+            {
+                case SML_VZW_CAT_N:
+                    *plength = SML_VZW_RSU_NW_LIST_LEN;
+                    return (kal_uint8 *) &(pObj->nw_list[0]);
+                    break;
+
+                case SML_VZW_CAT_NS:
+                    *plength = SML_VZW_RSU_NS_LIST_LEN;
+                    return (kal_uint8 *) &(pObj->ns_list[0]);
+                    break;
+
+                case SML_VZW_CAT_SP:
+                    *plength = SML_VZW_RSU_SP_LIST_LEN;
+                    return (kal_uint8 *) &(pObj->sp_list[0]);
+                    break;
+
+                case SML_VZW_CAT_EHPLMN:
+                    *plength = SML_VZW_RSU_EHPLMN_LIST_LEN;
+                    return (kal_uint8 *) &(pObj->ehplmn_list[0]);
+                    break;
+
+                default:
+                    /* do nothing */
+                    break;
+            }
+            break;
+
+        case SML_VZW_RSU_CAT_NUM:
+            switch(category)
+            {
+                case SML_VZW_CAT_N:
+                    *plength = sizeof(kal_uint8);
+                    return (kal_uint8 *) &(pObj->nw_num);
+                    break;
+        
+                case SML_VZW_CAT_NS:
+                    *plength = sizeof(kal_uint8);
+                    return (kal_uint8 *) &(pObj->ns_num);
+                    break;
+        
+                case SML_VZW_CAT_SP:
+                    *plength = sizeof(kal_uint8);
+                    return (kal_uint8 *) &(pObj->sp_num);
+                    break;
+        
+                case SML_VZW_CAT_EHPLMN:
+                    *plength = sizeof(kal_uint8);
+                    return (kal_uint8 *) &(pObj->ehplmn_num);
+                    break;
+        
+                default:
+                    /* do nothing */
+                    break;
+            }
+            break;
+
+        default:
+            break;
+    }
+
+    return NULL;
+}
+
+/*******************************************************************************
+ * FUNCTION  
+ *  sml_vzw_putItem
+ * DESCRIPTION
+ *  This method set the desired items of the SML object.
+ * PARAMETERS
+ *  IN          cat
+ *  IN          item
+ *  IN          *pItem
+ *  IN          *plength
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/ 
+void sml_vzw_putItem(sml_vzw_cat_enum cat,
+                     sml_ctx_enum item, 
+                     void *pItem, 
+                     kal_uint16 *plength,
+                     kal_uint8 source)
+{
+    sml_vzw_sim_lock_context_struct *pObj = (sml_vzw_sim_lock_context_struct *) pSMLVZWg[source].pObj;
+
+    switch (item)
+    {
+        case SML_VZW_RSU_MAJOR_VERSION:
+            kal_mem_cpy(&(pObj->major_version), pItem, *plength);
+            break;
+
+        case SML_VZW_RSU_MINOR_VERSION:
+            kal_mem_cpy(&(pObj->minor_version), pItem, *plength);
+            break;
+
+        case SML_VZW_RSU_PROTECTION_ALGORITHM:
+            kal_mem_cpy(&(pObj->protection_algo), pItem, *plength);
+            break;
+            
+        case SML_VZW_RSU_NETWORK_LOCK_OPERATION:
+            kal_mem_cpy(&(pObj->nw_lock_op), pItem, *plength);
+            break;
+
+        case SML_VZW_RSU_SESSION_ID:
+            kal_mem_cpy(pObj->session_id, pItem, *plength);
+            break;
+
+        case SML_VZW_RSU_TIME_STAMP:
+            kal_mem_cpy(pObj->timestamp, pItem, *plength);
+            break;
+
+        case SML_VZW_RSU_CAT_CODE:
+            switch(cat)
+            {
+                case SML_VZW_CAT_N:
+                    kal_mem_cpy(pObj->nw_list, pItem, *plength);
+                    break;
+
+                case SML_VZW_CAT_NS:
+                    kal_mem_cpy(pObj->ns_list, pItem, *plength);
+                    break;
+
+                case SML_VZW_CAT_SP:
+                    kal_mem_cpy(pObj->sp_list, pItem, *plength);
+                    break;
+
+                case SML_VZW_CAT_EHPLMN:
+                    kal_mem_cpy(pObj->ehplmn_list, pItem, *plength);
+                    break;
+
+                default:
+                    /* do nothing */
+                    break;
+            }
+            break;
+
+        case SML_VZW_RSU_CAT_NUM:
+            switch(cat)
+            {
+                case SML_VZW_CAT_N:
+                    kal_mem_cpy(&(pObj->nw_num), pItem, *plength);
+                    break;
+        
+                case SML_VZW_CAT_NS:
+                    kal_mem_cpy(&(pObj->ns_num), pItem, *plength);
+                    break;
+        
+                case SML_VZW_CAT_SP:
+                    kal_mem_cpy(&(pObj->sp_num), pItem, *plength);
+                    break;
+        
+                case SML_VZW_CAT_EHPLMN:
+                    kal_mem_cpy(&(pObj->ehplmn_num), pItem, *plength);
+                    break;
+        
+                default:
+                    /* do nothing */
+                    break;
+            }
+            break;
+
+        default:
+            break;
+    }
+}
+
+/*******************************************************************************
+ * FUNCTION  
+ *  sml_vzw_Catcode
+ * DESCRIPTION
+ *  This function is used to compose the code of each category
+ * PARAMETERS
+ *  IN          cat
+ *  IN          *imsi
+ *  IN          *vzw_gid1_len
+ *  IN          *gid1
+ *  IN          *ehplmn
+ *  IN          mnc_len
+ *  OUT          *code
+ * RETURN
+ *  kal_uint8   code length
+ * GLOBALS AFFECTED
+ *  NONE
+ *******************************************************************************/ 
+kal_uint8 sml_vzw_Catcode( sml_vzw_cat_enum cat,
+                           kal_uint8 *imsi,
+                           kal_uint8 vzw_gid1_len,
+                           kal_uint8 *gid1,
+                           kal_uint8 *ehplmn,
+                           kal_uint8 mnc_len,
+                           kal_uint8 *code )
+{
+    kal_uint8 i = 0;
+    kal_uint8 gid1_start_pos = 7;
+    kal_uint8 ehplmn_start_pos = (vzw_gid1_len < NUM_GID1)? (gid1_start_pos + vzw_gid1_len) : (gid1_start_pos + NUM_GID1);
+
+    if (imsi == NULL)
+    {
+        return 0;
+    }
+
+    if(mnc_len == 3)
+    {
+        /* MCC/MNC */
+        code[0] = ((imsi[1]&0xF0)>>4) + '0';
+        code[1] = (imsi[2]&0x0F) + '0';
+        code[2] = ((imsi[2]&0xF0)>>4) + '0';
+        code[3] = (imsi[3]&0x0F) + '0';
+        code[4] = ((imsi[3]&0xF0)>>4) + '0';
+        code[5] = (imsi[4]&0x0F) + '0';
+        code[6] = ((imsi[4]&0xF0)>>4) + '0';
+        code[7] = (imsi[5]&0x0F) + '0';
+    }
+    else
+    {
+        /* MCC/MNC */
+        code[0] = ((imsi[1]&0xF0)>>4) + '0';
+        code[1] = (imsi[2]&0x0F) + '0';
+        code[2] = ((imsi[2]&0xF0)>>4) + '0';
+        code[3] = (imsi[3]&0x0F) + '0';
+        code[4] = ((imsi[3]&0xF0)>>4) + '0';
+        code[5] = 'F';
+        code[6] = (imsi[4]&0x0F) + '0';
+        code[7] = ((imsi[4]&0xF0)>>4) + '0';
+    }
+
+    switch(cat)
+    {        
+        case SML_VZW_CAT_N:
+            return SML_VZW_RSU_NW_CODE_LEN;
+        break;
+
+        case SML_VZW_CAT_NS:
+            return SML_VZW_RSU_NS_CODE_LEN;
+        break;
+
+        case SML_VZW_CAT_SP:
+            if (NULL != gid1)
+            {
+                code[6] = vzw_gid1_len;
+                /* GID */
+                for (i = 0; (i < vzw_gid1_len) && (i < NUM_GID1); i++)
+                {
+                    code[gid1_start_pos+i] = gid1[i];
+                }
+                return gid1_start_pos + i;
+            }
+            else
+            {
+                return 0;
+            }
+        break;
+
+        case SML_VZW_CAT_EHPLMN:
+            if (NULL != gid1)
+            {
+                code[6] = vzw_gid1_len;
+                /* Verizon use 8 bytes of GID1 */
+                for (i = 0; (i < vzw_gid1_len) && (i < NUM_GID1); i++)
+                {
+                    code[gid1_start_pos+i] = gid1[i];
+                }
+            }
+            else
+            {
+                return 0;
+            }
+
+            if (ehplmn != NULL)
+            {
+                if (*ehplmn == 0xff)
+                {
+                    return 0;
+                }
+                else
+                {
+                    /* EHPLMN format is :
+                       MCC2|MCC1 MNC3(opt)|MCC3 MNC2|MNC1
+                    */
+                    code[ehplmn_start_pos] = (ehplmn[0]&0x0F) + '0';      //MCC1
+                    code[ehplmn_start_pos+1] = ((ehplmn[0]&0xF0)>>4) + '0'; //MCC2
+                    code[ehplmn_start_pos+2] = (ehplmn[1]&0x0F) + '0';      //MCC3
+                    code[ehplmn_start_pos+3] = (ehplmn[2]&0x0F) + '0';      //MNC1
+                    code[ehplmn_start_pos+4] = ((ehplmn[2]&0xF0)>>4) + '0'; //MNC2
+                    
+                    if ((ehplmn[1] & 0xF0) == 0xF0) //this EHPLMN mnc len = 2
+                    {
+                        code[ehplmn_start_pos+5] = 0xFF;
+                    }
+                    else
+                    {
+                        code[ehplmn_start_pos+5] = ((ehplmn[1] & 0xF0)>>4) + '0'; //MNC3
+                    }
+                    return ehplmn_start_pos + 6;
+                }
+            }
+            else
+            {
+                return 0;
+            }
+        break;
+
+        default:
+
+        break;
+
+    }
+
+    return 0;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_vzw_GetCode
+ * DESCRIPTION
+ *  This function is used to compose the code of each category  whether 
+ *  mnc length is 2 or 3
+ * PARAMETERS
+ *  cat             [IN]    category of the SIM-ME-Lock
+ *  imsi            [IN]    imsi of the code source
+ *  vzw_gid1_len    [IN]    gid1 lengh from VZW code
+ *  gid1            [IN]    gid1 of the code source
+ *  sim_mnc_len     [IN]    the mnc length decided by SIM
+ *  pdata           [IN]    the saved code for comparing
+ *  pdata_len       [IN]    the length of saved code for comparing
+ *  code            [OUT]   the composed code according to all input parameters
+ *
+ * RETURN
+ *  kal_uint16 file size
+ * GLOBALS AFFECTED
+ *  SMLSLOBJ
+ *******************************************************************************/
+kal_uint8 sml_vzw_GetCode( sml_vzw_cat_enum cat, 
+                           kal_uint8 *imsi,
+                           kal_uint8 vzw_gid1_len,
+                           kal_uint8 *gid1,
+                           kal_uint8 *ehplmn,
+                           kal_uint8 sim_mnc_len, 
+                           kal_uint8 *pdata,
+                           kal_uint8 *pdata_len,
+                           kal_uint8 *code)
+{
+    kal_uint8 mnc_len=0;
+
+    if (SML_MNC_LENGTH_NEST == 1)
+    {
+        mnc_len = sim_mnc_len;
+    }
+    else
+    {
+        if (((*(pdata+5)) == 'F') || ((*(pdata+5)) == 'f'))
+        {
+            mnc_len = 2;
+            *(pdata+5) = 'F';
+        }
+        else
+        {
+            mnc_len = 3;
+        }
+    }
+
+    switch (cat)
+    {
+        case SML_VZW_CAT_N:
+            *pdata_len = SML_VZW_RSU_NW_CODE_LEN;
+            break;
+        case SML_VZW_CAT_NS:
+            *pdata_len = SML_VZW_RSU_NS_CODE_LEN;
+            break;
+        case SML_VZW_CAT_SP:
+            *pdata_len = SML_VZW_RSU_NW_CODE_LEN + 1 + vzw_gid1_len;
+            break;
+        case SML_VZW_CAT_EHPLMN:
+            *pdata_len = (SML_VZW_RSU_NW_CODE_LEN*2) + 1 + vzw_gid1_len;
+            break;
+        default:
+            DEBUG_ASSERT(0);
+            *pdata_len = 0;
+    }
+
+    return sml_vzw_Catcode(cat, imsi, vzw_gid1_len, gid1, ehplmn, mnc_len, code);
+}
+
+/*******************************************************************************
+ * FUNCTION  
+ *  sml_vzw_Check
+ * DESCRIPTION
+ *  This function is used to check if the code is in the Pass list
+ * PARAMETERS
+ *  IN          cat
+ *  IN          *imsi
+ *  IN          *gid1
+ *  IN          ehplmn_num
+ *  IN          *ehplmn_ptr
+ *  IN          len
+ *  IN          source
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_vzw_Check( sml_vzw_cat_enum cat, 
+                        kal_uint8 *imsi, 
+                        kal_uint8 *gid1,
+                        kal_uint16 ehplmn_num,
+                        kal_uint8 *ehplmn_ptr,
+                        kal_uint8 sim_mnc_len,
+                        kal_uint8 source)
+{
+    nvram_ef_sml_vzw_sim_lock_obj_struct *p = &pSMLVZWg[source];
+    kal_uint8 *num_list = NULL;
+    kal_uint8 *list_data = NULL;
+    kal_uint8 *vzw_code_ptr = NULL;
+    kal_uint8 vzw_code_len = 0;
+    kal_uint16 length = 0;
+    kal_uint8 code[SML_VZW_RSU_EHPLMN_CODE_LEN] = {0}; //use ehplmn code len as max code len
+    kal_uint8 code_len = 0;
+    kal_uint8 vzw_gid1_len;
+    kal_uint16 i = 0;
+    kal_uint8 code_dbg_str[(SML_VZW_RSU_EHPLMN_CODE_LEN)*3 + 1] = {0};
+    kal_uint8 iter = 1; //iteration for EHPLMN Configuration, limited by MD1_MAX_NUM_HPLMN
+
+    /* Check the integration of SIM Lock blob first */
+    if (p->pObj== NULL)
+    {
+        MD_TRC_WARNING_SML_CHECK_VALIDITY_FAILED();
+    }
+    else
+    {
+        num_list = (kal_uint8 *)(*p->getItem)(cat, SML_VZW_RSU_CAT_NUM, &length, source);
+
+        if (*num_list == 0)
+        {
+            // TODO: list is empty, always pass or blocked? currently is pass
+            return KAL_TRUE;
+        }
+        else
+        {
+            list_data = (kal_uint8 *)(*p->getItem)(cat, SML_VZW_RSU_CAT_CODE, &length, source);
+            vzw_code_ptr = list_data;
+        }
+
+        for (i = 0; i < *num_list; i++)
+        {
+            kal_uint8 *temp_ehplmn_ptr = ehplmn_ptr;
+
+            if (SML_VZW_CAT_EHPLMN == cat)
+            {
+                iter = (ehplmn_num < MD1_MAX_NUM_HPLMN)? ehplmn_num : MD1_MAX_NUM_HPLMN;
+            }
+            else
+            {
+                iter = 1;
+            }
+
+            if ((SML_VZW_CAT_SP == cat) || (SML_VZW_CAT_EHPLMN == cat))
+            {
+                vzw_gid1_len = vzw_code_ptr[6];
+            }
+            else
+            {
+                vzw_gid1_len = 0;
+            }
+
+            while (iter > 0)
+            {
+                kal_uint8 j = 0, k = 0;
+
+                iter--;
+
+                code_len = sml_vzw_GetCode(cat, imsi, vzw_gid1_len, gid1, temp_ehplmn_ptr, sim_mnc_len, vzw_code_ptr, &vzw_code_len, code);
+
+                if (iter >= 1)
+                {
+                    temp_ehplmn_ptr += 3; //for next iteration if more than one EHPLMN from SIM
+                }
+
+                while ((j < code_len) && (k <= (sizeof(code_dbg_str) - 4)))
+                {
+                    kal_int8 temp_len;
+
+                    temp_len = kal_sprintf((kal_char*)code_dbg_str + k, "%02x ", code[j]);
+
+                    if (temp_len <= 0)
+                    {
+                        kal_mem_cpy(code_dbg_str + k, "ERR", sizeof("ERR"));
+                        k += 3;
+                        break;
+                    }
+
+                    k += temp_len;
+                    j++;
+                }
+                code_dbg_str[k] = '\0';
+                MD_TRC_INFO_SMU_CHECK_LENGTH(code_len, vzw_code_len, sim_mnc_len);
+                MD_TRC_INFO_SML_VZW_CODE_DEBUG((kal_char*)code_dbg_str);
+
+                /* we support dynamic comparing code length by using the code_len in stead of fixed length.
+                   After that, vzw_code_ptr will shift according to each individual code length.
+                   In addition, the VZW SIM Lock NVRAM structure is defined as max size.
+                */
+                if ((code_len > 0) && (kal_mem_cmp(code, vzw_code_ptr, code_len) == 0))
+                {
+                    return KAL_TRUE;
+                }
+
+                kal_mem_set(code, 0, SML_VZW_RSU_EHPLMN_CODE_LEN);
+            }
+            
+            //shift to next code of the compared category
+            vzw_code_ptr += vzw_code_len;
+        }
+    }
+
+    return KAL_FALSE;
+}
+
+kal_bool sml_vzw_update_int_data(kal_uint8 source, sml_vzw_cat_enum cat, sml_ctx_enum type, kal_uint8 data)
+{
+    nvram_ef_sml_vzw_sim_lock_obj_struct *p = &pSMLVZWg[source];
+    kal_uint16 length = sizeof(kal_uint8);
+
+    /* Check the integration of SIM Lock blob first */
+    if (p->pObj == NULL)
+    {
+        MD_TRC_WARNING_SML_CHECK_VALIDITY_FAILED();
+        return KAL_FALSE;
+    }
+
+    (*p->putItem)(cat, type, &data, &length, source);
+
+    return KAL_TRUE;
+}
+
+kal_bool sml_vzw_get_int_data(kal_uint8 source, sml_vzw_cat_enum cat, sml_ctx_enum type, kal_uint8* pData)
+{
+    nvram_ef_sml_vzw_sim_lock_obj_struct *p = &pSMLVZWg[source];
+    kal_uint16 length;
+    kal_bool ret_val = KAL_FALSE;
+
+    /* Check the integration of SIM Lock blob first */
+    if (p->pObj == NULL)
+    {
+        MD_TRC_WARNING_SML_CHECK_VALIDITY_FAILED();
+    }
+    else
+    {
+        *pData = *((kal_uint8 *)(*p->getItem)(cat, type, &length, source));
+
+        if (length == sizeof(kal_uint8))
+        {
+            ret_val = KAL_TRUE;
+        }
+        else
+        {
+            MD_TRC_WARNING_SML_VZW_RSU_GET_INT_DATA_FAILED(cat, type);
+        }
+    }
+    
+    return ret_val;
+}
+
+kal_bool sml_vzw_update_array_data(kal_uint8 source, sml_vzw_cat_enum cat, sml_ctx_enum type, kal_uint8* data, kal_uint16 data_len)
+{
+    nvram_ef_sml_vzw_sim_lock_obj_struct *p = &pSMLVZWg[source];
+
+    /* Check the integration of SIM Lock blob first */
+    if (p->pObj == NULL)
+    {
+        MD_TRC_WARNING_SML_CHECK_VALIDITY_FAILED();
+        return KAL_FALSE;
+    }
+
+    (*p->putItem)(cat, type, data, &data_len, source);
+
+    return KAL_TRUE;
+}
+
+kal_bool sml_vzw_get_array_data(kal_uint8 source, sml_vzw_cat_enum cat, sml_ctx_enum type, kal_uint8* data, kal_uint16* data_len)
+{
+    nvram_ef_sml_vzw_sim_lock_obj_struct *p = &pSMLVZWg[source];
+    kal_uint8* pData = NULL;
+
+    /* Check the integration of SIM Lock blob first */
+    if (p->pObj == NULL)
+    {
+        MD_TRC_WARNING_SML_CHECK_VALIDITY_FAILED();
+        return KAL_FALSE;
+    }
+
+    pData = (kal_uint8 *)(*p->getItem)(cat, type, data_len, source);
+
+    kal_mem_cpy(data, pData, *data_len);
+    
+    return KAL_TRUE;
+}
+
+kal_uint8 sml_vzw_get_major_version(kal_uint8 source)
+{
+    nvram_ef_sml_vzw_sim_lock_obj_struct *p = &pSMLVZWg[source];
+    kal_uint8 *pMajor_ver = NULL;
+    kal_uint16 length = 0;
+
+    /* Check the integration of SIM Lock blob first */
+    if (p->pObj == NULL)
+    {
+        MD_TRC_WARNING_SML_CHECK_VALIDITY_FAILED();
+        return KAL_FALSE;
+    }
+
+    pMajor_ver = (kal_uint8 *)(*p->getItem)(SML_VZW_CAT_NONE, SML_VZW_RSU_MAJOR_VERSION, &length, source);
+
+    return *pMajor_ver;
+}
+
+kal_uint8 sml_vzw_get_max_support_major_version()
+{
+    return SML_VZW_RSU_MAX_SUPPORT_MAJOR_VER;
+}
+
+kal_uint8 sml_vzw_get_minor_version(kal_uint8 source)
+{
+    nvram_ef_sml_vzw_sim_lock_obj_struct *p = &pSMLVZWg[source];
+    kal_uint8 *pMinor_ver = NULL;
+    kal_uint16 length = 0;
+
+    /* Check the integration of SIM Lock blob first */
+    if (p->pObj == NULL)
+    {
+        MD_TRC_WARNING_SML_CHECK_VALIDITY_FAILED();
+        return KAL_FALSE;
+    }
+
+    pMinor_ver = (kal_uint8 *)(*p->getItem)(SML_VZW_CAT_NONE, SML_VZW_RSU_MINOR_VERSION, &length, source);
+
+    return *pMinor_ver;
+}
+
+kal_uint8 sml_vzw_get_max_support_minor_version()
+{
+    return SML_VZW_RSU_MAX_SUPPORT_MINOR_VER;
+}
+
+extern const nvram_sml_vzw_sim_lock_context_struct NVRAM_EF_L4_SML_VZW_SIM_LOCK_DEFAULT;
+
+kal_bool sml_vzw_reset_rsu_data(kal_uint8 source)
+{
+    nvram_ef_sml_vzw_sim_lock_obj_struct* p = &pSMLVZWg[source];
+    sml_vzw_sim_lock_context_struct* pDefaultBlob = (sml_vzw_sim_lock_context_struct*)&NVRAM_EF_L4_SML_VZW_SIM_LOCK_DEFAULT;
+
+    /* Check the integration of SIM Lock blob first */
+    if (p->pObj == NULL)
+    {
+        MD_TRC_WARNING_SML_CHECK_VALIDITY_FAILED();
+        return KAL_FALSE;
+    }
+
+    // Set Network Lock
+    sml_vzw_update_int_data(source, SML_VZW_CAT_NONE, SML_VZW_RSU_NETWORK_LOCK_OPERATION, SML_VZW_LOCK_STATE_LOCK);
+
+    // Reset NW Configuration
+    sml_vzw_update_int_data(source, SML_VZW_CAT_N, SML_VZW_RSU_CAT_NUM, pDefaultBlob->nw_num);
+    sml_vzw_update_array_data(source, SML_VZW_CAT_N, SML_VZW_RSU_CAT_CODE, pDefaultBlob->nw_list, SML_VZW_RSU_NW_LIST_LEN);
+
+    // Reset NS Configuration
+    sml_vzw_update_int_data(source, SML_VZW_CAT_NS, SML_VZW_RSU_CAT_NUM, pDefaultBlob->ns_num);
+    sml_vzw_update_array_data(source, SML_VZW_CAT_NS, SML_VZW_RSU_CAT_CODE, pDefaultBlob->ns_list, SML_VZW_RSU_NS_LIST_LEN);
+
+    // Reset SP Configuration
+    sml_vzw_update_int_data(source, SML_VZW_CAT_SP, SML_VZW_RSU_CAT_NUM, pDefaultBlob->sp_num);
+    sml_vzw_update_array_data(source, SML_VZW_CAT_SP, SML_VZW_RSU_CAT_CODE, pDefaultBlob->sp_list, SML_VZW_RSU_SP_LIST_LEN);
+
+    // Reset EHPLMN Configuration
+    sml_vzw_update_int_data(source, SML_VZW_CAT_EHPLMN, SML_VZW_RSU_CAT_NUM, pDefaultBlob->ehplmn_num);
+    sml_vzw_update_array_data(source, SML_VZW_CAT_EHPLMN, SML_VZW_RSU_CAT_CODE, pDefaultBlob->ehplmn_list, SML_VZW_RSU_EHPLMN_LIST_LEN);
+
+    return KAL_TRUE;
+}
+
+void custom_vzw_rsu_get_pub_key_handle(kal_uint8 index, TYPE_CUST_CHL_KEY *key)
+{
+    TYPE_CUST_CHL_KEY pub_key[] = {
+        CUST_VZ_PUB_KEY // index == 0, do not change this.
+        // Add test key handle here
+    };
+    
+    #define VZW_KEY_SET_MAX_NUM (sizeof(pub_key)/sizeof(pub_key[0]))
+    
+    index = index > (VZW_KEY_SET_MAX_NUM - 1) ? 0 : index;
+    
+    if (NULL != key)
+    {
+        *key = pub_key[index];
+        MD_TRC_INFO_SML_RSU_PUB_KEY_HANDLE((*key));
+    }
+
+    return;
+}
+
+/****************************************************************************
+ *
+ *  TMO SIM Lock with Movial Solution
+ *
+ ****************************************************************************/
+#ifdef __TMO_RSU_OTP__
+static kal_bool custom_check_is_default_tmo_blob(kal_uint8 *imei);
+#endif /* __TMO_RSU_OTP__ */
+/* define the Local variable of TMO MOVIAL SML object */
+static sml_tmo_movial_sim_lock_context_struct sml_tmo_movial_cntxt_obj[MAX_SIM_NUM];
+static nvram_ef_sml_tmo_movial_sim_lock_obj_struct SMLTMMOBJ[MAX_SIM_NUM];
+
+/* define the Global access pointer of TMO MOVIAL SML object */
+nvram_ef_sml_tmo_movial_sim_lock_obj_struct* pSMLTMMg = &SMLTMMOBJ[0];
+
+/* time to temporary unlock expiry in seconds */
+kal_uint32 sml_tmo_movial_seconds_to_expire = 0;
+
+#ifdef UNIT_TEST
+kal_uint8 imei_bcd_ut[9];
+#endif /* UNIT_TEST */
+
+/*******************************************************************************
+ * FUNCTION  
+ *  sml_clean_tmo_movial_cntxt
+ * DESCRIPTION
+ *  Clean sensitive data in MD Dump.
+ * PARAMETERS
+ *  N/A
+ * RETURN
+ *  N/A
+ * GLOBALS AFFECTED
+ *  sml_tmo_movial_cntxt_obj
+*******************************************************************************/
+void sml_clean_tmo_movial_cntxt(void)
+{
+    kal_mem_set(sml_tmo_movial_cntxt_obj, 0x00, sizeof(sml_tmo_movial_cntxt_obj));
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_movial_give
+ * DESCRIPTION
+ *  This method copys the LID files read from NVRAM to the SML obj
+ * PARAMETERS
+ *  IN          * pLidToObj
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLTMMOBJ
+*******************************************************************************/
+void sml_tmo_movial_give( void *pLidToObj, kal_uint8 source )
+{
+    sml_tmo_movial_sim_lock_context_struct * pObj = NULL;
+
+    if(NULL != pSMLTMMg[source].pObj)
+    {
+        kal_sys_trace("SML: object is exist!");
+        pSMLTMMg[source].pObj = NULL;
+    }
+
+    pObj = &(sml_tmo_movial_cntxt_obj[source]);
+
+    kal_mem_cpy(pObj,
+                pLidToObj,
+                sizeof(sml_tmo_movial_sim_lock_context_struct)
+                );
+
+    pSMLTMMg[source].pObj = pObj;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_movial_take
+ * DESCRIPTION
+ *  This method copys the contex of the SML object to the provided NVRAM LID.
+ * PARAMETERS
+ *  OUT         * pObjToLid
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLTMMOBJ
+ *******************************************************************************/
+
+void sml_tmo_movial_take( void *pObjToLid, kal_uint8 source )
+{
+    sml_tmo_movial_sim_lock_context_struct * pObj = (sml_tmo_movial_sim_lock_context_struct *) pSMLTMMg[source].pObj;
+
+    if (NULL == pObjToLid || NULL == pObj)
+    {
+        return;
+    }
+    
+    kal_mem_cpy(pObjToLid,
+                pObj,
+                sizeof(sml_tmo_movial_sim_lock_context_struct)
+                );
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_movial_destory
+ * DESCRIPTION
+ *  This method free the SML object in memory if it is not used.
+ * PARAMETERS
+ *  void
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  SMLTMMOBJ
+ *******************************************************************************/
+void sml_tmo_movial_destory(kal_uint8 source)
+{
+    pSMLTMMg[source].pObj = NULL;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_movial_getItem
+ * DESCRIPTION
+ *  This method returns the structure pointer and length of the structure
+ *  of the desired SML object items.
+ * PARAMETERS
+ *  IN          cat
+ *  IN          item
+ *  OUT         *length
+ * RETURN
+ *  void *
+ * GLOBALS AFFECTED
+ *  SMLTMMOBJ
+ *******************************************************************************/
+void *sml_tmo_movial_getItem( sml_tmo_movial_cat_enum category,
+                              sml_ctx_enum item,
+                              kal_uint16 *plength,
+                              kal_uint8 source)
+{
+    sml_tmo_movial_sim_lock_context_struct *pObj = (sml_tmo_movial_sim_lock_context_struct *) pSMLTMMg[source].pObj;
+
+    ASSERT(NULL != pObj);
+
+    switch(item)
+    {
+        case SML_TMO_MOVIAL_CAT_MAJOR_VERSION:
+            *plength = sizeof(kal_uint8);
+            return (kal_uint8 *) &(pObj->major_version);
+
+        case SML_TMO_MOVIAL_CAT_MINOR_VERSION:
+            *plength = sizeof(kal_uint8);
+            return (kal_uint8 *) &(pObj->minor_version);
+
+        case SML_TMO_MOVIAL_CAT_PROTECTION_ALGORITHM:
+            *plength = sizeof(kal_uint8);
+            return (kal_uint8 *) &(pObj->protection_algorithm);
+
+        case SML_TMO_MOVIAL_CAT_LOCK_OPERATION:
+            *plength = sizeof(kal_uint8);
+            return (kal_uint8 *) &(pObj->lock_operation);
+
+        case SML_TMO_MOVIAL_CAT_IMEI:
+            *plength = SML_TMO_MOVIAL_BLOB_IMEI_SIZE;
+            return (kal_uint8 *) &(pObj->imei[0]);
+
+        case SML_TMO_MOVIAL_CAT_TIME_STAMP:
+            *plength = SML_TMO_MOVIAL_BLOB_TIME_STAMP_SIZE;
+            return (kal_uint8 *) &(pObj->time_stamp[0]);
+
+        case SML_TMO_MOVIAL_CAT_START_TIME:
+            *plength = SML_TMO_MOVIAL_SIZE_OF_START_TIME;
+            return (kal_uint8 *) &(pObj->start_time[0]);
+
+        case SML_TMO_MOVIAL_CAT_UNLOCK_DURATION:
+            *plength = SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION;
+            return (kal_uint8 *) &(pObj->unlock_duration[0]);
+            
+        case SML_TMO_MOVIAL_CAT_LENGTH:
+            *plength = SML_TMO_MOVIAL_BLOB_LENGTH_SIZE;
+            return (kal_uint16 *) &(pObj->length[0]);
+
+        case SML_TMO_MOVIAL_CAT_META:
+            *plength = sizeof(sml_tmo_movial_blob_meta_struct);
+            return (sml_tmo_movial_blob_meta_struct *) &(pObj->cat[category]);
+
+        case SML_TMO_MOVIAL_CAT_KEY:
+            *plength = sizeof(sml_tmo_movial_blob_key_struct);
+            return (sml_tmo_movial_blob_key_struct *) &(pObj->key[category]);
+
+        case SML_TMO_MOVIAL_CAT_SIGNATURE:
+            *plength = SML_TMO_MOVIAL_BLOB_SIZE_OF_SIGNATURE;
+            return (kal_uint8 *) &(pObj->signature[0]);
+
+        case SML_TMO_MOVIAL_CAT_UNLOCK_TIME_COUNTER:
+            *plength = SML_TMO_MOVIAL_SIZE_OF_UNLOCK_TIME;
+            return (kal_uint8 *) &(pObj->unlock_time[0]);
+
+        case SML_TMO_MOVIAL_CAT_CODE:
+            switch(category)
+            {
+                case SML_TMO_MOVIAL_CAT_N:
+                    *plength = SML_TMO_MOVIAL_BLOB_CAT_N_SIZE;
+                    return (kal_uint8 *) &(pObj->code_cat_n[0]);
+                    break;
+
+                case SML_TMO_MOVIAL_CAT_NS:
+                    *plength = SML_TMO_MOVIAL_BLOB_CAT_NS_SIZE;
+                    return (kal_uint8 *) &(pObj->code_cat_ns[0]);
+                    break;
+
+                case SML_TMO_MOVIAL_CAT_SP:
+                    *plength = SML_TMO_MOVIAL_BLOB_CAT_SP_SIZE;
+                    return (kal_uint8 *) &(pObj->code_cat_sp[0]);
+                    break;
+
+                default:
+                    /* do nothing */
+                    break;
+            }
+            break;
+
+        default:
+            break;
+    }
+
+    return NULL;
+}
+
+void sml_tmo_movial_putItem( sml_tmo_movial_cat_enum category,
+                             sml_ctx_enum item, 
+                             void *pItem, 
+                             kal_uint16 *plength,
+                             kal_uint8 source)
+{
+    sml_tmo_movial_sim_lock_context_struct *pObj = (sml_tmo_movial_sim_lock_context_struct *) pSMLTMMg[source].pObj;
+
+    ASSERT(NULL != pObj);
+
+    switch(item)
+    {
+        case SML_TMO_MOVIAL_CAT_UNLOCK_TIME_COUNTER:
+
+            kal_mem_cpy(&(pObj->unlock_time[0]),
+                        pItem,
+                        SML_TMO_MOVIAL_SIZE_OF_UNLOCK_TIME
+                        );
+            break;
+
+        case SML_TMO_MOVIAL_CAT_LOCK_OPERATION:
+
+            kal_mem_cpy(&(pObj->lock_operation),
+                        pItem,
+                        *plength);
+            break;
+
+        default:
+            break;
+    }
+}
+
+
+kal_bool sml_tmo_movial_ValidateIMEI(kal_uint8 *imei, kal_bool is_bypass_default, kal_uint8 source)
+{
+    kal_uint8 nvram_imei_bcd[8 + 1] = {0};
+    kal_uint8 nvram_imei_ascii[16 + 1] = {0};
+    kal_uint8 rec_id = 1 + l4c_gemini_get_actual_sim_id(source);
+    kal_bool result = KAL_FALSE;
+
+#ifdef UNIT_TEST    //Integrity check doesn't work on modis. Modify for UT.
+    kal_mem_cpy(&nvram_imei_bcd[0], &imei_bcd_ut[0], 9);
+#else
+    if (nvram_get_imei_value(8, nvram_imei_bcd, rec_id) == KAL_TRUE)
+#endif
+    {
+        if ((is_bypass_default == KAL_TRUE) 
+            && (KAL_TRUE == custom_check_is_default_imei(&nvram_imei_bcd[0])))
+        {
+            MD_TRC_INFO_SML_CUST_ALLOW_DEFAULT_IMEI();
+            result = KAL_TRUE;
+        }
+        else
+        {
+            // ch2-ch1, last digit is 0
+            nvram_imei_bcd[7] = nvram_imei_bcd[7] & 0x0f;
+            nvram_imei_bcd[8] = 0xff;
+            convert_to_digit((kal_uint8 *)nvram_imei_bcd, nvram_imei_ascii);
+
+            sml_mini_trace("UE IMEI", nvram_imei_ascii, SML_IMEI_PRINT_LEN);
+            sml_mini_trace("BLOB IMEI", &imei[0], SML_TMO_MOVIAL_BLOB_IMEI_SIZE);
+
+            if (kal_mem_cmp(&imei[0], nvram_imei_ascii, 15) == 0)
+            {
+                result = KAL_TRUE;
+            }
+        }
+    }
+
+    MD_TRC_INFO_SML_TMO_RSU_IMEI_CHECK_RESULT(result);
+    return result;
+}
+
+kal_bool sml_tmo_movial_ValidateTimeStamp(kal_uint8 *new_time_stamp, kal_uint8 source)
+{
+    nvram_ef_sml_tmo_movial_sim_lock_obj_struct *p = &pSMLTMMg[source];
+    kal_uint16 length = 0;
+    kal_uint8  *blob_time_stamp;
+    kal_uint64 new_time = 0;
+    kal_uint64 blob_time = 0;   
+    kal_uint8 i = 0;
+
+    blob_time_stamp = (kal_uint8 *)(*p->getItem)(SML_TMO_MOVIAL_CAT_NULL, SML_TMO_MOVIAL_CAT_TIME_STAMP, &length, source);
+
+    for (i = 0; i < SML_TMO_MOVIAL_BLOB_TIME_STAMP_SIZE-1; i++)
+    {
+        blob_time += blob_time_stamp[i];
+        blob_time = (blob_time << 8);
+
+        new_time += new_time_stamp[i];
+        new_time = (new_time << 8);
+    }
+
+    blob_time += blob_time_stamp[SML_TMO_MOVIAL_BLOB_TIME_STAMP_SIZE-1];
+    new_time += new_time_stamp[SML_TMO_MOVIAL_BLOB_TIME_STAMP_SIZE-1];
+
+    if (new_time > blob_time)
+    {
+        return KAL_TRUE;
+    }
+
+    return KAL_FALSE;
+}
+
+kal_bool sml_tmo_movial_ValidateConfigData(sml_tmo_movial_sim_lock_context_struct *pBlob)
+{
+    kal_uint16 cat_idx, data_idx;
+    kal_uint16 length = 0;
+    kal_uint8 *data = NULL;
+
+    for (cat_idx = SML_TMO_MOVIAL_CAT_N ; cat_idx < SML_TMO_MOVIAL_CAT_SIZE ; cat_idx++)
+    {
+        switch (cat_idx)
+        {
+            case SML_TMO_MOVIAL_CAT_N:
+                length = pBlob->cat[cat_idx].num * SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_N;
+                data = pBlob->code_cat_n;
+                break;
+
+            case SML_TMO_MOVIAL_CAT_NS:
+                length = pBlob->cat[cat_idx].num * SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_NS;
+                data = pBlob->code_cat_ns;
+                break;
+
+            case SML_TMO_MOVIAL_CAT_SP:
+                length = pBlob->cat[cat_idx].num * SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_SP;
+                data = pBlob->code_cat_sp;
+                break;
+
+            default:
+                break;
+        }
+
+        for (data_idx = 0; data_idx < length; data_idx++)
+        {
+            if (!((data[data_idx] >= RMMI_CHAR_0) && (data[data_idx] <= RMMI_CHAR_9)) && (data[data_idx] != RMMI_CHAR_F))
+            {
+                return KAL_FALSE;
+            }
+        }
+    }
+
+    return KAL_TRUE;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_movial_ConstructBlob
+ * DESCRIPTION
+ *  This function construct full size Bolb (internal NV structure) from a variant length Blob received in response message
+ * PARAMETERS
+ *  IN          *pObj
+ *  OUT         pLen
+ * RETURN
+ *  kal_uint8 * construct data
+ * GLOBALS AFFECTED
+ *  SMLTMMOBJ
+ *******************************************************************************/
+kal_uint8 *sml_tmo_movial_ConstructBlob(kal_uint8 *pObj, kal_uint16 slb_len, kal_uint8 *error_cause, kal_uint8 source)
+{
+    kal_uint16 sizeM, sizeN, sizeP;
+    kal_uint16 length = 0;
+    kal_uint16 idx;
+    sml_tmo_movial_sim_lock_context_struct *pBlob;
+    kal_uint8 cat_idx = 0;
+
+    MD_TRC_FUNC_SML_TMO_MOVIAL_CONSTRUCTBLOB();
+
+    pBlob = (sml_tmo_movial_sim_lock_context_struct *)get_ctrl_buffer(SML_TMO_MOVIAL_MAX_BLOB_SIZE);
+    kal_mem_set(pBlob, 0, SML_TMO_MOVIAL_MAX_BLOB_SIZE);
+
+    /* major_version + minor_version + protection_algorithm + lock_operation */
+    pBlob->major_version = pObj[length++];
+    pBlob->minor_version = pObj[length++];
+    pBlob->protection_algorithm = pObj[length++];
+    pBlob->lock_operation = pObj[length++];
+
+    /* imei */
+    kal_mem_cpy(pBlob->imei, &(pObj[length]), SML_TMO_MOVIAL_BLOB_IMEI_SIZE);
+    length += SML_TMO_MOVIAL_BLOB_IMEI_SIZE;
+
+    /* time stamp */
+    kal_mem_cpy(pBlob->time_stamp, &(pObj[length]), SML_TMO_MOVIAL_BLOB_TIME_STAMP_SIZE);
+    length += SML_TMO_MOVIAL_BLOB_TIME_STAMP_SIZE;
+
+    /* Temporary unlock start timer */
+    kal_mem_cpy(pBlob->start_time, &(pObj[length]), SML_TMO_MOVIAL_SIZE_OF_START_TIME);
+    length += SML_TMO_MOVIAL_SIZE_OF_START_TIME;
+
+    /* Temporary unlock duration */
+    kal_mem_cpy(pBlob->unlock_duration, &(pObj[length]), SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION);
+    length += SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION;
+
+    /* length */
+    kal_mem_cpy(pBlob->length, &(pObj[length]), SML_TMO_MOVIAL_BLOB_LENGTH_SIZE);
+    length += SML_TMO_MOVIAL_BLOB_LENGTH_SIZE;
+
+    if (pBlob->protection_algorithm >= SML_TMO_MOVIAL_PROTECTION_SCHEME_SIZE)
+    {
+        *error_cause = SML_TMO_MOVIAL_SLB_ERR_GENERIC;
+        free_ctrl_buffer(pBlob);
+        return NULL;
+    }
+
+    if (sml_tmo_movial_ValidateIMEI(pBlob->imei, KAL_FALSE, source) == KAL_FALSE)
+    {
+        *error_cause = SML_TMO_MOVIAL_SLB_ERR_IMEI_MISMATCH;
+        free_ctrl_buffer(pBlob);
+        return NULL;
+    }
+
+    if (sml_tmo_movial_ValidateTimeStamp(pBlob->time_stamp, source) == KAL_FALSE)
+    {
+        *error_cause = SML_TMO_MOVIAL_SLB_ERR_GENERIC;
+        free_ctrl_buffer(pBlob);
+        return NULL;
+    }
+
+    idx = length;
+
+    for (cat_idx = SML_TMO_MOVIAL_CAT_N ; cat_idx < SML_TMO_MOVIAL_CAT_SIZE ; cat_idx++)
+    {
+        pBlob->cat[cat_idx].change_flag = pObj[idx++];
+
+        /* iteration_count, salt, hck */
+        kal_mem_cpy(pBlob->key[cat_idx].iteration_count, &(pObj[idx]), SML_TMO_MOVIAL_BLOB_ITERATION_COUNT_SIZE);
+        idx += SML_TMO_MOVIAL_BLOB_ITERATION_COUNT_SIZE;
+
+        kal_mem_cpy(pBlob->key[cat_idx].salt, &(pObj[idx]), SML_TMO_MOVIAL_BLOB_SALT_SIZE);
+        idx += SML_TMO_MOVIAL_BLOB_SALT_SIZE;
+
+        kal_mem_cpy(pBlob->key[cat_idx].hck, &(pObj[idx]), SML_TMO_MOVIAL_BLOB_HCK_SIZE);
+        idx += SML_TMO_MOVIAL_BLOB_HCK_SIZE;
+
+        /* check m,n,p */
+        if (pObj[idx] > 0)
+        {
+            switch (cat_idx)
+            {
+                case SML_TMO_MOVIAL_CAT_N:
+                    sizeM = pObj[idx] * SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_N;
+                    if (sizeM > SML_TMO_MOVIAL_BLOB_CAT_N_SIZE)
+                    {
+                        *error_cause = SML_TMO_MOVIAL_SLB_ERR_GENERIC;
+                        free_ctrl_buffer(pBlob);
+                        return NULL;
+                    }
+
+                    pBlob->cat[cat_idx].num = pObj[idx++];
+                    kal_mem_cpy(pBlob->code_cat_n, &(pObj[idx]), sizeM);
+                    idx += sizeM;
+                    break;
+
+                case SML_TMO_MOVIAL_CAT_NS:
+                    sizeN = pObj[idx] * SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_NS;
+                    if (sizeN > SML_TMO_MOVIAL_BLOB_CAT_NS_SIZE)
+                    {
+                        *error_cause = SML_TMO_MOVIAL_SLB_ERR_GENERIC;
+                        free_ctrl_buffer(pBlob);
+                        return NULL;
+                    }
+
+                    pBlob->cat[cat_idx].num = pObj[idx++];
+                    kal_mem_cpy(pBlob->code_cat_ns, &(pObj[idx]), sizeN);
+                    idx += sizeN;
+                    break;
+
+                case SML_TMO_MOVIAL_CAT_SP:
+                    sizeP = pObj[idx] * SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_SP;
+                    if (sizeP > SML_TMO_MOVIAL_BLOB_CAT_SP_SIZE)
+                    {
+                        *error_cause = SML_TMO_MOVIAL_SLB_ERR_GENERIC;
+                        free_ctrl_buffer(pBlob);
+                        return NULL;
+                    }
+
+                    pBlob->cat[cat_idx].num = pObj[idx++];
+                    kal_mem_cpy(pBlob->code_cat_sp, &(pObj[idx]), sizeP);
+                    idx += sizeP;
+                    break;
+
+                default:
+                    break;
+            }
+        }
+        else /* m/n/p = 0 */
+        {
+            /* memset ensures pBlob->cat[cat_idx].num set to 0 */
+            idx += 1;
+        }
+    }
+
+    if (sml_tmo_movial_ValidateConfigData(pBlob) == KAL_FALSE)
+    {
+        *error_cause = SML_TMO_MOVIAL_SLB_ERR_GENERIC;
+        free_ctrl_buffer(pBlob);
+        return NULL;
+    }
+
+    kal_mem_cpy(pBlob->signature, &(pObj[idx]), SML_TMO_MOVIAL_BLOB_SIZE_OF_SIGNATURE);
+
+    sml_Dump("constructed blob", (kal_uint8 *)pBlob, SML_TMO_MOVIAL_MAX_BLOB_SIZE);
+
+    return (kal_uint8 *)pBlob;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_movial_ConstructSmlBlob
+ * DESCRIPTION
+ *  This function constructs BLOB for NVRAM updating based on change_flag param
+ *     change_flag == 0  => get cat / key / lock data from NVRAM
+ *     change_flag == 1  => get cat / key / lock data from pObj
+ * PARAMETERS
+ *  IN          *pObj  (constructed blob data)
+ *  OUT         pLen
+ * RETURN
+ *  kal_uint8 * construct data 
+ * GLOBALS AFFECTED
+ *  SMLTMMOBJ
+ *******************************************************************************/
+kal_uint8 *sml_tmo_movial_ConstructSmlBlob(sml_tmo_movial_sim_lock_context_struct *pObj, kal_uint8 source)
+{
+    sml_tmo_movial_sim_lock_context_struct *psmlBlob;
+    kal_uint8 cat_idx = 0;
+    kal_uint16 obj_len = 0;
+    nvram_ef_sml_tmo_movial_sim_lock_obj_struct *p = &pSMLTMMg[source];
+    sml_tmo_movial_blob_meta_struct *cat = NULL;
+    sml_tmo_movial_blob_key_struct *key = NULL;
+    kal_uint8 *pdata = NULL;
+
+    psmlBlob = (sml_tmo_movial_sim_lock_context_struct *)get_ctrl_buffer(SML_TMO_MOVIAL_MAX_BLOB_SIZE);
+    kal_mem_set(psmlBlob, 0, SML_TMO_MOVIAL_MAX_BLOB_SIZE);
+
+    /* major_version + minor_version + protection_algorithm + lock_operation */
+    psmlBlob->major_version = pObj->major_version;
+    psmlBlob->minor_version= pObj->minor_version;
+    psmlBlob->protection_algorithm= pObj->protection_algorithm;
+    psmlBlob->lock_operation= pObj->lock_operation;
+
+    /* imei */
+    kal_mem_cpy(psmlBlob->imei, pObj->imei, SML_TMO_MOVIAL_BLOB_IMEI_SIZE);
+
+    /* time stamp */
+    kal_mem_cpy(psmlBlob->time_stamp, pObj->time_stamp, SML_TMO_MOVIAL_BLOB_TIME_STAMP_SIZE);
+
+    /* Temporary unlock start time */
+    kal_mem_cpy(psmlBlob->start_time, pObj->start_time, SML_TMO_MOVIAL_SIZE_OF_START_TIME);
+
+    /* Temporary unlock duration */
+    kal_mem_cpy(psmlBlob->unlock_duration, pObj->unlock_duration, SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION);
+
+    /* length */
+    kal_mem_cpy(psmlBlob->length, pObj->length, SML_TMO_MOVIAL_BLOB_LENGTH_SIZE);
+
+    for (cat_idx = SML_TMO_MOVIAL_CAT_N ; cat_idx < SML_TMO_MOVIAL_CAT_SIZE ; cat_idx++)
+    {
+        /* existing configuration should be used if change_flag=0 */
+        if (pObj->cat[cat_idx].change_flag == 0 || SML_TMO_MOVIAL_STATE_TEMPORARY_UNLOCK == psmlBlob->lock_operation)
+        {
+            cat = (sml_tmo_movial_blob_meta_struct *) (*p->getItem)(cat_idx, SML_TMO_MOVIAL_CAT_META, &obj_len, source);
+            key = (sml_tmo_movial_blob_key_struct *) (*p->getItem)(cat_idx, SML_TMO_MOVIAL_CAT_KEY, &obj_len, source);
+            pdata = (kal_uint8 *) (*p->getItem)(cat_idx, SML_TMO_MOVIAL_CAT_CODE, &obj_len, source);
+        }
+        else
+        {
+            cat = &(pObj->cat[cat_idx]);
+            key = &(pObj->key[cat_idx]);
+
+            switch (cat_idx)
+            {
+                case SML_TMO_MOVIAL_CAT_N:
+                    pdata = pObj->code_cat_n;
+                    break;
+
+                case SML_TMO_MOVIAL_CAT_NS:
+                    pdata = pObj->code_cat_ns;
+                    break;
+
+                case SML_TMO_MOVIAL_CAT_SP:
+                    pdata = pObj->code_cat_sp;
+                    break;
+
+                default:
+                    break;
+            }
+        }
+
+        kal_mem_cpy(&(psmlBlob->cat[cat_idx]), cat, sizeof(sml_tmo_movial_blob_meta_struct));
+        kal_mem_cpy(&(psmlBlob->key[cat_idx]), key, sizeof(sml_tmo_movial_blob_key_struct));
+
+        switch (cat_idx)
+        {
+            case SML_TMO_MOVIAL_CAT_N:
+                kal_mem_cpy(psmlBlob->code_cat_n, pdata, SML_TMO_MOVIAL_BLOB_CAT_N_SIZE);
+                break;
+
+            case SML_TMO_MOVIAL_CAT_NS:
+                kal_mem_cpy(psmlBlob->code_cat_ns, pdata, SML_TMO_MOVIAL_BLOB_CAT_NS_SIZE);
+                break;
+
+            case SML_TMO_MOVIAL_CAT_SP:
+                kal_mem_cpy(psmlBlob->code_cat_sp, pdata, SML_TMO_MOVIAL_BLOB_CAT_SP_SIZE);
+                break;
+
+            default:
+                break;
+        }
+    }
+
+    kal_mem_cpy(psmlBlob->signature, pObj->signature, SML_TMO_MOVIAL_BLOB_SIZE_OF_SIGNATURE);
+
+    sml_Dump("constructed sml blob", (kal_uint8 *)psmlBlob, SML_TMO_MOVIAL_MAX_BLOB_SIZE);
+
+    return (kal_uint8 *)psmlBlob;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_movial_ReconstructBlob
+ * DESCRIPTION
+ *  This function restores the original message raw data from constructed internal blob structure
+ *  (used for signature verification)
+ * PARAMETERS
+ *  IN          *pObj  (constructed blob data)
+ *  OUT         pLen, length of returned raw data
+ *  OUT         error_cause
+ * RETURN
+ *  kal_uint8 * raw data
+ * GLOBALS AFFECTED
+ *  N/A
+ *******************************************************************************/
+kal_uint8 *sml_tmo_movial_ReconstructBlob(sml_tmo_movial_sim_lock_context_struct *pObj, kal_uint32 *pLen, kal_uint8 *error_cause)
+{
+    kal_uint8 *pData = NULL;
+    kal_uint32 blob_len, data_len;
+    kal_uint32 sizeM, sizeN, sizeP;
+    kal_uint32 len;
+    kal_uint8 cat_idx;
+
+    blob_len = sml_GetCount(&(pObj->length[0]));
+    sizeM = pObj->cat[SML_TMO_MOVIAL_CAT_N].num * SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_N;
+    sizeN = pObj->cat[SML_TMO_MOVIAL_CAT_NS].num * SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_NS;
+    sizeP = pObj->cat[SML_TMO_MOVIAL_CAT_SP].num * SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_SP;
+
+    /* RSA-PSS scheme */
+    if (pObj->protection_algorithm == 1)
+    {
+        data_len = blob_len - SML_TMO_MOVIAL_BLOB_SIZE_OF_SIGNATURE;
+    }
+    else
+    {
+        *error_cause = SML_TMO_MOVIAL_SLB_ERR_GENERIC;
+        return NULL;
+    }
+
+    pData = (kal_uint8 *)get_ctrl_buffer(data_len);
+
+    if (NULL == pData)
+    {
+        *error_cause = SML_TMO_MOVIAL_SLB_ERR_GENERIC;
+        return NULL;
+    }
+    /* major_version + minor_version + protection_algorithm + lock_operation */
+    len = 0;
+
+    pData[len++] = pObj->major_version;
+    pData[len++] = pObj->minor_version;
+    pData[len++] = pObj->protection_algorithm;
+    pData[len++] = pObj->lock_operation;
+
+    /* imei */
+    kal_mem_cpy((pData+len), pObj->imei, SML_TMO_MOVIAL_BLOB_IMEI_SIZE);
+    len += SML_TMO_MOVIAL_BLOB_IMEI_SIZE;
+
+    /* time stamp */
+    kal_mem_cpy((pData+len), pObj->time_stamp, SML_TMO_MOVIAL_BLOB_TIME_STAMP_SIZE);
+    len += SML_TMO_MOVIAL_BLOB_TIME_STAMP_SIZE;
+
+    /* temporary unlock start time */
+    kal_mem_cpy((pData+len), pObj->start_time, SML_TMO_MOVIAL_SIZE_OF_START_TIME);
+    len += SML_TMO_MOVIAL_SIZE_OF_START_TIME;
+
+    /* temporary unlock duration */
+    kal_mem_cpy((pData+len), pObj->unlock_duration, SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION);
+    len += SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION;
+
+    /* length */
+    kal_mem_cpy((pData+len), pObj->length, SML_TMO_MOVIAL_BLOB_LENGTH_SIZE);
+    len += SML_TMO_MOVIAL_BLOB_LENGTH_SIZE;
+
+    for (cat_idx = SML_TMO_MOVIAL_CAT_N ; cat_idx < SML_TMO_MOVIAL_CAT_SIZE; cat_idx++)
+    {
+        pData[len++] = pObj->cat[cat_idx].change_flag;
+
+        kal_mem_cpy((pData+len), (kal_uint8 *)&(pObj->key[cat_idx].iteration_count[0]), SML_TMO_MOVIAL_BLOB_ITERATION_COUNT_SIZE);
+        len += SML_TMO_MOVIAL_BLOB_ITERATION_COUNT_SIZE;
+
+        kal_mem_cpy((pData+len), (kal_uint8 *)&(pObj->key[cat_idx].salt[0]), SML_TMO_MOVIAL_BLOB_SALT_SIZE);
+        len += SML_TMO_MOVIAL_BLOB_SALT_SIZE;
+
+        kal_mem_cpy((pData+len), (kal_uint8 *)&(pObj->key[cat_idx].hck[0]), SML_TMO_MOVIAL_BLOB_HCK_SIZE);
+        len += SML_TMO_MOVIAL_BLOB_HCK_SIZE;
+
+        pData[len++] = pObj->cat[cat_idx].num;
+
+        switch (cat_idx)
+        {
+            case SML_TMO_MOVIAL_CAT_N:
+                kal_mem_cpy((pData+len), (kal_uint8 *)&(pObj->code_cat_n[0]), sizeM);
+                len += sizeM;
+                break;
+
+            case SML_TMO_MOVIAL_CAT_NS:
+                kal_mem_cpy((pData+len), (kal_uint8 *)&(pObj->code_cat_ns[0]), sizeN);
+                len += sizeN;
+                break;
+
+            case SML_TMO_MOVIAL_CAT_SP:
+                kal_mem_cpy((pData+len), (kal_uint8 *)&(pObj->code_cat_sp[0]), sizeP);
+                len += sizeP;
+                break;
+
+            default:
+                break;
+        }
+    }
+
+    *pLen = len;
+    sml_Dump("re-construct blob", pData, len);
+
+    return pData;
+}
+
+kal_bool sml_tmo_movial_checkValidity(void *pObj, kal_uint8 source, kal_uint8 *error_cause)
+{
+    sml_tmo_movial_sim_lock_context_struct *pSmlObj = (sml_tmo_movial_sim_lock_context_struct *) pObj;
+    kal_uint8 *pData = NULL;
+    kal_bool result = KAL_FALSE;
+    kal_uint32 data_len;
+
+    if (sml_tmo_movial_ValidateIMEI(pSmlObj->imei, KAL_FALSE, source) == KAL_FALSE)
+    {
+        *error_cause = SML_TMO_MOVIAL_SLB_ERR_IMEI_MISMATCH;
+        return KAL_FALSE;
+    }
+
+    if (pSmlObj == NULL)
+    {
+        *error_cause = SML_TMO_MOVIAL_SLB_ERR_GENERIC;
+        return KAL_FALSE;
+    }
+
+#ifdef UNIT_TEST
+    *error_cause = SML_TMO_MOVIAL_SLB_ERR_SUCCESS;
+    return KAL_TRUE;
+#endif /* UNIT_TEST */
+
+    pData = sml_tmo_movial_ReconstructBlob(pSmlObj, &data_len, error_cause);
+
+    if (pData == NULL)
+    {
+        *error_cause = SML_TMO_MOVIAL_SLB_ERR_GENERIC;
+        return KAL_FALSE;
+    }
+
+    if (pSmlObj->protection_algorithm == SML_TMO_MOVIAL_PROTECTION_SCHEME_RSA2048)
+    {
+        TYPE_CUST_CHL_KEY key_handle = CUST_TM_PUB_KEY2;
+        t_cust_chl_asym_key key;
+        kal_uint32 ret;
+        kal_uint8 key_index = sbp_query_md_feature_data_by_ps(SBP_TMO_MOVIAL_SELECT_KEY_SET, source);
+
+		custom_tmo_movial_rsu_get_pub_key_handle(key_index, NULL, &key_handle);
+		ret = CustCHL_Get_Asym_Key(key_handle, &key);
+        if (ret == CUST_CHL_ERROR_NONE)
+        {
+            ret = CustCHL_Verify_PSS_Signature(CUST_CHL_ALG_RSA_PSS_SHA256, pData, data_len,
+                                               &pSmlObj->signature[0], &key);
+
+            MD_TRC_INFO_SMU_RSA_PSS_VERIFY_SIGNATURE_CUST(ret);
+        }
+        result = (ret == CUST_CHL_ERROR_NONE) ? KAL_TRUE : KAL_FALSE;
+    }
+    else
+    {
+        result = KAL_FALSE;
+    }
+
+    if (KAL_TRUE == result)
+    {
+        *error_cause = SML_TMO_MOVIAL_SLB_ERR_SUCCESS;
+    }
+    else
+    {
+        *error_cause = SML_TMO_MOVIAL_SLB_ERR_VERIFY_FAIL;
+    }
+
+    free_ctrl_buffer(pData);
+
+    return result;
+}
+
+void sml_tmo_movial_Load(void *pLid, kal_uint8 source)
+{
+    nvram_ef_sml_tmo_movial_sim_lock_obj_struct *p = &pSMLTMMg[source];
+
+    /* Clean the old ones */
+    (*p->destory)(source);
+
+    /* Load the new one */
+    (*p->give)(pLid, source);
+
+}
+
+void sml_tmo_movial_FirstLoad(void *pLid, kal_uint8 source)
+{
+    nvram_ef_sml_tmo_movial_sim_lock_obj_struct *p = &pSMLTMMg[source];
+    nvram_sml_tmo_movial_sim_lock_context_struct *pSmlObj = NULL;
+#ifdef __TMO_RSU_OTP__
+    kal_bool is_default_blob = KAL_FALSE;
+#endif /* __TMO_RSU_OTP__ */
+
+    pSmlObj = (nvram_sml_tmo_movial_sim_lock_context_struct *) pLid;
+    // Allow UE default IMEI (e.g. under factory procedure) in validate check
+    if (KAL_FALSE == sml_tmo_movial_ValidateIMEI(pSmlObj->imei, KAL_TRUE, source))
+    {
+    #ifdef __TMO_RSU_OTP__
+        is_default_blob = custom_check_is_default_tmo_blob(&(pSmlObj->imei[0]));
+        if (KAL_TRUE == is_default_blob)
+        {
+            kal_uint8 imei_bcd[8+1] = {0};
+            kal_uint8 rec_id = 1 + l4c_gemini_get_actual_sim_id(source);
+            
+            if (nvram_get_imei_value(8, imei_bcd, rec_id) == KAL_TRUE)
+            {
+                kal_uint8 imei_ascii[16 + 1] = {0};
+                imei_bcd[7] = imei_bcd[7] & 0x0f;
+                imei_bcd[8] = 0xff;
+                convert_to_digit((kal_uint8 *)imei_bcd, imei_ascii);
+                MD_TRC_INFO_SML_TMO_RSU_COPY_IMEI();
+                kal_mem_cpy(&(pSmlObj->imei[0]), imei_ascii, SML_TMO_MOVIAL_BLOB_IMEI_SIZE);
+            }
+        }
+        else
+    #endif /* __TMO_RSU_OTP__ */
+        {
+            /* This can hit when BLOB/device IMEI is corrupted or hacked,
+             * hence ASSERT
+             */
+            MD_TRC_WARNING_SML_CHECK_IMEI_FAILED();
+            // ASSERT(0);
+        }
+    }
+    
+	/* Clean the old ones */
+	(*p->destory)(source);
+
+	/* Load the new one */
+	(*p->give)((void *)pSmlObj, source);
+    
+#ifdef __TMO_RSU_OTP__
+    if (KAL_TRUE == is_default_blob)
+    {
+        smu_nvram_write(NVRAM_EF_L4_SML_TMO_MOVIAL_SIM_LOCK_LID,        
+                          SML_TMO_MOVIAL_NVRAM_ACCESS_ID_UPDATE_SLB, KAL_FALSE);
+    }
+#endif /* __TMO_RSU_OTP__ */
+
+    return;
+}
+
+
+/*******************************************************************************
+ * FUNCTION  
+ *  sml_tmo_movial_Save
+ * DESCRIPTION
+ *  This function saves the SML obj to NVRAM LID
+ * PARAMETERS
+ *  OUT          pLid
+ * RETURN
+ *  kal_uint16  Obj size
+ * GLOBALS AFFECTED
+ *  SMLTMMOBJ
+ *******************************************************************************/ 
+kal_uint16 sml_tmo_movial_Save(void *pLid, kal_uint8 source)
+{
+    nvram_ef_sml_tmo_movial_sim_lock_obj_struct *p = &pSMLTMMg[source];
+
+    kal_uint16 length = sizeof(sml_tmo_movial_sim_lock_context_struct);
+
+    (*p->take)(pLid, source);
+
+    return length;
+}
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_movial_CheckTempUnlock
+ * DESCRIPTION
+ *  This method is to check if temporary unlock expires
+ * PARAMETERS
+ *  IN          source
+ * RETURN
+ *  TRUE        Temporary unlock expires
+ *  FALSE       Temporary unlock does not expire
+ * GLOBALS AFFECTED
+ *  SMLTMMOBJ
+ *******************************************************************************/
+kal_bool sml_tmo_movial_CheckTempUnlock(kal_uint8 source)
+{
+    nvram_ef_sml_tmo_movial_sim_lock_obj_struct *p = &pSMLTMMg[source];
+    kal_uint8 *lock_operation, *unlock_duration;
+    kal_uint16 length;
+    kal_uint32 duration_seconds = 0;
+    kal_uint8 i;
+
+    lock_operation = (kal_uint8 *)(*p->getItem)(SML_TMO_MOVIAL_CAT_NULL, SML_TMO_MOVIAL_CAT_LOCK_OPERATION, &length, source);
+    unlock_duration = (kal_uint8 *)(*p->getItem)(SML_TMO_MOVIAL_CAT_NULL, SML_TMO_MOVIAL_CAT_UNLOCK_DURATION, &length, source);
+
+    for (i = 0; i < SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION-1; i++)
+    {
+        duration_seconds += unlock_duration[i];
+        duration_seconds = (duration_seconds << 8);
+    }
+    duration_seconds += unlock_duration[SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION-1];
+
+    MD_TRC_INFO_SML_CHECK_TEMP_UNLOCK(sml_tmo_movial_seconds_to_expire, duration_seconds);
+
+    if ((sml_tmo_movial_seconds_to_expire + (SML_TMO_MOVIAL_TIMEOUT_PERIODIC_CHECK/KAL_TICKS_1_SEC)) >= duration_seconds)
+    {
+        *lock_operation = SML_TMO_MOVIAL_STATE_PERMANENT_LOCK;
+        // Should reset SLB/NVRAM in following action
+        return KAL_TRUE;
+    }
+    else
+    {
+        sml_tmo_movial_seconds_to_expire += (SML_TMO_MOVIAL_TIMEOUT_PERIODIC_CHECK/KAL_TICKS_1_SEC);
+        (*p->putItem)(SML_TMO_MOVIAL_CAT_NULL, SML_TMO_MOVIAL_CAT_UNLOCK_TIME_COUNTER, &sml_tmo_movial_seconds_to_expire, &length, source);
+        // Should write back to NVRAM in following action
+        return KAL_FALSE;
+    }
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_movial_Catcode
+ * DESCRIPTION
+ *  This function is used to compose the code of each category
+ * PARAMETERS
+ *  IN          cat
+ *  IN          *imsi
+ *  IN          *gid1
+ *  IN          mnc_len
+ *  OUT          *code
+ * RETURN
+ *  kal_uint8   code length
+ * GLOBALS AFFECTED
+ *  NONE
+ *******************************************************************************/
+kal_uint8 sml_tmo_movial_Catcode( sml_tmo_movial_cat_enum cat,
+                                  kal_uint8 *imsi,
+                                  kal_uint8 *gid1,
+                                  kal_uint8 mnc_len,
+                                  kal_uint8 *code)
+{
+    if(mnc_len == 3)
+    {
+        code[0] = ((imsi[1] & 0xF0) >> 4) + RMMI_CHAR_0;
+        code[1] = (imsi[2] & 0x0F) + RMMI_CHAR_0;
+        code[2] = ((imsi[2] & 0xF0) >> 4) + RMMI_CHAR_0;
+        code[3] = (imsi[3] & 0x0F) + RMMI_CHAR_0;
+        code[4] = ((imsi[3] & 0xF0) >> 4) + RMMI_CHAR_0;
+        code[5] = (imsi[4] & 0x0F) + RMMI_CHAR_0;
+        code[6] = ((imsi[4] & 0xF0) >> 4) + RMMI_CHAR_0;
+        code[7] = (imsi[5] & 0x0F) + RMMI_CHAR_0;
+    }
+    else
+    {
+        code[0] = ((imsi[1] & 0xF0) >> 4) + RMMI_CHAR_0;
+        code[1] = (imsi[2] & 0x0F) + RMMI_CHAR_0;
+        code[2] = ((imsi[2] & 0xF0) >> 4) + RMMI_CHAR_0;
+        code[3] = (imsi[3] & 0x0F) + RMMI_CHAR_0;
+        code[4] = ((imsi[3] & 0xF0) >> 4) + RMMI_CHAR_0;
+        code[5] = RMMI_CHAR_F; // MNC length is 2, so the 3rd digit will be 'F'
+        code[6] = (imsi[4] & 0x0F) + RMMI_CHAR_0;
+        code[7] = ((imsi[4] & 0xF0) >> 4) + RMMI_CHAR_0;
+    }
+
+    switch(cat)
+    {
+        case SML_TMO_MOVIAL_CAT_N:
+            return SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_N;
+            break;
+
+        case SML_TMO_MOVIAL_CAT_NS:
+            return SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_NS;
+            break;
+
+        case SML_TMO_MOVIAL_CAT_SP:
+            if(gid1 != NULL)
+            {
+                code[6] = gid1[0]; // + RMMI_CHAR_0
+                return SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_SP;
+            }
+            break;
+
+        default:
+            break;
+    }
+
+    return 0;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_movial_GetCode
+ * DESCRIPTION
+ *  This function is used to compose the code of each category  whether
+ *  mnc length is 2 or 3
+ * PARAMETERS
+ *  cat         [IN]    category of the SIM-ME-Lock
+ *  imsi        [IN]    imsi of the code source 
+ *  gid1        [IN]    gid1 of the code source
+ *  sim_mnc_len [IN]    the mnc length decided by SIM
+ *  pdata       [IN]    the saved code for comparing
+ *  code        [OUT]   the composed code according to all input parameters
+ *
+ * RETURN
+ *  kal_uint8
+ * GLOBALS AFFECTED
+ *  SMLTMMOBJ
+ *******************************************************************************/
+kal_uint8 sml_tmo_movial_GetCode( sml_tmo_movial_cat_enum cat,
+                                  kal_uint8 * imsi,
+                                  kal_uint8 * gid1,
+                                  kal_uint8 sim_mnc_len,
+                                  kal_uint8 * pdata,
+                                  kal_uint8 * code)
+{
+    kal_uint8 mnc_len=0;
+
+    if (SML_MNC_LENGTH_NEST == 1)
+    {
+        mnc_len = sim_mnc_len;
+    }
+    else
+    {
+        if((*(pdata+5)) == 0x46 /* 'F' */)
+        {
+            mnc_len = 2;
+        }
+        else
+        {
+            mnc_len = 3;
+        }
+    }
+
+    return sml_tmo_movial_Catcode(cat, imsi, gid1, mnc_len, code);
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_movial_Check
+ * DESCRIPTION
+ *  This function is used to check if the code is in the Pass list
+ * PARAMETERS
+ *  IN          cat
+ *  IN          *imsi
+ *  IN          *gid1
+ *  IN          sim_mnc_len
+ *  IN          source
+ * RETURN
+ *  kal_bool
+ * GLOBALS AFFECTED
+ *  SMLTMMOBJ
+ *******************************************************************************/
+kal_bool sml_tmo_movial_Check( sml_tmo_movial_cat_enum cat,     // category
+                               kal_uint8 *imsi,                 // 9 bytes array, read from SIM, mandatory file
+                               kal_uint8 *gid1,                 // 20 bytes array, read from SIM, NULL means gid1 invalid(file not exist)
+                               kal_uint8 sim_mnc_len,           // MNC length, read from SIM
+                               kal_uint8 source)                // 0:SIM1, 1:SIM2
+{
+    nvram_ef_sml_tmo_movial_sim_lock_obj_struct *p = &pSMLTMMg[source];
+    sml_tmo_movial_blob_meta_struct *meta = NULL;
+    kal_uint8 *pdata = NULL;
+    kal_uint8 idx = 0;
+    kal_uint16 length = 0, offset = 0;
+    kal_bool result = KAL_FALSE;
+    kal_uint8 code_len = 0;
+    kal_uint8 code[10] = {0x00};
+    kal_uint8 size_of_cat = 0;
+
+    meta = (sml_tmo_movial_blob_meta_struct *) (*p->getItem)(cat, SML_TMO_MOVIAL_CAT_META, &length, source);
+    pdata = (kal_uint8 *) (*p->getItem)(cat, SML_TMO_MOVIAL_CAT_CODE, &length, source);
+
+
+    if ((meta->cat_lock == SML_TMO_MOVIAL_CAT_UNLOCKED) || (meta->num == 0))
+    {
+         return KAL_TRUE;
+    }
+
+    switch(cat)
+    {
+        case SML_TMO_MOVIAL_CAT_N:
+        {
+            size_of_cat = SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_N;
+            break;
+        }
+        case SML_TMO_MOVIAL_CAT_NS:
+        {
+            size_of_cat = SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_NS;
+            break;
+        }
+        case SML_TMO_MOVIAL_CAT_SP:
+        {
+            size_of_cat = SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_SP;
+            break;
+        }
+        default:
+            break;
+    }
+
+    for (idx = 0; idx < meta->num; idx++)
+    {
+        offset = idx * size_of_cat;
+        code_len = sml_tmo_movial_GetCode(cat,
+                                          imsi,
+                                          gid1,
+                                          sim_mnc_len,
+                                          (pdata+offset),
+                                          code);
+
+        if (size_of_cat == code_len)
+        {
+            if (kal_mem_cmp(code, (pdata+offset), code_len) == 0)
+            {
+                result = KAL_TRUE;
+                break;
+            }
+        }
+    }
+
+    return result;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_movial_UpdateNwTimeAndCheckTempLock
+ * DESCRIPTION
+ *  This method is to update newtork time and check if temporary lock expires
+ * PARAMETERS
+ *  IN          source
+ *  IN          nw_time_zone
+ *  IN          nw_time
+ * RETURN
+ *  TRUE        Temporary unlock expires
+ *  FALSE       Temporary unlock does not expire
+ * GLOBALS AFFECTED
+ *  SMLOBJ
+ *******************************************************************************/
+kal_bool sml_tmo_movial_UpdateNwTimeAndCheckTempLock(kal_uint8 source, kal_uint8 nw_time_zone, nw_time_zone_time_struct *nw_time)
+{
+    nvram_ef_sml_tmo_movial_sim_lock_obj_struct *p = &pSMLTMMg[source];
+    kal_uint8 *start_time, *unlock_duration;
+    kal_uint8 *lock_operation = NULL;
+    kal_uint16 length;
+    kal_uint32 current_seconds = 0;
+    kal_uint64 start_seconds = 0;
+    kal_uint32 start_seconds_u32 = 0;
+    kal_uint32 duration_seconds = 0;
+    kal_uint8 i;
+
+    lock_operation = (kal_uint8 *)(*p->getItem)(SML_TMO_MOVIAL_CAT_NULL, SML_TMO_MOVIAL_CAT_LOCK_OPERATION, &length, source);
+    start_time = (kal_uint8 *)(*p->getItem)(SML_TMO_MOVIAL_CAT_NULL, SML_TMO_MOVIAL_CAT_START_TIME, &length, source);
+    unlock_duration = (kal_uint8 *)(*p->getItem)(SML_TMO_MOVIAL_CAT_NULL, SML_TMO_MOVIAL_CAT_UNLOCK_DURATION, &length, source);
+
+    if (*lock_operation != SML_TMO_MOVIAL_STATE_TEMPORARY_UNLOCK)
+    {
+        return KAL_FALSE;
+    }
+
+    /* calculate start time and duration in seconds */
+    start_seconds = 0;
+    for (i = 0; i < SML_TMO_MOVIAL_SIZE_OF_START_TIME-1; i++)
+    {
+        start_seconds += start_time[i];
+        start_seconds = (start_seconds << 8);
+    }
+    start_seconds += start_time[SML_TMO_MOVIAL_SIZE_OF_START_TIME-1];
+    start_seconds /= 1000;    /* from milliseconds to seconds */
+
+    start_seconds_u32 = (kal_uint32)start_seconds;
+
+    duration_seconds = 0;
+    for (i = 0; i < SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION-1; i++)
+    {
+        duration_seconds += unlock_duration[i];
+        duration_seconds = (duration_seconds << 8);
+    }
+    duration_seconds += unlock_duration[SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION-1];
+
+    /* calculate current time in seconds */
+    current_seconds = sml_rsu_nwTimeToSeconds(nw_time_zone, nw_time);
+
+    MD_TRC_INFO_SML_TEMP_UNLOCK_TIME(start_seconds_u32, duration_seconds, current_seconds);
+
+    if (current_seconds >= (start_seconds_u32 + duration_seconds))
+    {
+        MD_TRC_INFO_SML_NW_TIME_EXPIRED();
+        return KAL_TRUE;
+    }
+    else
+    {
+        /* update unlock time for power off accuracy: start ---> unlock time ---> NITZ ---> power off/on ---> end */
+        sml_tmo_movial_seconds_to_expire = current_seconds - start_seconds_u32;
+        (*p->putItem)(SML_TMO_MOVIAL_CAT_NULL, SML_TMO_MOVIAL_CAT_UNLOCK_TIME_COUNTER, &sml_tmo_movial_seconds_to_expire, &length, source);
+        smu_nvram_write(NVRAM_EF_L4_SML_TMO_MOVIAL_SIM_LOCK_LID, SML_TMO_MOVIAL_NVRAM_ACCESS_ID_UNLOCK_EXPIRE, KAL_FALSE);
+
+        return KAL_FALSE;
+    }
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_movial_Verify
+ * DESCRIPTION
+ *  This function is used to verify the SML lock keys
+ * PARAMETERS
+ *  void
+ * RETURN
+ *  kal_bool    result
+ * GLOBALS AFFECTED
+ *  SMLTMMOBJ
+ *******************************************************************************/
+kal_bool sml_tmo_movial_Verify(sml_tmo_movial_cat_enum cat,
+                               kal_uint8 * key,
+                               kal_uint8 len,
+                               kal_uint8 source)
+{
+    nvram_ef_sml_tmo_movial_sim_lock_obj_struct *p = &pSMLTMMg[source];
+    sml_tmo_movial_blob_key_struct *catkey = NULL;
+    sml_tmo_movial_blob_meta_struct *meta = NULL;
+    kal_bool result = KAL_FALSE;
+    kal_uint16 length = 0;
+    kal_uint16 plength = 0;
+    kal_uint8 i = 0;
+    kal_uint32 blob_iter_count = 0;
+
+    catkey = (sml_tmo_movial_blob_key_struct *) (*p->getItem)(cat, SML_TMO_MOVIAL_CAT_KEY, &length, source);
+    meta = (sml_tmo_movial_blob_meta_struct *) (*p->getItem)(cat, SML_TMO_MOVIAL_CAT_META, &plength, source);
+    
+    for (i = 0; i < SML_TMO_MOVIAL_BLOB_ITERATION_COUNT_SIZE-1; i++)
+    {
+        blob_iter_count += catkey->iteration_count[i];
+        blob_iter_count = (blob_iter_count << 8);
+    }
+    blob_iter_count += catkey->iteration_count[SML_TMO_MOVIAL_BLOB_ITERATION_COUNT_SIZE-1];
+
+    if (blob_iter_count != 0)    /* blob has valid key data */
+    {
+        kal_uint32 verify_result = 0;
+
+        verify_result = cust_sec_hck_verify(TYPE_HCK_PBKDF2_HMAC_SHA256_SALT128,
+                                            (kal_char *)key, (kal_uint32)len,
+                                            catkey->salt,
+                                            blob_iter_count,
+                                            catkey->hck);
+
+        if (verify_result == ERR_SEC_CHECK_HCK_SUCCESS)
+        {
+            result = KAL_TRUE;
+        }
+    }
+
+    if (result == KAL_TRUE)
+    {
+        MD_TRC_INFO_SML_KEY_VERIFY_PASS_INFO_CUST();
+
+        /* Local unlock success; Unlock device permanently */
+        meta->cat_lock = SML_TMO_MOVIAL_CAT_UNLOCKED;
+        smu_nvram_write(NVRAM_EF_L4_SML_TMO_MOVIAL_SIM_LOCK_LID, SML_TMO_MOVIAL_NVRAM_ACCESS_ID_UPDATE_CAT_LOCK, KAL_FALSE);
+    }
+    else
+    {
+        MD_TRC_INFO_SML_KEY_VERIFY_FAIL_INFO_CUST();
+    }
+
+    return result;
+}
+
+
+kal_uint8 sml_tmo_movial_update_slb(void *blob, kal_uint8 source)
+{
+    kal_uint8 *psmlBlob = NULL;
+    kal_uint8 error_cause = SML_TMO_MOVIAL_SLB_ERR_GENERIC;
+    sml_tmo_movial_sim_lock_context_struct *pBlob = (sml_tmo_movial_sim_lock_context_struct *)blob;
+
+    if (NULL == pBlob)
+    {
+        MD_TRC_INFO_SML_TMO_RSU_EMPTY_BLOB();
+        return SML_TMO_MOVIAL_SLB_ERR_BLOB_TOO_SHORT;
+    }
+
+    if (KAL_FALSE == sml_tmo_movial_checkValidity(pBlob, source, &error_cause))
+    {
+        MD_TRC_INFO_SML_TMO_RSU_BLOB_VALIDITY_FAIL();
+        return error_cause;
+    }
+
+    psmlBlob = sml_tmo_movial_ConstructSmlBlob((sml_tmo_movial_sim_lock_context_struct *)pBlob, source);
+
+    if (NULL != psmlBlob)
+    {
+        sml_tmo_movial_Load(psmlBlob, source);
+        free_ctrl_buffer(psmlBlob);
+        error_cause = SML_TMO_MOVIAL_SLB_ERR_SUCCESS;
+    }
+
+    return error_cause;
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmm_GetLockState
+ * DESCRIPTION
+ *  This method is used to get SLB lock state
+ * PARAMETERS
+ *  OUT       lock state
+ *  IN          source
+ * RETURN
+ *  void
+ * GLOBALS AFFECTED
+ *  none
+ *******************************************************************************/
+void sml_tmm_GetLockState(kal_uint8 *lock_state, kal_uint8 source)
+{
+    nvram_ef_sml_tmo_movial_sim_lock_obj_struct *p = &pSMLTMMg[source];
+    kal_uint16 length;
+    kal_uint8 *slb_state;
+
+    slb_state = (kal_uint8 *)(*p->getItem)(SML_TMO_MOVIAL_CAT_NULL, SML_TMO_MOVIAL_CAT_LOCK_OPERATION, &length, source);
+
+    kal_mem_cpy(lock_state, slb_state, 1);
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmm_GetUnlockTimeLeft
+ * DESCRIPTION
+ *  This method is used to get SLB unlock time left in seconds
+ * PARAMETERS
+ *  IN          source
+ * RETURN
+ *  unlock time left
+ * GLOBALS AFFECTED
+ *  none
+ *******************************************************************************/
+kal_uint32 sml_tmm_GetUnlockTimeLeft(kal_uint8 source)
+{
+    nvram_ef_sml_tmo_movial_sim_lock_obj_struct *p = &pSMLTMMg[source];
+    kal_uint16 length;
+    kal_uint8 *slb_end_time;
+    kal_uint32 duration_seconds = 0;
+    kal_uint8 i;
+
+    slb_end_time = (kal_uint8 *)(*p->getItem)(SML_TMO_MOVIAL_CAT_NULL, SML_TMO_MOVIAL_CAT_UNLOCK_DURATION, &length, source);
+
+    for (i = 0; i < (SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION - 1); i++)
+    {
+        duration_seconds += slb_end_time[i];
+        duration_seconds = (duration_seconds << 8);
+    }
+    duration_seconds += slb_end_time[SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION - 1];
+
+    MD_TRC_INFO_SML_TMO_RSU_GET_UNLOCK_TIME_LEFT(duration_seconds, sml_tmo_movial_seconds_to_expire);
+
+    if (sml_tmo_movial_seconds_to_expire >= duration_seconds)
+    {
+        return 0;
+    }
+    else
+    {
+        return (duration_seconds - sml_tmo_movial_seconds_to_expire);
+    }
+}
+
+
+/*******************************************************************************
+ * FUNCTION
+ *  sml_tmo_movial_ConstructFirstBlob
+ * DESCRIPTION
+ *  This function construct full size Bolb (internal NV structure) from a variant length Blob received from AP
+ * PARAMETERS
+ *  IN          *pObj
+ *  OUT         pLen
+ * RETURN
+ *  kal_uint8 * construct data
+ * GLOBALS AFFECTED
+ *  SMLTMMOBJ
+ *******************************************************************************/
+kal_uint8 *sml_tmo_movial_ConstructFirstBlob(kal_uint8 *pObj, kal_uint16 slb_len, kal_uint8 source)
+{
+    kal_uint16 sizeM, sizeN, sizeP;
+    kal_uint16 length = 0;
+    kal_uint16 idx;
+    sml_tmo_movial_sim_lock_context_struct *pBlob;
+    kal_uint8 cat_idx = 0;
+
+    MD_TRC_FUNC_SML_TMO_MOVIAL_CONSTRUCTFIRSTBLOB();
+
+    pBlob = (sml_tmo_movial_sim_lock_context_struct *)get_ctrl_buffer(SML_TMO_MOVIAL_MAX_BLOB_SIZE);
+    kal_mem_set(pBlob, 0, SML_TMO_MOVIAL_MAX_BLOB_SIZE);
+
+    /* major_version + minor_version + protection_algorithm + lock_operation */
+    pBlob->major_version = pObj[length++];
+    pBlob->minor_version = pObj[length++];
+    pBlob->protection_algorithm = pObj[length++];
+    pBlob->lock_operation = pObj[length++];
+
+    /* imei */
+    kal_mem_cpy(pBlob->imei, &(pObj[length]), SML_TMO_MOVIAL_BLOB_IMEI_SIZE);
+    length += SML_TMO_MOVIAL_BLOB_IMEI_SIZE;
+
+    /* time stamp */
+    kal_mem_cpy(pBlob->time_stamp, &(pObj[length]), SML_TMO_MOVIAL_BLOB_TIME_STAMP_SIZE);
+    length += SML_TMO_MOVIAL_BLOB_TIME_STAMP_SIZE;
+
+    /* Temporary unlock start timer */
+    kal_mem_cpy(pBlob->start_time, &(pObj[length]), SML_TMO_MOVIAL_SIZE_OF_START_TIME);
+    length += SML_TMO_MOVIAL_SIZE_OF_START_TIME;
+
+    /* Temporary unlock duration */
+    kal_mem_cpy(pBlob->unlock_duration, &(pObj[length]), SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION);
+    length += SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION;
+
+    /* length */
+    kal_mem_cpy(pBlob->length, &(pObj[length]), SML_TMO_MOVIAL_BLOB_LENGTH_SIZE);
+    length += SML_TMO_MOVIAL_BLOB_LENGTH_SIZE;
+
+    if (pBlob->protection_algorithm >= SML_TMO_MOVIAL_PROTECTION_SCHEME_SIZE)
+    {
+        free_ctrl_buffer(pBlob);
+        return NULL;
+    }
+
+    if (sml_tmo_movial_ValidateIMEI(pBlob->imei, KAL_FALSE, source) == KAL_FALSE)
+    {
+        MD_TRC_WARNING_SML_CHECK_IMEI_FAILED();
+    }
+
+    idx = length;
+
+    for (cat_idx = SML_TMO_MOVIAL_CAT_N ; cat_idx < SML_TMO_MOVIAL_CAT_SIZE ; cat_idx++)
+    {
+        pBlob->cat[cat_idx].change_flag = pObj[idx++];
+
+        /* iteration_count, salt, hck */
+        kal_mem_cpy(pBlob->key[cat_idx].iteration_count, &(pObj[idx]), SML_TMO_MOVIAL_BLOB_ITERATION_COUNT_SIZE);
+        idx += SML_TMO_MOVIAL_BLOB_ITERATION_COUNT_SIZE;
+        
+        kal_mem_cpy(pBlob->key[cat_idx].salt, &(pObj[idx]), SML_TMO_MOVIAL_BLOB_SALT_SIZE);
+        idx += SML_TMO_MOVIAL_BLOB_SALT_SIZE;
+
+        kal_mem_cpy(pBlob->key[cat_idx].hck, &(pObj[idx]), SML_TMO_MOVIAL_BLOB_HCK_SIZE);
+        idx += SML_TMO_MOVIAL_BLOB_HCK_SIZE;
+
+        /* check m,n,p */
+        if (pObj[idx] > 0)
+        {
+            switch (cat_idx)
+            {
+                case SML_TMO_MOVIAL_CAT_N:
+                    sizeM = pObj[idx] * SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_N;
+                    if (sizeM > SML_TMO_MOVIAL_BLOB_CAT_N_SIZE)
+                    {
+                        free_ctrl_buffer(pBlob);
+                        return NULL;
+                    }
+
+                    pBlob->cat[cat_idx].num = pObj[idx++];
+                    kal_mem_cpy(pBlob->code_cat_n, &(pObj[idx]), sizeM);
+                    idx += sizeM;
+                    break;
+
+                case SML_TMO_MOVIAL_CAT_NS:
+                    sizeN = pObj[idx] * SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_NS;
+                    if (sizeN > SML_TMO_MOVIAL_BLOB_CAT_NS_SIZE)
+                    {
+                        free_ctrl_buffer(pBlob);
+                        return NULL;
+                    }
+
+                    pBlob->cat[cat_idx].num = pObj[idx++];
+                    kal_mem_cpy(pBlob->code_cat_ns, &(pObj[idx]), sizeN);
+                    idx += sizeN;
+                    break;
+
+                case SML_TMO_MOVIAL_CAT_SP:
+                    sizeP = pObj[idx] * SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_SP;
+                    if (sizeP > SML_TMO_MOVIAL_BLOB_CAT_SP_SIZE)
+                    {
+                        free_ctrl_buffer(pBlob);
+                        return NULL;
+                    }
+
+                    pBlob->cat[cat_idx].num = pObj[idx++];
+                    kal_mem_cpy(pBlob->code_cat_sp, &(pObj[idx]), sizeP);
+                    idx += sizeP;
+                    break;
+
+                default:
+                    break;
+            }
+        }
+        else /* m/n/p = 0 */
+        {
+            /* memset ensures pBlob->cat[cat_idx].num set to 0 */
+            idx += 1;
+        }
+    }
+
+    if (sml_tmo_movial_ValidateConfigData(pBlob) == KAL_FALSE)
+    {
+        free_ctrl_buffer(pBlob);
+        return NULL;
+    }
+
+    kal_mem_cpy(pBlob->signature, &(pObj[idx]), SML_TMO_MOVIAL_BLOB_SIZE_OF_SIGNATURE);
+
+    sml_Dump("constructed blob", (kal_uint8 *)pBlob, SML_TMO_MOVIAL_MAX_BLOB_SIZE);
+
+    return (kal_uint8 *)pBlob;
+}
+
+#ifdef __TMO_RSU_OTP__
+static kal_bool custom_check_is_default_tmo_blob(kal_uint8 *imei)
+{
+    kal_uint8 otp_default_imei[SML_TMO_MOVIAL_BLOB_IMEI_SIZE] = {0x00};
+     
+    if (kal_mem_cmp(&imei[0], &otp_default_imei[0], SML_TMO_MOVIAL_BLOB_IMEI_SIZE) == 0)
+    {
+        return KAL_TRUE;
+    }
+    else
+    {
+        return KAL_FALSE;
+    }
+}
+#endif /* __TMO_RSU_OTP__ */
+
+/*******************************************************************************
+ * FUNCTION  
+ *  custom_check_is_default_imei
+ * DESCRIPTION
+ *  Check if the IMEI is default IMEI
+ * PARAMETERS
+ *  imei       [kal_uint8 *]     
+ * RETURN
+ *  kal_bool
+*******************************************************************************/
+kal_bool custom_check_is_default_imei(kal_uint8 *imei)
+{
+#if defined(__SECURITY_OTP__) && defined(__NVRAM_OTP__)
+    kal_uint8 default_imei_bcd[8] = {0x00};
+#else
+    kal_uint8 default_imei_bcd[8] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
+#endif
+
+    if (NULL == imei)
+    {
+        return KAL_FALSE;
+    }
+    
+    if (kal_mem_cmp(&imei[0], &default_imei_bcd[0], 8) == 0)
+    {
+        return KAL_TRUE;
+    }
+    else 
+    {
+        return KAL_FALSE;
+    }
+}
+
+void custom_tmo_movial_rsu_get_pub_key_handle(kal_uint8 index, 
+                               TYPE_CUST_CHL_KEY *key1, TYPE_CUST_CHL_KEY *key2)
+{
+    TYPE_CUST_CHL_KEY pub_key_group[][2] = {
+        // Pub Key 1,        Pub Key 2
+        {CUST_TM_PUB_KEY1, CUST_TM_PUB_KEY2}, // index == 0
+        // Add handles of new pub keys sets here 
+    };
+    
+    #define TMO_MOVIAL_KEY_SET_MAX_NUM (sizeof(pub_key_group)/sizeof(pub_key_group[0]))
+    
+    index = index > (TMO_MOVIAL_KEY_SET_MAX_NUM - 1) ? 0 : index;
+    
+    if (NULL != key1)
+    {
+        *key1 = pub_key_group[index][0];
+        MD_TRC_INFO_SML_RSU_PUB_KEY_HANDLE((*key1));
+    }
+    
+    if (NULL != key2)
+    {
+        *key2 = pub_key_group[index][1];
+        MD_TRC_INFO_SML_RSU_PUB_KEY_HANDLE((*key2));
+    }
+
+    return;
+}
+#endif /* L4_NOT_PRESENT */
+#endif /* !defined(__MAUI_BASIC__) */
diff --git a/mcu/custom/protocol/common/ps/custom_sml.h b/mcu/custom/protocol/common/ps/custom_sml.h
new file mode 100644
index 0000000..c196479
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_sml.h
@@ -0,0 +1,348 @@
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * custom_sml.h
+ *
+ * Project:
+ * --------
+ *   UMOLYA
+ *
+ * Description:
+ * ------------
+ *  This is the file for SIM ME Lock customization
+ *
+ * Author:
+ * -------
+ * -------
+ ****************************************************************************/
+#ifndef CUSTOM_SML_H
+#define CUSTOM_SML_H
+
+#include "kal_general_types.h"
+#include "ps_public_enum.h"
+#include "sim_ps_enum.h"
+#include "mcd_l3_inc_struct.h"
+#include "l4_nvram_def.h"
+#include "cust_chl_interface.h"
+
+/****************************************************************************
+ *
+ *  SIM ME Lock
+ *
+ ****************************************************************************/
+#define SML_IMEI_PRINT_LEN    5       // print partial UE IMEI for privacy
+
+extern void sml_mini_trace(const kal_char *title, kal_uint8 *data, kal_uint8 len);
+extern sml_key_input_type_enum custom_sml_query_key_input_type(sml_key_algo_enum algo, sml_op_enum op);
+#ifdef __SML_PUK__
+extern sml_key_input_type_enum custom_sml_query_puk_key_input_type(sml_key_algo_enum algo, sml_puk_key_op_enum op);
+#endif
+
+
+/****************************************************************************
+ *
+ *  Verizon SIM Lock
+ *
+ ****************************************************************************/
+#define SML_VZW_RSU_TIME_STAMP_LEN    8
+#define SML_VZW_RSU_NW_CODE_LEN       6     /* 123-456 */
+#define SML_VZW_RSU_NW_LIST_LEN       (SML_VZW_RSU_NW_CODE_LEN * 5) /* 5 sets */
+#define SML_VZW_RSU_NS_CODE_LEN       8     /* 123-456-78 */
+#define SML_VZW_RSU_NS_LIST_LEN       (SML_VZW_RSU_NS_CODE_LEN * 5) 
+#define SML_VZW_RSU_SP_CODE_LEN       (7+NUM_GID1)     /* 123-456-8-00000000000000000000 */
+#define SML_VZW_RSU_SP_LIST_LEN       (SML_VZW_RSU_SP_CODE_LEN * 4)
+#define SML_VZW_RSU_EHPLMN_CODE_LEN   (13+NUM_GID1)    /* 123-456-8-00000000000000000000-123-456 */
+#define SML_VZW_RSU_EHPLMN_LIST_LEN   (SML_VZW_RSU_EHPLMN_CODE_LEN * 5)
+#define SML_VZW_RSU_SESSION_ID_LEN    8
+#define SML_VZW_RSU_SIZE_OF_MCC_MNC   6
+#define SML_VZW_RSU_SIZE_OF_GID       9
+#define SML_VZW_RSU_SIZE_OF_EHPLMN    6
+#define SML_VZW_RSU_MAX_SUPPORT_MAJOR_VER   1
+#define SML_VZW_RSU_MAX_SUPPORT_MINOR_VER   0
+
+
+typedef struct {
+    kal_uint8   major_version;
+    kal_uint8   minor_version;
+    kal_uint8   protection_algo;
+    kal_uint8   nw_lock_op;
+    kal_uint8   timestamp[SML_VZW_RSU_TIME_STAMP_LEN];
+    kal_uint8   nw_num;
+    kal_uint8   nw_list[SML_VZW_RSU_NW_LIST_LEN];
+    kal_uint8   ns_num;
+    kal_uint8   ns_list[SML_VZW_RSU_NS_LIST_LEN];
+    kal_uint8   sp_num;
+    kal_uint8   sp_list[SML_VZW_RSU_SP_LIST_LEN];
+    kal_uint8   ehplmn_num;
+    kal_uint8   ehplmn_list[SML_VZW_RSU_EHPLMN_LIST_LEN];
+    kal_uint8   session_id[SML_VZW_RSU_SESSION_ID_LEN];
+} sml_vzw_sim_lock_context_struct;
+typedef sml_vzw_sim_lock_context_struct nvram_sml_vzw_sim_lock_context_struct;
+
+typedef struct {
+    kal_uint8 device_key[32]; //a unique 32-byte Device Key, which is used to calculate HMAC of a Network Lock Request message
+} sml_vzw_sim_lock_device_key_struct;
+typedef sml_vzw_sim_lock_device_key_struct nvram_sml_vzw_sim_lock_device_key_struct;
+
+typedef struct {
+    kal_uint16 delay_timer; //ranging from 0-10 minutes, default is 2 minutes
+} sml_vzw_rsu_delay_timer_struct;
+typedef sml_vzw_rsu_delay_timer_struct nvram_sml_vzw_rsu_delay_timer_struct;
+
+typedef enum {
+    SML_VZW_RSU_MSG_TYPE_INVALID        = 0,
+    SML_VZW_RSU_MSG_TYPE_REQUEST        = 1,
+    SML_VZW_RSU_MSG_TYPE_STATUS         = 2,
+} sml_vzw_rsu_msg_type_enum;
+
+typedef enum {
+    SML_VZW_LOCK_STATE_LOCK        = 0,
+    SML_VZW_LOCK_STATE_UNLOCK      = 1,
+    SML_VZW_LOCK_STATE_TEMP_UNLOCK = 2,
+} sml_vzw_lock_state_enum;
+
+typedef enum {
+    SML_VZW_CAT_NONE,
+    SML_VZW_CAT_N,
+    SML_VZW_CAT_NS,
+    SML_VZW_CAT_SP,
+    SML_VZW_CAT_EHPLMN,
+    SML_VZW_CAT_SIZE
+} sml_vzw_cat_enum;
+
+typedef enum {
+    SML_VZW_RSU_STATUS_SUCCESS           = 0,
+    SML_VZW_RSU_STATUS_GENERIC_ERROR     = 1,
+    SML_VZW_RSU_STATUS_BLOB_TOO_SHORT    = 2,
+    SML_VZW_RSU_STATUS_SIGNATURE_FAILED  = 3,
+    SML_VZW_RSU_STATUS_RESERVE           = 4,
+    SML_VZW_RSU_STATUS_IMEI_FAILED       = 5,
+    SML_VZW_RSU_STATUS_BLOB_FRESHNESS_CHECK_FAILED = 6,
+} sml_vzw_rsu_status_enum;
+
+typedef struct {
+    void    * pObj;
+    void    (* give)(void * /* pLidToObj */, kal_uint8);
+    void    (* take)(void * /* pObjToLid */, kal_uint8);
+    void    (* destory)(kal_uint8);
+    void    * (* getItem)(sml_vzw_cat_enum,sml_ctx_enum,kal_uint16 * /* length */, kal_uint8);
+    void    (* putItem)(sml_vzw_cat_enum,sml_ctx_enum,void * /* pItem */, kal_uint16 * /* plen */, kal_uint8);
+} nvram_ef_sml_vzw_sim_lock_obj_struct;
+
+extern void sml_clean_vzw_cntxt(void);
+extern kal_bool custom_sml_vzw_is_test_purpose(void);
+
+extern kal_uint16 sml_vzw_Load( void *pLid, kal_uint8 source );
+extern kal_uint16 sml_vzw_Save( void *pLid, kal_uint8 source );
+extern kal_bool sml_vzw_Check( sml_vzw_cat_enum cat, 
+                        kal_uint8 *imsi, 
+                        kal_uint8 *gid1,
+                        kal_uint16 ehplmn_num,
+                        kal_uint8 *ehplmn,
+                        kal_uint8 sim_mnc_len,
+                        kal_uint8 source);
+extern kal_uint8 sml_vzw_get_major_version(kal_uint8 source);
+extern kal_uint8 sml_vzw_get_minor_version(kal_uint8 source);
+extern kal_uint8 sml_vzw_get_max_support_major_version();
+extern kal_uint8 sml_vzw_get_max_support_minor_version();
+extern kal_bool sml_vzw_update_int_data(kal_uint8 source, sml_vzw_cat_enum cat, sml_ctx_enum type, kal_uint8 data);
+extern kal_bool sml_vzw_get_int_data(kal_uint8 source, sml_vzw_cat_enum cat, sml_ctx_enum type, kal_uint8* pData);
+extern kal_bool sml_vzw_update_array_data(kal_uint8 source, sml_vzw_cat_enum cat, sml_ctx_enum type, kal_uint8* data, kal_uint16 data_len);
+extern kal_bool sml_vzw_get_array_data(kal_uint8 source, sml_vzw_cat_enum cat, sml_ctx_enum type, kal_uint8* data, kal_uint16* data_len);
+extern kal_bool sml_vzw_reset_rsu_data(kal_uint8 source);
+
+extern void sml_vzw_give( void * pLidToObj, kal_uint8 source );
+extern void sml_vzw_take( void * pObjToLid, kal_uint8 source );
+extern void sml_vzw_destory( kal_uint8 source );
+extern void *sml_vzw_getItem(sml_vzw_cat_enum cat, 
+                             sml_ctx_enum item, 
+                             kal_uint16 * plength,
+                             kal_uint8 source);
+extern void sml_vzw_putItem( sml_vzw_cat_enum cat, 
+                             sml_ctx_enum item, 
+                             void * pItem, 
+                             kal_uint16 * plength,
+                             kal_uint8 source);
+
+extern nvram_ef_sml_vzw_sim_lock_obj_struct *pSMLVZWg;
+extern void custom_vzw_rsu_get_pub_key_handle(kal_uint8 index,
+                                              TYPE_CUST_CHL_KEY *key);
+
+/****************************************************************************
+ *
+ *  TMO SIM Lock with Movial Solution
+ *
+ ****************************************************************************/
+#define SML_TMO_MOVIAL_BLOB_IMEI_SIZE                  15
+#define SML_TMO_MOVIAL_BLOB_TIME_STAMP_SIZE             8
+#define SML_TMO_MOVIAL_SIZE_OF_START_TIME               8
+#define SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION          4
+#define SML_TMO_MOVIAL_BLOB_LENGTH_SIZE                 2
+#define SML_TMO_MOVIAL_BLOB_CONFIG_SUPPORT_CAT_SIZE     3
+
+/* Length of each CAT Codes */
+#define SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_N      6 /* MCC/MNC */
+#define SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_NS     8 /* MCC/MNC + HLR */
+#define SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_SP     7 /* MCC/MNC + GID1 */
+
+/* Define the maximum suppot categories */
+#define SML_TMO_MOVIAL_BLOB_MAX_SUPPORT_CAT_N      15
+#define SML_TMO_MOVIAL_BLOB_MAX_SUPPORT_CAT_NS     10
+#define SML_TMO_MOVIAL_BLOB_MAX_SUPPORT_CAT_SP     10
+
+/* Define the total size of each category */
+#define SML_TMO_MOVIAL_BLOB_CAT_N_SIZE             (SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_N * SML_TMO_MOVIAL_BLOB_MAX_SUPPORT_CAT_N)
+#define SML_TMO_MOVIAL_BLOB_CAT_NS_SIZE            (SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_NS * SML_TMO_MOVIAL_BLOB_MAX_SUPPORT_CAT_NS)
+#define SML_TMO_MOVIAL_BLOB_CAT_SP_SIZE            (SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_SP * SML_TMO_MOVIAL_BLOB_MAX_SUPPORT_CAT_SP)
+
+#define SML_TMO_MOVIAL_BLOB_ITERATION_COUNT_SIZE      4
+#define SML_TMO_MOVIAL_BLOB_SALT_SIZE                16
+#define SML_TMO_MOVIAL_BLOB_HCK_SIZE                 32
+#define SML_TMO_MOVIAL_BLOB_SIZE_OF_SIGNATURE       256
+#define SML_TMO_MOVIAL_SIZE_OF_UNLOCK_TIME            4
+
+
+#define SML_TMO_MOVIAL_TIMEOUT_PERIODIC_CHECK           (KAL_TICKS_1_SEC*10)//(12*60*KAL_TICKS_1_MIN)     /* 12 hours */
+#define SML_TMO_MOVIAL_TIMER_INDEX_PERIODIC_CHECK       0x05
+
+#define SML_TMO_MOVIAL_SLB_ERR_SUCCESS                     0x00
+#define SML_TMO_MOVIAL_SLB_ERR_GENERIC                     0x01
+#define SML_TMO_MOVIAL_SLB_ERR_BLOB_TOO_SHORT              0x02
+#define SML_TMO_MOVIAL_SLB_ERR_VERIFY_FAIL                 0x03
+#define SML_TMO_MOVIAL_SLB_ERR_GET_TIME_OP_FAIL            0x04
+#define SML_TMO_MOVIAL_SLB_ERR_IMEI_MISMATCH               0x05
+#define SML_TMO_MOVIAL_SLB_ERR_BLOB_FRESH_CHECK_FAIL       0x06
+
+#define SML_TMO_MOVIAL_NVRAM_ACCESS_ID_UPDATE_CAT_LOCK     0xDA
+#define SML_TMO_MOVIAL_NVRAM_ACCESS_ID_UPDATE_SLB          0xDB
+#define SML_TMO_MOVIAL_NVRAM_ACCESS_ID_UNLOCK_EXPIRE       0xDC
+#define SML_TMO_MOVIAL_NVRAM_ACCESS_ID_UPDATE_CORR         0xDD
+#define SML_TMO_MOVIAL_NVRAM_ACCESS_ID_RESTORE_LOCK        0xDE
+
+typedef enum {
+    SML_TMO_MOVIAL_CAT_LOCKED,
+    SML_TMO_MOVIAL_CAT_UNLOCKED,
+} sml_tmo_movial_cat_lock_enum;
+
+typedef struct {
+    kal_uint8 change_flag;
+    kal_uint8 num;                              /* num of valid sets */
+    sml_tmo_movial_cat_lock_enum cat_lock;
+} sml_tmo_movial_blob_meta_struct;
+
+typedef struct {
+    kal_uint8 iteration_count[SML_TMO_MOVIAL_BLOB_ITERATION_COUNT_SIZE];    /* 4 */
+    kal_uint8 salt[SML_TMO_MOVIAL_BLOB_SALT_SIZE];                          /* 16 */
+    kal_uint8 hck[SML_TMO_MOVIAL_BLOB_HCK_SIZE];                            /* 32 */
+} sml_tmo_movial_blob_key_struct;
+
+typedef struct {
+    kal_uint8   major_version;
+    kal_uint8   minor_version;
+    kal_uint8   protection_algorithm;
+    kal_uint8   lock_operation;
+    kal_uint8   imei[SML_TMO_MOVIAL_BLOB_IMEI_SIZE];                        /* 15 */
+    kal_uint8   time_stamp[SML_TMO_MOVIAL_BLOB_TIME_STAMP_SIZE];            /* 8 */
+    kal_uint8   start_time[SML_TMO_MOVIAL_SIZE_OF_START_TIME];              /* 8 */
+    kal_uint8   unlock_duration[SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION];    /* 4 */
+    kal_uint8   length[SML_TMO_MOVIAL_BLOB_LENGTH_SIZE];                    /* 2 */
+    sml_tmo_movial_blob_meta_struct   cat[SML_TMO_MOVIAL_BLOB_CONFIG_SUPPORT_CAT_SIZE];     /* (3 * ?) */
+    sml_tmo_movial_blob_key_struct   key[SML_TMO_MOVIAL_BLOB_CONFIG_SUPPORT_CAT_SIZE];      /* (3 * 52) */
+    kal_uint8   code_cat_n[SML_TMO_MOVIAL_BLOB_CAT_N_SIZE];                 /* (30 * 6)*/
+    kal_uint8   code_cat_ns[SML_TMO_MOVIAL_BLOB_CAT_NS_SIZE];               /* (10 * 8)*/
+    kal_uint8   code_cat_sp[SML_TMO_MOVIAL_BLOB_CAT_SP_SIZE];               /* (10 * 7)*/
+    kal_uint8   signature[SML_TMO_MOVIAL_BLOB_SIZE_OF_SIGNATURE];           /* 256 */
+    kal_uint8   unlock_time[SML_TMO_MOVIAL_SIZE_OF_UNLOCK_TIME];            /* 4 */
+} sml_tmo_movial_sim_lock_context_struct;
+
+typedef sml_tmo_movial_sim_lock_context_struct nvram_sml_tmo_movial_sim_lock_context_struct;
+
+#define SML_TMO_MOVIAL_MAX_BLOB_SIZE NVRAM_EF_L4_SML_TMO_MOVIAL_SIM_LOCK_SIZE
+
+typedef struct {
+    kal_uint64 correlation_id;
+} sml_tmo_movial_corr_id_struct;
+
+typedef sml_tmo_movial_corr_id_struct nvram_sml_tmo_movial_corr_id_struct;
+
+typedef enum {
+    SML_TMO_MOVIAL_CAT_BEGIN,
+    SML_TMO_MOVIAL_CAT_N = SML_TMO_MOVIAL_CAT_BEGIN,
+    SML_TMO_MOVIAL_CAT_NS,
+    SML_TMO_MOVIAL_CAT_SP,
+    SML_TMO_MOVIAL_CAT_SIZE,
+    SML_TMO_MOVIAL_CAT_NULL
+} sml_tmo_movial_cat_enum;
+
+typedef struct {
+    void    * pObj;
+    void    (* give)(void * /* pLidToObj */, kal_uint8);
+    void    (* take)(void * /* pObjToLid */, kal_uint8);
+    void    (* destory)(kal_uint8);
+    void    * (* getItem)(sml_tmo_movial_cat_enum,sml_ctx_enum,kal_uint16 * /* length */, kal_uint8);
+    void    (* putItem)(sml_tmo_movial_cat_enum,sml_ctx_enum,void * /* pItem */, kal_uint16 * /* plen */, kal_uint8);
+} nvram_ef_sml_tmo_movial_sim_lock_obj_struct;
+
+extern void sml_clean_tmo_movial_cntxt(void);
+extern void sml_tmo_movial_give( void *pLidToObj, kal_uint8 source );
+extern void sml_tmo_movial_take( void *pObjToLid, kal_uint8 source );
+extern void sml_tmo_movial_destory(kal_uint8 source);
+extern void *sml_tmo_movial_getItem( sml_tmo_movial_cat_enum category, 
+                           sml_ctx_enum item, 
+                           kal_uint16 *plength,
+                           kal_uint8 source);
+extern void sml_tmo_movial_putItem( sml_tmo_movial_cat_enum cat,
+                         sml_ctx_enum item, 
+                         void *pItem, 
+                         kal_uint16 *plength,
+                         kal_uint8 source);
+
+extern kal_bool sml_tmo_movial_ValidateIMEI(kal_uint8 *imei, kal_bool is_bypass_default, kal_uint8 source);
+extern kal_bool sml_tmo_movial_ValidateTimeStamp(kal_uint8 *new_time_stamp, kal_uint8 source);
+extern kal_bool sml_tmo_movial_ValidateConfigData(sml_tmo_movial_sim_lock_context_struct *pBlob);
+extern kal_uint8 *sml_tmo_movial_ConstructBlob(kal_uint8 *pObj, kal_uint16 slb_len, kal_uint8 *error_cause, kal_uint8 source);
+extern kal_uint8 *sml_tmo_movial_ConstructSmlBlob(sml_tmo_movial_sim_lock_context_struct *pObj, kal_uint8 source);
+extern kal_uint8 *sml_tmo_movial_ReconstructBlob(sml_tmo_movial_sim_lock_context_struct *pObj, kal_uint32 *pLen, kal_uint8 *error_cause);
+extern kal_bool sml_tmo_movial_checkValidity(void *pObj, kal_uint8 source, kal_uint8 *error_cause);
+extern void sml_tmo_movial_Load(void *pLid, kal_uint8 source);
+extern void sml_tmo_movial_FirstLoad(void *pLid, kal_uint8 source);
+extern kal_uint16 sml_tmo_movial_Save(void *pLid, kal_uint8 source);
+extern kal_bool sml_tmo_movial_CheckTempUnlock(kal_uint8 source);
+extern kal_uint8 sml_tmo_movial_Catcode(sml_tmo_movial_cat_enum cat,
+                       kal_uint8 *imsi,
+                       kal_uint8 *gid1,
+                       kal_uint8 mnc_len,
+                       kal_uint8 *code);
+extern kal_uint8 sml_tmo_movial_GetCode( sml_tmo_movial_cat_enum cat, 
+                       kal_uint8 * imsi, 
+                       kal_uint8 * gid1, 
+                       kal_uint8 sim_mnc_len, 
+                       kal_uint8 * pdata,
+                       kal_uint8 * code);
+extern kal_bool sml_tmo_movial_Check(sml_tmo_movial_cat_enum cat,
+                    kal_uint8 *imsi,
+                    kal_uint8 *gid1,
+                    kal_uint8 sim_mnc_len,
+                    kal_uint8 source);
+extern kal_bool sml_tmo_movial_UpdateNwTimeAndCheckTempLock(kal_uint8 source, 
+                    kal_uint8 nw_time_zone, 
+                    nw_time_zone_time_struct *nw_time);
+extern kal_bool sml_tmo_movial_Verify(sml_tmo_movial_cat_enum cat,
+                      kal_uint8 * key,
+                      kal_uint8 len,
+                      kal_uint8 source);
+
+extern kal_uint8 sml_tmo_movial_update_slb(void *blob, kal_uint8 source);
+extern kal_uint8 *sml_tmo_movial_ConstructFirstBlob(kal_uint8 *pObj, kal_uint16 slb_len, kal_uint8 source);
+
+extern nvram_ef_sml_tmo_movial_sim_lock_obj_struct* pSMLTMMg;
+extern kal_uint32 sml_tmo_movial_seconds_to_expire;
+
+extern void sml_tmm_GetLockState(kal_uint8 *lock_state, kal_uint8 source);
+extern kal_uint32 sml_tmm_GetUnlockTimeLeft(kal_uint8 source);
+
+extern kal_bool custom_check_is_default_imei(kal_uint8 *imei);
+extern void custom_tmo_movial_rsu_get_pub_key_handle(kal_uint8 index, 
+                              TYPE_CUST_CHL_KEY *key1, TYPE_CUST_CHL_KEY *key2);
+#endif /* CUSTOM_SML_H */
diff --git a/mcu/custom/protocol/common/ps/custom_sml_trc.h b/mcu/custom/protocol/common/ps/custom_sml_trc.h
new file mode 100644
index 0000000..1aab828
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_sml_trc.h
@@ -0,0 +1,76 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ * Filename:
+ * ---------
+ *   custom_sml_trc.h
+ *
+ * Project:
+ * --------
+ *   MT6297
+ *
+ * Description:
+ * ------------
+ *   This file is trace map definition.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *******************************************************************************/
+#ifndef _CUSTOM_SML_TRC_H
+#define _CUSTOM_SML_TRC_H
+
+#include "kal_public_defs.h" //MSBB change #include "stack_config.h"
+#include "kal_trace.h"
+
+#ifndef GEN_FOR_PC
+    #ifndef _STACK_CONFIG_H
+    #error "stack_config.h should be included before tst_config.h"
+    #endif
+#else
+    #include "kal_trace.h"
+#endif
+
+#ifndef _KAL_TRACE_H
+    #error "kal_trace.h should be included before tst_trace.h"
+#endif
+
+#if !defined(GEN_FOR_PC)
+    #include "custom_sml_trc_utmd.h"
+#endif
+
+#endif
\ No newline at end of file
diff --git a/mcu/custom/protocol/common/ps/custom_sml_trc_utmd.json b/mcu/custom/protocol/common/ps/custom_sml_trc_utmd.json
new file mode 100644
index 0000000..7766101
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_sml_trc_utmd.json
@@ -0,0 +1,133 @@
+{
+  "traceFamily": "PS",
+  "module": "MOD_SMU_CUST",
+  "userModule": "",
+
+  "startGen": "Legacy",
+  "endGen": "-",
+  "legacyParameters": {},
+
+  "traceClassDefs": [
+    {"TRACE_INFO":      { "debugLevel": "Ultra-High",   "traceType": "DesignInfo",      "tag": ["Baseline", "TRACE_INFO"] }},
+    {"TRACE_WARNING":   { "debugLevel": "Ultra-High",   "traceType": "InternalDesign",  "tag": ["Baseline", "TRACE_WARNING"] }},
+    {"TRACE_ERROR":     { "debugLevel": "Ultra-High",   "traceType": "Public",          "tag": ["Baseline", "TRACE_ERROR"] }},
+    {"TRACE_FUNC":      { "debugLevel": "Medium",       "traceType": "InternalDesign",  "tag": ["Baseline", "TRACE_FUNC"] }},
+    {}
+  ],
+
+  "traceDefs": [
+    { "FUNC_SML_CATKEY_UPDATE" :
+      { "apiType": "index", "traceClass": "TRACE_FUNC",     "format": "[SML] sml_catkey_update()" }},
+
+    { "FUNC_SML_TMO_MOVIAL_CONSTRUCTBLOB" :
+      { "apiType": "index", "traceClass": "TRACE_FUNC",     "format": "[SML] sml_tmo_movial_ConstructBlob()" }},
+
+    { "FUNC_SML_TMO_MOVIAL_CONSTRUCTFIRSTBLOB" :
+      { "apiType": "index", "traceClass": "TRACE_FUNC",     "format": "[SML] sml_tmo_movial_ConstructFirstBlob()" }},
+
+
+    { "INFO_SML_NW_TIME_EXPIRED" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "Time Expired from NITZ" }},
+
+    { "INFO_SML_TEMP_UNLOCK_TIME" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "UpdateNwTimeAndCheckTempLock: start: %d, duration: %d, current: %d" }},
+
+    { "INFO_SML_CHECK_TEMP_UNLOCK" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "CheckTempUnlock: seconds_to_expire = %d, duration: %d" }},
+
+    { "INFO_SMU_GET_COUNT" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "sml_GetCount: %x, %x, %d" }},
+
+    { "INFO_SMU_CHECK_LENGTH" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "sml_Check: code length = %d, compare length = %d, mnc length = %d" }},
+
+    { "INFO_SMU_CHECK_IGNORE_PID1" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "Permanent lock ignore gid1 in: %2x, %2x, %2x, %2x" }},
+
+    { "INFO_SMU_GET_UNLOCK_TIME_LEFT" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "sml_GetUnlockTimeLeft: end time = %d, unlock time = %d" }},
+
+    { "INFO_SML_NO_GID" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "No GID in SLB" }},
+
+    { "INFO_SMU_RSA_PSS_VERIFY_SIGNATURE_CUST" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "CustCHL_Verify_PSS_Signature return: %d" }},
+
+    { "INFO_SMU_VERIFY_MAC" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "Verify MAC return: %d" }},
+
+    { "INFO_SMU_MAX_RETRY_COUNT_UPDATE_SUCCESS" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "SML: Max Retry Count update success" }},
+
+    { "INFO_SML_KEY_VERIFY_PASS_INFO_CUST" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML][GBLOB] Key verify success" }},
+
+    { "INFO_SML_KEY_VERIFY_FAIL_INFO_CUST" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML][GBLOB] Key verify fail" }},
+
+    { "INFO_SML_AUTOLOCK_COUNT_UPDATE" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML] Autolock count updated: %s! Count: %d" }},
+
+    { "INFO_SML_ALGO_TYPE_UPDATE" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML] Algorithm type updated: %s! Type: %d" }},
+
+    { "INFO_SML_INPUT_FORMAT_OF_CATKEY" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML] Input format of catkey: %Msml_input_format_of_catkey_for_algo_enum" }},
+
+    { "INFO_SML_VZW_CODE_DEBUG" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML][VZW] code:%s" }},
+
+    { "INFO_SML_KEY_UPDATE_SUCCESS" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML]Category key updated" }},
+
+    { "INFO_SML_READ_CUSTOM_NV" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML] Customized NV: Read %s" }},
+
+    { "INFO_SML_CUST_UPDATE_GBLOB_RULE" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML] Custom modify GBLOB rule: %Msml_lock_rule_enum, 0x%02X%02X" }},
+
+    { "INFO_SML_KEY_STATE_UPDATE_SUCCESS" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML] Key state updated successfully" }},
+
+    { "INFO_SML_TMO_RSU_EMPTY_BLOB" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML][TMO] Empty SML Blob!" }},
+
+    { "INFO_SML_TMO_RSU_BLOB_VALIDITY_FAIL" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML][TMO] Blob Signature Validity Failed." }},
+
+    { "INFO_SML_TMO_RSU_IMEI_CHECK_RESULT" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML][TMO] IMEI Check Result: %Mkal_bool" }},
+
+    { "INFO_SML_TMO_RSU_GET_UNLOCK_TIME_LEFT" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML][TMO] sml_tmm_GetUnlockTimeLeft: end time = %d, unlock time = %d" }},
+
+    { "INFO_SML_CUST_ALLOW_DEFAULT_IMEI" :
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML] Allow default IMEI" }},
+
+    { "INFO_SML_TMO_RSU_COPY_IMEI": 
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML][TMO] Default Blob Detected. Copy Device IMEI to Blob"}},
+
+    { "INFO_SML_RSU_PUB_KEY_HANDLE": 
+      { "apiType": "index", "traceClass": "TRACE_INFO",     "format": "[SML][RSU] PUB KEY : %MTYPE_CUST_CHL_KEY"}},
+
+    { "WARNING_SML_LOAD_CHECK_VALIDITY_FAILED" :
+      { "apiType": "index", "traceClass": "TRACE_WARNING",  "format": "sml_Load: Check validity failed!" }},
+
+    { "WARNING_SML_CHECK_VALIDITY_FAILED" :
+      { "apiType": "index", "traceClass": "TRACE_WARNING",  "format": "sml_Check: Check validity failed!" }},
+
+    { "WARNING_SML_CHECK_IMEI_FAILED" :
+      { "apiType": "index", "traceClass": "TRACE_WARNING",  "format": "sml_Check: Check IMEI failed!" }},
+
+    { "WARNING_SML_IMEI_NOT_YET_WRITTEN_TO_DEVICE" :
+      { "apiType": "index", "traceClass": "TRACE_WARNING",  "format": "SML: IMEI not yet written to Device!" }},
+
+    { "WARNING_SML_SL_BLOB_IMEI_MISMATCH" :
+      { "apiType": "index", "traceClass": "TRACE_WARNING",  "format": "sml_Load: Check IMEI validity failed!" }},
+
+    { "WARNING_SML_VZW_RSU_GET_INT_DATA_FAILED" :
+      { "apiType": "index", "traceClass": "TRACE_WARNING",  "format": "[SML][VZW] Get int %Msml_vzw_cat_enum %Msml_ctx_enum fail" }},
+
+    {}
+  ]
+}
\ No newline at end of file
diff --git a/mcu/custom/protocol/common/ps/custom_sms_config.c b/mcu/custom/protocol/common/ps/custom_sms_config.c
new file mode 100644
index 0000000..87050c8
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_sms_config.c
@@ -0,0 +1,365 @@
+/*****************************************************************************
+*  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) 2006
+*
+*  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:
+ * ---------
+ * custom_sms_config.c
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *   This file is for sms customization functions, 
+ *   custom can use these functions to config parameters. 
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ ****************************************************************************/
+
+/*
+**   Includes
+*/
+#include "kal_general_types.h"
+
+// for Smart Phone (ex: Windows Mobile/Android) project default value
+#define CNMI_PARA_MODE  1
+#define CNMI_PARA_MT  2
+#define CNMI_PARA_BM  2
+#define CNMI_PARA_DS  1
+/* For AT+CNMI <mode> parameter, the value should be (0-3) */
+/* For AT+CNMI <mt> parameter, the value should be (0-3) */
+/* For AT+CNMI <bm> parameter, the value should be (0,2, or 3) */
+/* For AT+CNMI <ds> parameter, the value should be (0 or 1) */
+
+/* 0xFFFF means default check all the service tables */
+#define SERVICE_TABLE_BITMAP 0xFFFF
+
+#define SMS_FORMAT_PDU_MODE  0
+#define SMS_FORMAT_TEXT_MODE 1
+
+/*Disable MT SMS and STK send SMS*/
+#ifdef __DISABLE_SMS__
+#define SMS_DISABLE  1    
+#else
+#define SMS_DISABLE  0
+#endif
+
+#define SMS_GUARD_SGS_MT_SMS_TIMEOUT_VALUE  20 //20*100ms
+#define SMS_GUARD_IMS_MT_SMS_TIMEOUT_VALUE  20 //20*100ms
+#define SMS_GUARD_WAIT_CNF_MT_SMS_TIMEOUT_VALUE 20 //20*100ms
+
+typedef struct
+{
+    kal_uint32 hplmn_id;
+	kal_uint8  sc_addr[12];
+}smsc_hplmn_map;
+
+smsc_hplmn_map table1[] = {
+	{405872,{0x07,0x91,0x19,0x09,0x02,0x00,0x50,0x00,0,0,0,0}},
+	{40445, {0x07,0x91,0x19,0x89,0x54,0x80,0x07,0x10,0,0,0,0}},
+	{46011, {0x02,0x91,0xf7,0,0,0,0,0,0,0,0,0}},  
+	{0,{0,0,0,0,0,0,0,0,0,0,0,0}}
+		
+	/* For Example 40486, 0x07,0x91,0x19,0x89,0x68,0x00,0x45,0x44,0,0,0,0, 
+           here mcc=404, mnc=86 SMSC ADDR len = 7, and then SMSC ADDR*/
+};
+
+smsc_hplmn_map default_table[] = {
+	{0,{0x02,0x91,0xf7,0,0,0,0,0,0,0,0,0}}
+};
+
+#define SMSC_PLMN_TABLE_SIZE  (sizeof(table1)/sizeof(smsc_hplmn_map))
+
+
+/*****************************************************************************
+* FUNCTION
+*   sms_cnmi_para_mode 
+* DESCRIPTION
+*   This function is used to define the spec 27.005 section 3.4.1 
+*   AT+CNMI <mode> parameter, the value sholud be (0-3)
+*
+* PARAMETERS
+*
+* RETURNS
+*   kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 sms_cnmi_para_mode(void)
+{
+   return (CNMI_PARA_MODE);
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   sms_cnmi_para_mt
+* DESCRIPTION
+*   This function is used to define the spec 27.005 section 3.4.1 
+*   AT+CNMI <mt> parameter, the value sholud be (0-3)
+*
+* PARAMETERS
+*
+* RETURNS
+*   kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 sms_cnmi_para_mt(void)
+{
+   return (CNMI_PARA_MT);
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   sms_cnmi_para_bm
+* DESCRIPTION
+*   This function is used to define the spec 27.005 section 3.4.1 
+*   AT+CNMI <bm> parameter, the value sholud be (0,2, or 3)
+*
+* PARAMETERS
+*
+* RETURNS
+*   kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 sms_cnmi_para_bm(void)
+{
+   return (CNMI_PARA_BM);
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   sms_cnmi_para_ds
+* DESCRIPTION
+*   This function is used to define the spec 27.005 section 3.4.1 
+*   AT+CNMI <ds> parameter, the value sholud be (0 or 1)
+*
+* PARAMETERS
+*
+* RETURNS
+*   kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 sms_cnmi_para_ds(void)
+{
+   return (CNMI_PARA_DS);
+}
+
+/*****************************************************************************
+* FUNCTION
+*   sms_check_sim_service_table
+* DESCRIPTION
+*   This function is used to config if the SIM file need to check service table 
+*   1: It will check service table, 0: It will not check service table
+*
+*            +---------+---------+---------------+---------+
+*            |  BIT16  |  BIT15  | ... |  BIT 1  |  BIT 0  |
+*            +---------+---------+---------------+---------+
+*
+*   BIT  0: Efsmss
+*   BIT  1: EFsmsp
+*   BIT  2: EFcbmi
+*   BIT  3: EFcbmid
+*   BIT  4: EFcbmir 
+*   BIT  5: EFext6          (R4 file)
+*   BIT  6: EFmbdn          (R4 file)
+*   BIT  7: EFmbi           (R4 file)
+*   BIT  8: EFmwis          (R4 file)
+*   BIT  9: EFext1
+*   BIT 10: EFmailbox_num   (CPHS file)
+*   BIT 11: EFsms
+*
+* PARAMETERS
+*
+* RETURNS
+*   kal_uint16
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint16 sms_check_sim_service_table(void)
+{
+   return (SERVICE_TABLE_BITMAP);
+}
+
+/*****************************************************************************
+* FUNCTION
+*   custom_sms_is_disabled 
+* DESCRIPTION
+*   This function is used to get the value of SMS disable. 
+*   0: SMS works normally
+*   1: "MT SMS" and "STK send SMS" are disbaled 
+*
+* PARAMETERS
+*
+* RETURNS
+*   kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 custom_sms_is_disabled(void)
+{
+   return (SMS_DISABLE);
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*   sms_message_format
+* DESCRIPTION
+*   This function is used to define the default value to 
+*   message format AT+CMGF. (PDU mode or TEXT mode)
+*
+* PARAMETERS
+*
+* RETURNS
+*   kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 sms_message_format(void)
+{
+    return (SMS_FORMAT_PDU_MODE);
+}
+
+/*------------------------------------------------------------- 
+ * meet 3GPP 27.005 +CNMI NOTE 5 define:
+ * NOTE 5: If AT command interface is acting as the only display device, 
+ *         the ME must support storing of class 0 messages and messages 
+ *         in the message waiting indication group (discard message); refer table 2)
+ *
+ *-------------------------------------------------------------*/
+kal_bool custom_sms_store_class0_mwd(void)
+{
+#ifdef __SP_RIL_SUPPORT__
+    return KAL_FALSE;
+#else
+    return KAL_TRUE;
+#endif
+}
+/*kal_bool custom_sms_is_sc_addr_available(void)
+{
+	return KAL_TRUE;// to get the SMSC address from custom function return KAL_TRUE
+}*/
+
+kal_bool custom_get_sc_addr(kal_uint32 plmn_id, kal_uint8 *sc_addr)
+{
+    kal_uint8 i,j;
+	
+    for(i = 0 ; i < SMSC_PLMN_TABLE_SIZE; i++)
+    {
+        if( table1[i].hplmn_id == plmn_id ) 
+        {
+        	/*kal_mem_cpy(sc_addr, table1[i].sc_addr, table1[i].sc_addr[0]+1);*/
+			for( j = 0; j < 12; j++ )
+			{
+				sc_addr[j] =  table1[i].sc_addr[j];
+			}
+			return KAL_TRUE;
+        }
+    }
+	
+	for (j = 0; j < 12 ; j++)
+	{
+	    sc_addr[j] = default_table[0].sc_addr[j];
+	}
+	
+	return KAL_FALSE;
+}
+
+
+kal_bool custom_sms_unitdata_cnf_enable(void)
+{
+	return KAL_TRUE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*   custom_is_fdn_check_required
+* DESCRIPTION
+*   This function returns true if the FDN check is required and false if it is not required.
+* PARAMETERS
+*    hplmn_id of the operator whose SIM card is inserted
+* RETURNS
+*   kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool custom_is_fdn_check_required(kal_uint32 hplmn_id)
+{
+    switch(hplmn_id)
+    {
+        case 33402:                /*33402 & 334020 are the hplmn ID for TELCEL operator*/
+		case 334020:
+		    return KAL_FALSE;
+			
+		default:
+			return KAL_TRUE;
+    }
+}
+
+kal_uint32 custom_sms_get_guard_sgs_mt_sms_timer_value()
+{
+    return SMS_GUARD_SGS_MT_SMS_TIMEOUT_VALUE; //100ms
+}
+
+kal_uint32 custom_sms_get_guard_ims_mt_sms_timer_value()
+{
+    return SMS_GUARD_IMS_MT_SMS_TIMEOUT_VALUE; //100ms
+}
+
+kal_uint32 custom_sms_get_wait_cnf_mt_sms_timer_value()
+{
+    return SMS_GUARD_WAIT_CNF_MT_SMS_TIMEOUT_VALUE; //100ms
+}
+
+
diff --git a/mcu/custom/protocol/common/ps/custom_sms_config.h b/mcu/custom/protocol/common/ps/custom_sms_config.h
new file mode 100644
index 0000000..6059ba8
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_sms_config.h
@@ -0,0 +1,118 @@
+/*****************************************************************************
+*  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) 2006
+*
+*  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:
+ * ---------
+ * custom_sms_config.h
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *   This file is intends for header file of sms customization functions. 
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ ****************************************************************************/
+ 
+#ifndef _CUSTOM_SMS_CONFIG_H
+#define _CUSTOM_SMS_CONFIG_H
+
+#include "kal_general_types.h"
+#include "sim_exported_enum.h"
+
+/* implement in custom/ps/<project>/customer_sms_discard_patent.c */
+extern kal_uint8 *smsal_get_discard_patent_str(kal_uint16 *);
+
+/* implement in custom/ps/<project>/customer_sms_msg_box_num.c */
+extern kal_uint16 cm_sms_max_msg_num (void);
+extern void *cm_sms_get_message_box(kal_uint8);
+
+/* implement in custom/ps/<project>/customer_sms_prefer_order.c */
+extern kal_uint8 smsal_sms_prefer_order (void);
+
+/* implement in custom/ps/<project>/customer_sms_tl_retry.c */
+extern kal_uint8 sms_tl_max_retry_count(protocol_id_enum ps_id);
+extern kal_uint16 sms_tl_retry_timer (protocol_id_enum ps_id);
+extern kal_uint8 sms_tl_max_retry_count_during_call(protocol_id_enum ps_id);
+extern kal_uint16 sms_tl_retry_timer_during_call(protocol_id_enum ps_id);
+extern kal_uint8 sms_rau_retry_timer(void);
+extern kal_uint8 custom_get_sms_tl_retry_count_by_hplmn_id(kal_uint32 hplmn_id);
+extern kal_uint16 sms_guard_timer(protocol_id_enum ps_id);
+
+extern kal_uint8 sms_tl_max_ps_retry_count(void);
+extern kal_uint8 sms_tl_max_cs_retry_count(void);
+extern kal_uint8 sms_tl_max_rau_retry_count(void);
+
+
+/* implement in custom/common/custom_sms_config.c */
+extern kal_uint8 sms_cnmi_para_mode(void);
+extern kal_uint8 sms_cnmi_para_mt(void);
+extern kal_uint8 sms_cnmi_para_bm(void);
+extern kal_uint8 sms_cnmi_para_ds(void);
+extern kal_uint16 sms_check_sim_service_table(void);
+extern kal_uint8 custom_sms_is_disabled(void);
+extern kal_uint8 sms_message_format(void);
+
+/* implement in custom/modem/common/ps/customer_sms_force_read_smsp.c */
+extern kal_uint8 smsal_force_read_smsp_for_sat_file_change (void);
+
+/* implement in custom/modem/common/ps/customer_cb_service_by_plmn.c */
+extern kal_uint8 smsal_cb_get_service_plmn_num (void);
+extern void smsal_cb_get_service_plmn(kal_uint8 i, kal_uint8 * plmn);
+
+extern kal_bool custom_sms_store_class0_mwd(void);
+/*extern kal_bool custom_sms_is_sc_addr_available(void);*/
+
+extern kal_bool custom_get_sc_addr(kal_uint32 plmn_id, kal_uint8 *sc_addr);
+
+
+extern kal_bool custom_sms_unitdata_cnf_enable(void);
+
+extern kal_bool custom_is_fdn_check_required(kal_uint32 hplmn_id);
+
+extern kal_uint32 custom_sms_get_guard_sgs_mt_sms_timer_value();
+
+extern kal_uint32 custom_sms_get_guard_ims_mt_sms_timer_value();
+
+extern kal_uint32 custom_sms_get_wait_cnf_mt_sms_timer_value();
+
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_ssds.c b/mcu/custom/protocol/common/ps/custom_ssds.c
new file mode 100644
index 0000000..43d073a
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_ssds.c
@@ -0,0 +1,6451 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * custom_ssds.c
+ *
+ * Project:
+ * --------
+ *
+ *
+ * Description:
+ * ------------
+ *
+ *
+ * Author:
+ * -------
+ *
+ *
+ ****************************************************************************/
+
+#include <string.h>
+#include "kal_trace.h"
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "custom_ssds.h"
+#include "custom_ssds_config.h"
+#include "sbp_public_utility.h"
+#include "ps_public_utility.h" //l4c_gemini_get_actual_sim_id
+
+/* SIM */
+#include "sim_common_enums.h" /* for is_test_sim */
+
+extern kal_bool ssds_path_is_pct_icccard(module_type dst_module);
+
+kal_bool  _custom_ssds_is_cfu(custom_ssds_atcmd_info *atcmd_info)
+{
+    kal_char action_activate[] = "*";
+    kal_char action_deactivate[] = "#";
+    kal_char action_query[]  = "*#";
+    kal_char action_rigester[]  = "**";
+    kal_char action_erasure[] = "##";
+    kal_uint32  index = 0;
+    kal_bool    is_cfu = KAL_FALSE;
+
+    /*find '=' */
+    while ((atcmd_info->atcmd_buff[index] != '=') && (index < atcmd_info->atcmd_len))
+    {
+        index++;
+    }
+
+    if (index >= atcmd_info->atcmd_len)
+    {
+        kal_prompt_trace(MOD_SSDS, "ERROR! Unexpected AT command!");
+        return KAL_FALSE;
+    } else {
+        index += 6;      
+    }
+
+    /*skip the action*/
+    if ( (0 == kal_mem_cmp(atcmd_info->atcmd_buff+index, action_query, 2)) ||
+         (0 == kal_mem_cmp(atcmd_info->atcmd_buff+index, action_rigester, 2)) ||
+         (0 == kal_mem_cmp(atcmd_info->atcmd_buff+index, action_erasure, 2)) )
+    {
+        index += 2;
+    }
+    else if ( (0 == kal_mem_cmp(atcmd_info->atcmd_buff+index, action_activate, 1)) ||
+              (0 == kal_mem_cmp(atcmd_info->atcmd_buff+index, action_deactivate, 1)) )
+    {
+        index += 1;
+    }
+    else
+    {
+        kal_prompt_trace(MOD_SSDS, "ERROR! ACTION parse fail!");
+        return KAL_FALSE;
+    }
+
+    /*parse the CFU code*/
+    if (0 == kal_mem_cmp(atcmd_info->atcmd_buff+index, "21", 2) ||
+        0 == kal_mem_cmp(atcmd_info->atcmd_buff+index, "22", 2))
+    {
+        is_cfu = KAL_TRUE;
+    }
+
+    return  is_cfu;
+}
+
+kal_bool custom_ssds_need_sync_to_cs(custom_ssds_atcmd_type ss_type,kal_uint32 rsp_code)
+{
+	kal_bool is_need_to_sync = KAL_FALSE;
+	if((ss_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR) && (rsp_code == 200))
+	{
+		is_need_to_sync = KAL_TRUE;
+	}
+	return is_need_to_sync;
+}
+
+kal_bool  _custom_ssds_cdma_only_path_variable(kal_uint32  op_id,
+                                                               kal_char    *mccmnc)
+{
+    kal_uint32 atcmd_request_cdma_only_table[] = { 12 };
+    kal_uint32    index;
+    kal_bool      ret_value = KAL_FALSE;
+
+    /*Special case: support CDMA only*/
+    for (index=0; index<sizeof(atcmd_request_cdma_only_table)/sizeof(atcmd_request_cdma_only_table[0]); index++)
+    {
+       if (op_id == atcmd_request_cdma_only_table[index])
+       {
+           ret_value = KAL_TRUE;
+       }
+    }
+
+    return  ret_value;
+
+}
+
+#if 1
+
+void  _custom_ssds_ussd_req_path_ims_select_rule(custom_ssds_params_info_struct  *params_info, custom_ssds_ussd_path_type *atcmd_ussd_path_type)
+{
+	
+	if(params_info->is_ims_registered == KAL_TRUE) 
+	{
+		//VoPS only works for cellular network,if UE is registered on VoWiFi,no need to check VoPS
+		if(params_info->ims_domain == CUSTOM_SSDS_IMS_DOMAIN_TYPE_WFC)
+		{
+			*atcmd_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_IMS;
+			kal_prompt_trace(MOD_SSDS+params_info->sim_id, "[USSD]registered on VoWiFi,send to IMS!");
+		}
+		else
+		{
+			if(params_info->is_imsvops_support == KAL_TRUE)
+			{
+				*atcmd_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_IMS;
+				kal_prompt_trace(MOD_SSDS+params_info->sim_id, "[USSD]IMSVoPS is support and ims is registered!");
+			}
+			else
+			{
+				*atcmd_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_CS;
+				kal_prompt_trace(MOD_SSDS+params_info->sim_id, "[USSD]IMSVoPS is not support!");
+			}
+		}
+	}
+	else
+	{
+		*atcmd_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_CS;
+		kal_prompt_trace(MOD_SSDS+params_info->sim_id, "[USSD]No IMS registered!");
+	}
+
+}
+
+
+custom_ssds_ussd_path_type  _custom_ssds_get_ussd_req_path_default_config(custom_ssds_params_info_struct  *params_info)
+{
+    custom_ssds_ussd_path_type   atcmd_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_INVALID;
+	
+    _custom_ssds_ussd_req_path_ims_select_rule(params_info, &atcmd_ussd_path_type);
+
+	if(atcmd_ussd_path_type != CUSTOM_SSDS_USSD_PATH_TYPE_INVALID)
+	{
+	    kal_prompt_trace(MOD_SSDS+params_info->sim_id, "[Default Config]ussd path:%d",atcmd_ussd_path_type);
+	}
+	return atcmd_ussd_path_type;
+}
+
+
+void  _custom_ssds_get_ussd_req_path_default_config_by_op(custom_ssds_params_info_struct  *params_info,
+	                                                                                             custom_ssds_ussd_path_type	*req_ussd_path_type)
+{
+	kal_bool                     is_changed = KAL_FALSE;
+	
+	switch (params_info->op_id)
+    {
+        case 0: /* Default values */
+            break;
+        case 1:/* CMCC */
+        case 2:/* CU */
+        case 3:/* Orange */
+        case 102:/* Smartone */
+        case 112:/* Telcel */		
+        case 125:/*DTAC-Thailand*/
+		case 140:/*MTN/Ghana*/
+        case 223: /* Indosat-Indonesia */
+		case 228: /* Celcom-Malaysia */
+        case 231: /* Maxis-Malaysia */
+        case 241: /* Claro-Puerto Rico */		
+		case 244: /* Metfone-Cambodia */
+		case 278: /* Jazz-Pakistan */
+		case 294: /* MPT-Mayanmar */
+		case 296:/* CWW-US */
+		case 306: /* CUHK-Hongkong */
+		case 314: /* Telepost-Greenland */
+        case 318: /* Vianova/Italy */
+        case 320: /* Coriolis/France */
+		case 334:/* Tashicell-Bhutan */
+		case 335:/* TOT-Thailand*/
+        case 337:/* Antel-Uruguay*/
+		case 339:/* Unitel- Angola*/
+		case 340:/*VDF-Papua*/
+		case 341:/*Ucell-Uzbekistan*/
+		case 342:/*Ecotel-Canada*/
+		case 349:/*MTS-Armenia*/
+		case 353:/*We4G-Israel*/
+        case 354: /* Poste Mobile/Italy */
+            *req_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_CS;
+			is_changed = KAL_TRUE;
+            break;
+        case 5: /* TMOEU/DTAG Greece/Netherlands/Hungary/Slovakia */
+            if((0 == strcmp(params_info->mcc, "202")) || (0 == strcmp(params_info->mcc, "204")) ||
+               (0 == strcmp(params_info->mcc, "216")) || (0 == strcmp(params_info->mcc, "231")))
+            {
+                *req_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_CS;
+                is_changed = KAL_TRUE;
+            }
+            break;
+        case 120:/* Claro */
+		{
+			if(0 == strcmp(params_info->mcc, "370")) /* Claro-Dominican support USSI */
+			{
+                break;
+			}
+            *req_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_CS;
+            is_changed = KAL_TRUE;			
+            break;			
+		}
+        case 11: /* H3G */
+            if(0 == strcmp(params_info->mcc, "272"))  /* H3G-Ireland */
+            {
+                *req_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_CS;
+                is_changed = KAL_TRUE;
+            }
+            break;
+		case 137:/* Tele2 */
+           	if(0 == strcmp(params_info->mcc, "250")) /* Tele2/Russia USSD over CS */
+           	{
+               	*req_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_CS;
+               	is_changed = KAL_TRUE;
+          	}
+           	break;
+        case 156: /* Telenor */
+            if(0 == strcmp(params_info->mcc, "297"))  /* Telenor-Montenegro */
+            {
+                *req_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_CS;
+                is_changed = KAL_TRUE;
+            }
+            break;
+        case 319: /* Monaco Telecom France/Epic Cyprus */
+            if(0 == strcmp(params_info->mcc, "212")) /* Monaco Telecom */
+            {
+                *req_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_CS;
+                is_changed = KAL_TRUE;
+            }
+            break;
+	    case 9:/* CT */
+		case 304:/* CTMO: only support CF and CW --aomen*/
+            *req_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_NOT_SUPPORT;
+            is_changed = KAL_TRUE;
+            break;
+        default:
+            break;
+    }
+    if(is_changed == KAL_TRUE)
+    {
+        kal_prompt_trace(MOD_SSDS+params_info->sim_id, "[Default Config by OP]ussd path:%d, opid:%d",*req_ussd_path_type, params_info->op_id);
+    }
+    return;
+}
+
+
+void  _custom_ssds_get_ussd_req_path_from_config_file(custom_ssds_params_info_struct  *params_info,
+	                                                                 custom_ssds_config_type  cfg_type,
+	                                                                 custom_ssds_ussd_path_type	*req_ussd_path_type)
+{
+    nvram_ef_ssds_common_config_profile_struct		*nvram_ptr = NULL;	
+	custom_ssds_config_context_struct			    *context_root;
+    sim_interface_enum                              sim_id = params_info->sim_id;
+	kal_bool                                        is_changed = KAL_FALSE;
+	
+    context_root = _custom_ssds_get_context_by_simid(sim_id, cfg_type);
+
+	if (!context_root)
+	{
+		return;
+	}
+	nvram_ptr = &(context_root->common_config_record);
+	
+    switch(nvram_ptr->ussd_path)
+    {
+        case CUSTOM_SSDS_USSD_REQ_PATH_CONFIG_IMS_IF_IMS_REGISTERED:
+			_custom_ssds_ussd_req_path_ims_select_rule(params_info, req_ussd_path_type);
+			is_changed = KAL_TRUE;
+			break;
+        
+		case CUSTOM_SSDS_USSD_REQ_PATH_CONFIG_CS:
+			*req_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_CS;
+			is_changed = KAL_TRUE;
+			break;
+			
+		case CUSTOM_SSDS_USSD_REQ_PATH_CONFIG_IMS:
+	        *req_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_IMS;
+			is_changed = KAL_TRUE;
+			break;
+			
+		case CUSTOM_SSDS_USSD_REQ_PATH_CONFIG_NOT_SUPPORT:
+			*req_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_NOT_SUPPORT;
+			is_changed = KAL_TRUE;
+			break;
+			
+		default:
+			break;      
+    }
+	if(is_changed == KAL_TRUE)
+	{
+        kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,cfg_ussd_path:%d,atcmd_ussd_path_type:%d",
+			                               cfg_type, nvram_ptr->ussd_path, *req_ussd_path_type);
+	}
+	
+	return;
+}
+
+
+custom_ssds_ussd_path_type  custom_ssds_get_ussd_req_path_variable ( custom_ssds_params_info_struct *params_info )
+{
+	custom_ssds_ussd_path_type	req_ussd_path_type;
+
+
+    /* Priority 5 :default config */
+	req_ussd_path_type = _custom_ssds_get_ussd_req_path_default_config(params_info);
+
+    /* Priority 4 :mcf ota config */
+	_custom_ssds_get_ussd_req_path_from_config_file(params_info, CUSTOM_SSDS_CFG_TYPE_MCF_OTA, &req_ussd_path_type);
+
+    /* Priority 3 :default OP config */
+	_custom_ssds_get_ussd_req_path_default_config_by_op(params_info, &req_ussd_path_type);
+
+    /* Priority 2 :mcf ota by op config */
+	_custom_ssds_get_ussd_req_path_from_config_file(params_info, CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP, &req_ussd_path_type);
+
+    /* Priority 1 :nvram file- By ELT(Nvram editor) or Meta Tool */
+	_custom_ssds_get_ussd_req_path_from_config_file(params_info, CUSTOM_SSDS_CFG_TYPE_NVRAM, &req_ussd_path_type);
+	
+	return	req_ussd_path_type;
+}
+
+
+#endif
+
+kal_bool custom_ssds_is_csfb_allowed(kal_uint32 op_id, kal_char *mccmnc, custom_ssds_roaming_type roaming_type)
+{
+    kal_bool is_csfb_allowed = KAL_TRUE;
+
+    if (117 == op_id && CUSTOM_SSDS_ROAMING_TYPE_NO == roaming_type)
+    {
+        is_csfb_allowed = KAL_FALSE;
+    }
+    return is_csfb_allowed;
+}
+
+kal_bool custom_ssds_is_csfb_during_imsCall_allowed(kal_uint32 op_id,
+                                                    kal_char *mccmnc,
+                                                    custom_ssds_roaming_type roaming_type,
+                                                    custom_ssds_ims_domain_type ims_domain,
+                                                    kal_bool is_wfc_call)
+{
+    kal_bool is_csfb_allowed = KAL_FALSE;
+    if(KAL_TRUE == is_wfc_call)
+    {
+        is_csfb_allowed = KAL_TRUE;
+    }
+
+    return is_csfb_allowed;
+}
+
+#if 1
+void _custom_ssds_need_send_409_err_string_default_variable(module_type module,kal_bool *need_send)
+{
+    *need_send = KAL_FALSE;
+
+    return;
+}
+
+
+void _custom_ssds_need_send_409_err_string_variable(module_type module,kal_bool *need_send,kal_uint32 op_id,kal_char *mccmnc)
+{
+    switch(op_id)
+    {/* currently only for AT&T and AU Optus */
+        case 7:
+        case 145:
+        case 196:
+        case 152:
+            *need_send = KAL_TRUE;
+            break;
+        default:
+            break;
+    }
+
+    return;
+}
+void _custom_ssds_need_send_409_err_string_nvram_variable(module_type module,kal_bool *need_send,
+                                                          custom_ssds_config_type  cfg_type)
+{
+    sim_interface_enum	sim_id;
+
+    sim_id = l4c_gemini_get_actual_sim_id((sim_interface_enum)(module - MOD_SSDS));
+			
+    if (KAL_TRUE == (custom_ssds_config_get_common_config(NVRAM_SSDS_NEED_SEND_409_ERR_STRING, sim_id,(void*)(&need_send),cfg_type)))
+    {
+        kal_prompt_trace(module, "Use NVRAM: if send 409 err string");
+    }
+
+    return;
+}
+
+void _custom_ssds_get_need_send_409_err_string_from_common_file(module_type module,kal_bool *need_send,
+                                                                custom_ssds_config_type  cfg_type)
+{
+    sim_interface_enum sim_id;
+    sim_id = l4c_gemini_get_actual_sim_id((sim_interface_enum)(module - MOD_SSDS));
+    custom_ssds_config_get_need_send_409_err_string_from_common_file(sim_id,need_send,cfg_type);
+}
+
+
+void custom_ssds_need_send_409_err_string_variable(module_type module,kal_bool *need_send,kal_uint32 op_id,kal_char *mccmnc)
+{
+    /* Priority 5 :default config */
+    _custom_ssds_need_send_409_err_string_default_variable(module,need_send);
+
+    /* Priority 4 :mcf ota config */
+    _custom_ssds_need_send_409_err_string_nvram_variable(module,need_send,CUSTOM_SSDS_CFG_TYPE_MCF_OTA);
+    _custom_ssds_get_need_send_409_err_string_from_common_file(module,need_send,CUSTOM_SSDS_CFG_TYPE_MCF_OTA);
+
+    /* Priority 3 :default OP config */
+    _custom_ssds_need_send_409_err_string_variable(module,need_send,op_id,mccmnc);
+
+    /* Priority 2 :mcf ota by op config */
+    _custom_ssds_need_send_409_err_string_nvram_variable(module,need_send,CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP);
+    _custom_ssds_get_need_send_409_err_string_from_common_file(module,need_send,CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP);
+
+    /* Priority 1 :nvram file- By ELT(Nvram editor) or Meta Tool */
+	_custom_ssds_need_send_409_err_string_nvram_variable(module,need_send,CUSTOM_SSDS_CFG_TYPE_NVRAM);
+    _custom_ssds_get_need_send_409_err_string_from_common_file(module,need_send,CUSTOM_SSDS_CFG_TYPE_NVRAM);
+    return;
+}
+
+#endif
+
+#if 1
+void _custom_ssds_need_sync_cw_in_234g_variable_default(module_type module,kal_bool *need_sync)
+{
+    *need_sync = KAL_FALSE;
+
+    return;
+}
+
+
+void _custom_ssds_need_sync_cw_in_234g_variable(module_type module,kal_bool *need_sync,kal_uint32 op_id,kal_char *mccmnc)
+{
+    /* currently only for VHA which has such characters:CW always on in 4G and */
+    /* CW controlled by NW in non-4G and the CW not synced in 4G and non-4G NW */
+    /* So need UE to sync CW setting in 4G and non-4G by itself */
+    switch(op_id)
+    {
+        case 3:
+        case 108:
+        case 153:
+            *need_sync = KAL_TRUE;
+            break;
+        default:
+            break;
+    }
+
+    return;
+}
+void _custom_ssds_need_sync_cw_in_234g_nvram_variable(module_type module,kal_bool *need_sync,
+                                                          custom_ssds_config_type  cfg_type)
+{
+    sim_interface_enum	sim_id;
+
+    sim_id = l4c_gemini_get_actual_sim_id((sim_interface_enum)(module - MOD_SSDS));
+			
+    if (KAL_TRUE == (custom_ssds_config_get_common_config(NVRAM_SSDS_NEED_SYNC_CW_IN_234G, sim_id,(void*)need_sync,cfg_type)))
+    {
+        kal_prompt_trace(module, "Use NVRAM: if send sync cw in 234g");
+        kal_prompt_trace(module,"need_sync is:%d ", *need_sync);//for debug
+    }
+
+    return;
+}
+
+void _custom_ssds_get_need_sync_cw_in_234g_from_common_file(module_type module,kal_bool *need_sync,
+                                                          custom_ssds_config_type  cfg_type)
+{
+    sim_interface_enum sim_id;
+    sim_id = l4c_gemini_get_actual_sim_id((sim_interface_enum)(module - MOD_SSDS));
+    custom_ssds_config_get_need_sync_cw_in_234g_from_common_file(sim_id,need_sync,cfg_type);
+}
+
+
+void custom_ssds_need_sync_cw_in_234g_variable(module_type module,kal_bool *need_sync,kal_uint32 op_id,kal_char *mccmnc)
+{
+    /* Priority 5 :default config */
+    _custom_ssds_need_sync_cw_in_234g_variable_default(module,need_sync);
+
+    /* Priority 4 :mcf ota config */
+    _custom_ssds_need_sync_cw_in_234g_nvram_variable(module,need_sync,CUSTOM_SSDS_CFG_TYPE_MCF_OTA);
+    _custom_ssds_get_need_sync_cw_in_234g_from_common_file(module,need_sync,CUSTOM_SSDS_CFG_TYPE_MCF_OTA);
+
+    /* Priority 3 :default OP config */
+    _custom_ssds_need_sync_cw_in_234g_variable(module,need_sync,op_id,mccmnc);
+
+    /* Priority 2 :mcf ota by op config */
+    _custom_ssds_need_sync_cw_in_234g_nvram_variable(module,need_sync,CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP);
+    _custom_ssds_get_need_sync_cw_in_234g_from_common_file(module,need_sync,CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP);
+
+    /* Priority 1 :nvram file- By ELT(Nvram editor) or Meta Tool */
+    _custom_ssds_need_sync_cw_in_234g_nvram_variable(module,need_sync,CUSTOM_SSDS_CFG_TYPE_NVRAM);
+    _custom_ssds_get_need_sync_cw_in_234g_from_common_file(module,need_sync,CUSTOM_SSDS_CFG_TYPE_NVRAM);
+
+    return;
+}
+#endif
+
+#if 1
+
+void _custom_ssds_need_send_test_cmd_default(module_type module,kal_bool *need_send)
+{
+    *need_send = KAL_FALSE;
+
+	return;
+}
+
+
+void _custom_ssds_need_send_test_cmd(module_type module,kal_bool *need_send,kal_uint32 op_id,kal_char *mccmnc)
+{
+    switch(op_id)
+    {
+        case 5://DT
+            *need_send = KAL_TRUE;
+            break;
+        default:
+            break;
+    }
+
+	return;
+}
+
+void _custom_ssds_get_need_send_test_cmd_from_common_file(module_type module,
+	                                                      kal_bool *need_sync,
+                                                          custom_ssds_config_type  cfg_type)
+{
+    sim_interface_enum sim_id;
+    sim_id = l4c_gemini_get_actual_sim_id((sim_interface_enum)(module - MOD_SSDS));
+    custom_ssds_config_get_need_send_test_cmd_from_common_file(sim_id,need_sync,cfg_type);
+}
+
+
+void custom_ssds_need_send_test_cmd(module_type module,kal_bool *need_send,kal_uint32 op_id,kal_char *mccmnc)
+{
+    /* Priority 5 :default config */
+    _custom_ssds_need_send_test_cmd_default(module,need_send);
+    /* Priority 4 :mcf ota config */
+    _custom_ssds_get_need_send_test_cmd_from_common_file(module,need_send,CUSTOM_SSDS_CFG_TYPE_MCF_OTA);
+    /* Priority 3 :default OP config */
+    _custom_ssds_need_send_test_cmd(module,need_send,op_id,mccmnc);
+    /* Priority 2 :mcf ota by op config */
+    _custom_ssds_get_need_send_test_cmd_from_common_file(module,need_send,CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP);
+    /* Priority 1 :nvram file- By ELT(Nvram editor) or Meta Tool */
+    _custom_ssds_get_need_send_test_cmd_from_common_file(module,need_send,CUSTOM_SSDS_CFG_TYPE_NVRAM);
+    return;
+}
+
+#endif
+
+
+/********new design begin***********/
+
+#if 1
+void custom_ssds_get_req_path_default_config(custom_ssds_params_info_struct *params_info,custom_ssds_path_type *atcmd_path_type)
+{
+    *atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+
+    if(CUSTOM_SSDS_ATCMD_TYPE_UNKNOWN == params_info->atcmd_type)
+    {/* unknown SS type: select CS domain */
+        *atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+        return;
+    }
+
+    /* default cofiguration:                 *
+     *   when ims registered: PS domain      *
+     *   when ims not registered:CS domain   *
+     * CW default configuratin:              *
+     *     when ims registered: TB solution  *
+     *     when ims not registered:CS domain */
+    if(KAL_TRUE == params_info->is_ims_registered)
+    {
+        *atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+
+        //default call waiting config: ims registered: terminal based solution; ims not registered: cs
+        if(CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING == params_info->atcmd_type
+            || CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING == params_info->atcmd_type)
+        {
+            *atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+        }
+    }
+    else
+    {
+        *atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+    }
+
+    return;
+}
+
+custom_ssds_path_type custom_ssds_get_req_path_config(custom_ssds_params_info_struct *params_info,custom_ssds_path_type *req_path_type_in)
+{
+    custom_ssds_path_type   atcmd_path_type = *req_path_type_in;
+    kal_bool need_check_roaming_data_off = KAL_TRUE;
+    kal_bool need_check_roaming_data_off_cs_only = KAL_FALSE;
+    kal_bool need_check_roaming_ims = KAL_FALSE;
+    kal_bool need_check_roaming = KAL_FALSE;
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+    #if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+    #endif
+#endif
+
+    /* operator customization */
+    switch (params_info->op_id)
+    {
+        case 0: /* Default values */
+        {
+            break;
+        }
+        case 1:/* CMCC */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                //case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_FORWARDING:
+                //case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_FORWARDING:
+                //    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                //    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    if(KAL_TRUE != params_info->is_ims_registered)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY;
+                        params_info->only_use_real_error_code = KAL_TRUE;
+                    }
+                    else
+                    {//TB based solution
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    if(KAL_TRUE != params_info->is_ims_registered)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                        params_info->only_use_real_error_code = KAL_TRUE;
+                    }
+                    else
+                    {//TB based solution(default value)
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR://volte card:not support; non-volte card:cs
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIP:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_COLP:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_COLR:
+                    if(KAL_TRUE != params_info->is_ims_registered)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY;
+                        params_info->only_use_real_error_code = KAL_TRUE;
+                    }
+                    else
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR://volte card:not support; non-volte card:cs
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIP:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_COLP:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_COLR:
+                    if(KAL_TRUE != params_info->is_ims_registered)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                        params_info->only_use_real_error_code = KAL_TRUE;
+                    }
+                    else
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                    if(CUSTOM_SSDS_OUTGOING_CALL_BARRING == params_info->cb_type)
+                    {
+                        if(KAL_TRUE != params_info->is_ims_registered)
+                        {
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY;
+                            params_info->only_use_real_error_code = KAL_TRUE;
+                        }
+                        else
+                        {//volte card:not support
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                        }
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    if(CUSTOM_SSDS_OUTGOING_CALL_BARRING == params_info->cb_type)
+                    {
+                        if(KAL_TRUE != params_info->is_ims_registered)
+                        {
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                            params_info->only_use_real_error_code = KAL_TRUE;
+                        }
+                        else
+                        {//volte card:not support
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                        }
+                    }
+                    break;
+                default:
+                    break;
+            }
+            if((KAL_TRUE == sbp_query_md_feature_by_ps(SBP_DISABLE_SS_WHEN_DATA_OFF,(protocol_id_enum)(params_info->ps_id))) &&
+               ((CUSTOM_SSDS_PATH_TYPE_PS_PREFER == atcmd_path_type) ||
+               (CUSTOM_SSDS_PATH_TYPE_PS_ONLY == atcmd_path_type) ||
+               (CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY == atcmd_path_type))&&
+               (KAL_TRUE != params_info->is_mobile_data_setting_enabled))
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_NO_CONN_845;
+                return atcmd_path_type;
+            }
+            break;
+        }
+        case 2:/* CU */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                //case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_FORWARDING:
+                //case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_FORWARDING:
+                //    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                //    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    if(KAL_TRUE != params_info->is_ims_registered)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY;
+                        params_info->only_use_real_error_code = KAL_TRUE;
+                    }
+                    else
+                    {//TB based solution
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    if(KAL_TRUE != params_info->is_ims_registered)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                        params_info->only_use_real_error_code = KAL_TRUE;
+                    }
+                    else
+                    {//TB based solution
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR://volte card:not support; non-volte card:cs
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIP:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_COLP:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_COLR:
+                    if(KAL_TRUE != params_info->is_ims_registered)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY;
+                        params_info->only_use_real_error_code = KAL_TRUE;
+                    }
+                    else
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR://volte card:not support; non-volte card:cs
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIP:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_COLP:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_COLR:
+                    if(KAL_TRUE != params_info->is_ims_registered)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                        params_info->only_use_real_error_code = KAL_TRUE;
+                    }
+                    else
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    }
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 3: /* Orange_FR */
+        {
+            //atcmd_path_type = custom_ssds_get_ps_prefer_op_default_config(params_info->atcmd_type);
+            //custom_ssds_get_clir_tb_config(params_info->atcmd_type,&atcmd_path_type);
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+            /* special network config */
+            if(0 == strcmp(params_info->mcc, "214"))  /* orange-Spain */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    //IMS registered: CW TB solution
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "226"))/* orange-Romania */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    //IMS registered: CW TB solution
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "260")) /* orange-Poland */
+            {
+                if(0 == strcmp(params_info->mnc, "03"))
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    // CLIR GET TB Solution
+                    switch(params_info->atcmd_type)
+                    {
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                            break;
+                        default:
+                            break;
+                    }
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "231"))  /* orange-Slovakia */
+            {
+                if(0 == strcmp(params_info->mnc, "01"))
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    //IMS registered: CW TB solution
+                    switch(params_info->atcmd_type)
+                    {
+                        case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                            break;
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                            break;
+                        default:
+                            break;
+                    }
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "206")) /* orange-Belgium */
+            {
+                if(0 == strcmp(params_info->mnc, "10"))
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    // CLIR GET TB Solution
+                    switch(params_info->atcmd_type)
+                    {
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                            break;
+                        default:
+                            break;
+                    }
+                }
+            }
+			else if(0 == strcmp(params_info->mcc, "308")) /* SPM-US */
+            {
+                if((0 == strcmp(params_info->mnc, "01")) || (0 == strcmp(params_info->mnc, "03")))
+                {
+                   atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "370"))/*orange-dominican*/
+            {
+                /*data off or roaming status*/
+                if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER ||
+                   atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY   ||
+                   atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY)
+                {
+                    if((KAL_TRUE != params_info->is_mobile_data_setting_enabled) ||
+                       (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status) )
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        return atcmd_path_type;
+                    }
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "602")) /* orange-Egypt */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            else if(0 == strcmp(params_info->mcc, "604")) /* orange-Morocco */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    default:
+                        break;
+                }
+                if((CUSTOM_SSDS_PATH_TYPE_PS_PREFER == atcmd_path_type) ||
+                   (CUSTOM_SSDS_PATH_TYPE_PS_ONLY == atcmd_path_type)   ||
+                   (CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY == atcmd_path_type))
+                   {
+                       need_check_roaming = KAL_TRUE;
+                   }
+            }
+            else if(0 == strcmp(params_info->mcc, "259")) /* orange-Moldova */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            else if(0 == strcmp(params_info->mcc, "270")) /* orange-Luxembourg */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            }
+			else if(0 == strcmp(params_info->mcc, "416")) /* orange-Jordan */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "608")) /* orange-Senagal */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;						
+                    default:
+                        break;
+                }
+            }		
+			else if(0 == strcmp(params_info->mcc, "647")) /* orange-Reunion Mayotte */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+				switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "340")) /* orange-Caribbean */
+            {
+                atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            break;
+        }
+        case 5: /* TMOEU */
+        {
+            //atcmd_path_type = custom_ssds_get_ps_prefer_op_default_config(params_info->atcmd_type);
+            //custom_ssds_get_clir_tb_config(params_info->atcmd_type,&atcmd_path_type);
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    if(KAL_TRUE != params_info->is_ims_registered)
+                    {
+                        //check whether the sim card is volte sim card
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY;
+                        params_info->only_use_real_error_code = KAL_TRUE;                        
+                    }
+                    else
+                    {
+                        //if ims registered, do terminal based
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }			 
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    if(KAL_TRUE != params_info->is_ims_registered)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                        params_info->only_use_real_error_code = KAL_TRUE;
+                    }
+                    else
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_832;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    if(KAL_TRUE != params_info->is_ims_registered)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY;
+                        params_info->only_use_real_error_code = KAL_TRUE;
+                    }
+                    else
+                    {//TB based solution
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    if(KAL_TRUE != params_info->is_ims_registered)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                        params_info->only_use_real_error_code = KAL_TRUE;
+                    }
+                    else
+                    {//TB based solution
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                    break;
+                default:
+                    break;
+            }
+            /* special network config */
+            if(0 == strcmp(params_info->mcc, "204")) /* Netherlands/DTAG */
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                        /* DTAG/Netherlands Call barring should not be supported in XCAP/Ut or CS domain */
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                        break;
+                    default:
+                        break;
+                }
+            }            
+            if(0 == strcmp(params_info->mcc, "216")) /* Hungary /DTAG */
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            
+            if(0 == strcmp(params_info->mcc, "276")) /* Albania/DTAG */
+            {
+                need_check_roaming = KAL_TRUE;
+            }
+            /* for OP05, if roaming and data_roaming off, still can use xcap */
+            else if((KAL_TRUE != params_info->is_data_roaming_setting_enabled) &&
+                (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status))
+            {
+                return atcmd_path_type;
+            }
+            break;
+        }
+        case 6: /* Vodafone */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            /* special network config */
+            if(0 == strcmp(params_info->mcc, "234")) /* Vodafone-United Kingdom */
+            {
+                if(0 == strcmp(params_info->mnc, "15"))
+                {
+                    if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                        params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "222"))
+            {
+                if(0 == strcmp(params_info->mnc, "10")) /* Vodafone-Italy */
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    if((KAL_TRUE != params_info->is_ims_registered) &&
+                        (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                         params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING))
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    }
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "214")) /* Vodafone-Spain */
+            {
+                if(KAL_TRUE == params_info->is_ims_registered)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                }
+                else
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "262"))
+            {
+                if(0 == strcmp(params_info->mnc, "02") ||
+                    0 == strcmp(params_info->mnc, "04") ||
+                    0 == strcmp(params_info->mnc, "09"))
+                {/* Vodafone-Germany */
+                    if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                        params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "286"))
+            {
+                /* Vodafone-Turkey */
+                if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                    params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING )
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+            }
+            else if(0 == strcmp(params_info->mcc, "204")) /* Vodafone-NL */
+            {
+                if(KAL_TRUE != params_info->is_ims_registered ||
+                    CUSTOM_SSDS_IMS_DOMAIN_TYPE_WFC == params_info->ims_domain)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+                if((CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status) &&
+                    (KAL_TRUE == params_info->is_ct_card))
+                {
+                   atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "230"))
+            {
+                if(0 == strcmp(params_info->mnc, "03")) /* Vodafone-CZ */
+                {
+                    if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                        params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "602"))
+            {
+                if(0 == strcmp(params_info->mnc, "02")) /* Vodafone-Egypt */
+                {
+                    if(atcmd_path_type != CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION &&
+                        (!params_info->is_mobile_data_setting_enabled || params_info->roaming_status != CUSTOM_SSDS_ROAMING_TYPE_NO))
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    }
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "530"))
+            {
+                if(0 == strcmp(params_info->mnc, "01")) /* Vodafone-New Zealand */
+                {
+                    if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                        params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                    if(params_info->is_ims_registered == KAL_FALSE)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    }
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "216")) /* Vodafone-Hungary */
+            {
+                if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING ||
+                    params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "280")) /* VDF/CyTa Cyprus */
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+                /* data off CS only */
+                if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER ||
+                   atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY   ||
+                   atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY)
+                {
+                    if((KAL_TRUE != params_info->is_mobile_data_setting_enabled) ||
+                       (KAL_TRUE != params_info->is_data_roaming_setting_enabled))
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        return atcmd_path_type;
+                    }
+               }
+            }
+            else if(0 == strcmp(params_info->mcc, "427")) /* Vodafone-Qatar */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                        break;
+                    default:
+                        break;
+                }
+            }
+			else if(0 == strcmp(params_info->mcc, "640")) /* Vodacom/Tanzania */
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            need_check_roaming_data_off = KAL_FALSE;
+            break;
+        }
+        case 7: /* AT&T */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+            /* special network config */
+            if(0 == strcmp(params_info->mcc, "334")) /* Mexico */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                    params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                }
+                else if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING ||
+                        params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING ||
+						params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+						params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                }
+            }
+            /* for OP07, if roaming and data_roaming off, still can use xcap */
+            if((KAL_TRUE != params_info->is_data_roaming_setting_enabled) &&
+                (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status))
+            {
+                return atcmd_path_type;
+            }
+            break;
+        }
+        case 145:/* CRICKET */
+        case 196:/* FIRSTNET */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+            /* for OP07, if roaming and data_roaming off, still can use xcap */
+            if((KAL_TRUE != params_info->is_data_roaming_setting_enabled) &&
+                (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status))
+            {
+                return atcmd_path_type;
+            }
+            break;
+        }
+        case 8:/* TMO */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = params_info->is_ims_registered?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+            /* for OP08, if roaming and data_roaming off, still can use xcap */
+            if((KAL_TRUE != params_info->is_data_roaming_setting_enabled) &&
+                (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status))
+            {
+                return atcmd_path_type;
+            }
+            break;
+        }
+        case 9:/* CT: only support CF and CW */
+	    case 304:/* CTMO: only support CF and CW --aomen*/
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch (params_info->atcmd_type)
+            {//if international roaming,same as CMCC
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_FORWARDING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_FORWARDING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    if(KAL_TRUE != params_info->is_ims_registered)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY;
+                        params_info->only_use_real_error_code = KAL_TRUE;
+                    }
+                    else
+                    {//TB based solution
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    if(KAL_TRUE != params_info->is_ims_registered)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                        params_info->only_use_real_error_code = KAL_TRUE;
+                    }
+                    else
+                    {//TB based solution
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+					break;
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+				case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                    break;
+                default:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+            }
+            if((KAL_TRUE == sbp_query_md_feature_by_ps(SBP_DISABLE_SS_WHEN_DATA_OFF,(protocol_id_enum)(params_info->ps_id))) &&
+               ((CUSTOM_SSDS_PATH_TYPE_PS_PREFER == atcmd_path_type) ||
+               (CUSTOM_SSDS_PATH_TYPE_PS_ONLY == atcmd_path_type) ||
+               (CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY == atcmd_path_type))&&
+               (KAL_TRUE != params_info->is_mobile_data_setting_enabled))
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_NO_CONN_845;
+                return atcmd_path_type;
+            }
+            break;
+        }
+        case 11: /* H3G */
+        {
+            if((0 == strcmp(params_info->mcc, "240"))) // Sweden
+            {
+                if((0 == strcmp(params_info->mnc, "02")))
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                    switch(params_info->atcmd_type)
+                    {
+                        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                            break;
+                        case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                            break;
+                        default:
+                            break;
+                    }
+                    need_check_roaming_data_off = KAL_FALSE;
+                }
+            }
+            else if((0 == strcmp(params_info->mcc, "238"))) // Denmark
+            {
+                if((0 == strcmp(params_info->mnc, "06")))
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                    switch(params_info->atcmd_type)
+                    {
+                        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                            atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                            break;
+                        case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                            atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                            break;
+                        default:
+                            break;
+                    }
+                    need_check_roaming_data_off = KAL_FALSE;
+                }
+            }
+            else if((0 == strcmp(params_info->mcc, "232"))) // Austria
+            {
+                if((0 == strcmp(params_info->mnc, "05")) || (0 == strcmp(params_info->mnc, "10")) || (0 == strcmp(params_info->mnc, "14")))
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                    switch(params_info->atcmd_type)
+                    {
+                        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                            break;
+                        default:
+                            break;
+                    }
+                    need_check_roaming_ims = KAL_TRUE;
+                }
+            }
+            else if((0 == strcmp(params_info->mcc, "234")) || (0 == strcmp(params_info->mcc, "235")))
+            {
+                // UK: XCAP over LTE while WFC registered, otherwise CSFB
+                if ((CUSTOM_SSDS_IMS_DOMAIN_TYPE_WFC == params_info->ims_domain) && (KAL_FALSE == params_info->lte_attached))
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            else if((0 == strcmp(params_info->mcc, "272"))) // Ireland
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+                need_check_roaming = KAL_TRUE;
+            }
+            break;
+        }
+        case 12: /* VERIZON */
+        {
+            atcmd_path_type =  CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+            break;
+        }
+        case 15:/* TELEFONICA */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 16:/* EE */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 17: /* DOCOMO */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+        case 18:/*  RJIO-IND */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+                default:
+                    break;
+            }
+            if((KAL_TRUE != params_info->is_data_roaming_setting_enabled) &&
+                (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status))
+            {
+                return atcmd_path_type;
+            }
+            break;
+        }
+        case 19:/* TELSTRA-Australia */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    if(KAL_TRUE == params_info->is_ims_registered)
+					{
+						atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+					}
+					else
+					{
+						if(params_info->user_volte_subscription_status == CUSTOM_SSDS_STATUS_USER_VOLTE_SUBSCRIBED)
+						{
+							atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+						}
+						else if(params_info->user_volte_subscription_status == CUSTOM_SSDS_STATUS_USER_VOLTE_NOT_SUBSCRIBED)
+						{
+							atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+						}
+						else
+						{
+							atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY_PDN;
+						}
+					}
+                    break;
+                default:
+                    break;
+            }
+
+            if((KAL_TRUE != params_info->is_data_roaming_setting_enabled) &&
+                (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status))
+            {
+                return atcmd_path_type;
+            }
+            break;
+        }
+        case 20: /* SPRINT */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_FORWARDING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_FORWARDING:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+                default:
+                    break;
+            }           
+			break;
+        }
+        case 50:/* Softbank */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            /* Special case for softbank [OTR-SS-110027]                                      *
+             * [Home Network]                                                                 *
+             *   - turned off the "Cellular data" and the "4G" of the Preferred network type  *
+             *  [Roaming Network]                                                             *
+             *  If the UE meets one of the following:                                         *
+             *   - turned off the "Cellular data" and the "4G" of the Preferred network type  *
+             *   - turned off the "4G" of the Preferred network type and the "Data roaming"   *
+             *  And the UE shall notify to the user that SS Configuration was failed.         */
+            if((CUSTOM_SSDS_PATH_TYPE_PS_PREFER == atcmd_path_type) ||
+                (CUSTOM_SSDS_PATH_TYPE_PS_ONLY == atcmd_path_type) ||
+                (CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY == atcmd_path_type))
+            {
+                if (((params_info->preferred_network_type & RAT_LTE) != RAT_LTE) &&
+                    ((KAL_TRUE != params_info->is_mobile_data_setting_enabled) ||
+                    ((KAL_TRUE != params_info->is_data_roaming_setting_enabled) && (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status))))
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_100;
+                    return atcmd_path_type;
+                }
+            }
+            break;
+        }
+        case 100: /* CSL-HK */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+        case 101: /* PCCW-HK */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+        case 102: /* Smartone-HK */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    if(CUSTOM_SSDS_OUTGOING_CALL_BARRING == params_info->cb_type) 
+					{
+						atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+					}
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 103: /* Singtel */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 104:/* Starhub-Singapore */
+       	{
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+            {/* CW service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+            }
+			else if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                    params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+			{			    
+				atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+			}
+            break;
+        }
+        case 105: /* AMX */
+        {/* default config */
+            if(0 == strcmp(params_info->mcc, "744"))
+			{
+			     /* Claro-Paragauy */
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }				
+			}		
+            break;
+        }
+        case 106: /* 3HK-HK */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+        case 107:/* SFR */
+        {
+            if(params_info->ims_domain == CUSTOM_SSDS_IMS_DOMAIN_TYPE_WFC &&
+               params_info->rf_status == CUSTOM_SSDS_RF_OFF)
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+            }else
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            }
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 108: /* TWN */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+        case 109: /* CHT */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 110: /* FET */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+        case 111: /* VDF-INDIA */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR)
+            {
+                /* MOLY00324132:
+                1) Set CLIR: terminal based; CME Error:4 greys out CLIR settings
+                2) Get CLIR: NW based to avoid invalid pop-up on MMI query */
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+            }
+            break;
+        }
+        case 112: /* TELCEL */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            if((0 == strcmp(params_info->mcc, "334")))
+            {
+                /* TELCEL--Mexico */
+				atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                    params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+                {/* CW service*/
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                } 
+				if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+					params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+				{
+					atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;	
+				}
+            }
+            break;
+        }
+        case 113: /* Beeline */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 114: /* KT */
+        {
+            if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIP ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIP)
+            {/* CLIR or CLIP service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            else
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+            }
+            break;
+        }
+        case 115: /* SKT */
+        {
+            if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIP ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIP)
+            {/* CLIR or CLIP service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            else
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+            }
+            break;
+        }
+        case 116: /* UPLUS */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+            break;
+        }
+        case 117:/* SmartFren-Indonesia */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR
+                || params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+			}
+            else if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING
+                || params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+            {
+                atcmd_path_type = (params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_100;
+            }
+            else if(CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status)
+            {
+                atcmd_path_type = (params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_PREFER:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                return atcmd_path_type;
+            }
+            break;
+        }
+        case 118: /* YTL-Malaysia */
+        {
+            if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+            {/* CLIR service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+            }
+            break;
+        }
+        case 119: /* NATCOM */
+        {
+            /* default config */
+            break;
+        }
+        case 120:/* CLARO */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+            /* special network config */
+            if(0 == strcmp(params_info->mcc, "732"))
+			{
+			    /* Claro-Colombia */
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                }
+			}
+            else if(0 == strcmp(params_info->mcc, "724"))
+			{
+			    /* Claro-Brazil */
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    default:
+                        break;
+                }
+			}
+            else if(0 == strcmp(params_info->mcc, "722"))
+			{
+			    /* Claro-Argentina */
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                if(KAL_TRUE == params_info->is_ims_registered)
+                {
+                    if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING 
+                        || params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                }
+			}
+            else if(0 == strcmp(params_info->mcc, "730"))
+			{
+                /* Claro-Chile */
+                atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_PREFER:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING 
+                    || params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                }
+			}
+			else if(0 == strcmp(params_info->mcc, "740"))
+			{
+			    /* Claro-Ecuador */
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+			}
+            else if(0 == strcmp(params_info->mcc, "748"))
+			{
+			     /* Claro-Uruguay */
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                if(KAL_TRUE == params_info->is_ims_registered)
+                {
+                    if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING 
+                        || params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                }
+			}
+            else if(0 == strcmp(params_info->mcc, "716"))
+			{
+			     /* Claro-Peru */
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }				
+			}
+            /* 704,706,708,710,712,714 is in same group of Claro, 
+             * if one region is changed, please check whether need sync the changes to other region
+             */
+            else if((0 == strcmp(params_info->mcc, "704")) || /* Claro-Guatemala */
+                    (0 == strcmp(params_info->mcc, "706")) || /* Claro-Salvador */
+                    (0 == strcmp(params_info->mcc, "708")) || /* Claro-Honduras */
+                    (0 == strcmp(params_info->mcc, "710")) || /* Claro-Nicaragua */
+                    (0 == strcmp(params_info->mcc, "712")) || /* Claro-Costa Rica */
+                    (0 == strcmp(params_info->mcc, "714")))   /* Claro-Panama */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+				/*special case for Claro-Guatemala, NOT support XCAP. Issue CR: ALPS05342265/ALPS05367594*/
+                if((0 == strcmp(params_info->mcc, "704"))) {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                        params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+                    {
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    }
+                }
+				else if((0 == strcmp(params_info->mcc, "706"))) { /* modify CW TB for 70601 due to Issue CR:ALPS06187279*/
+                    if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                        params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                }
+
+                if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR
+                    || params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                }
+            }
+            break;
+        }
+        case 121: /* BELL */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 122: /* AIS-Thailand */
+        {
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+				
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+				case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+					atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                    break;
+					
+                default:
+                    break;
+            }
+            if ((CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status) && (KAL_TRUE != params_info->is_mobile_data_setting_enabled))
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+				return atcmd_path_type;
+            }
+            break;
+        }
+        case 124: /* APTG */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+			}
+            break;
+        }
+        case 125: /* DTAC-Thailand */
+        {
+            if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+            {/* CW service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+            }
+            break;
+        }
+        case 126: /* AVEA */
+        {
+            /* default config */
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+        case 127: /* MEGAFON */
+        {
+            if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+            {/* CLIR service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+            }
+            else
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+
+            if(0 == strcmp(params_info->mcc, "250"))
+			{
+			    if(0 == strcmp(params_info->mnc, "02")) /* MEGAFON-Russian */
+			    {
+                    if ((KAL_FALSE == params_info->is_ims_registered) &&
+						(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                        params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING))
+                    {/* CW service*/
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+			    }
+            }
+            break;
+        }
+        case 128: /* DNA */
+        {
+            if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+            {/* CLIR service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+            }
+            break;
+        }
+        case 129: /* KDDI */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 130: /* TIM */
+        {
+            if(0 == strcmp(params_info->mcc, "222")) /* TIM Italy */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+                need_check_roaming_data_off_cs_only = KAL_TRUE;
+            }
+            else if(0 == strcmp(params_info->mcc, "724")) /* TIM Brazil */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            break;
+        }
+        case 131: /* TRUEMOVE-Thailand */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+            {/* CW service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+            }
+            break;
+        }
+        case 132: /* MOVISTAR */
+        {
+            if(0 == strcmp(params_info->mcc, "334"))
+			{/* Movistar - Mexico */
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "724"))
+            { /*Vivo - Brazil*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "716"))
+			{/* Movisatr - Peru */
+                if(params_info->ims_domain == CUSTOM_SSDS_IMS_DOMAIN_TYPE_WFC)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+                if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                   params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+                {
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_PREFER:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+                break;
+            }
+            else if(0 == strcmp(params_info->mcc, "722"))
+			{/* Movistar - Argentina */
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                   params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "730"))
+			{/* Movistar - Chile */
+                if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                   params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                }
+                else if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING ||
+                        params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+				else if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                   params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "748"))
+			{/* Movistar - Uruguay */
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                if((params_info->is_ims_registered) && 
+                    (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                     params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING))
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "732"))
+            {/* Movistar - Colombia */
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_FORWARDING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_FORWARDING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                        break;
+                    default:
+                        break;
+                }
+                if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER ||
+                   atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY   ||
+                   atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY)
+                {
+                    if(CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status)
+                    {/*roaming or data off, CS*/
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        return atcmd_path_type;
+                    }
+                }
+            }
+            else if (0 == strcmp(params_info->mcc, "740"))
+            {/* Movistar - Ecuador */
+                /*other settings follow default*/
+                if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER ||
+                   atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY   ||
+                   atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY)
+                {
+                    if(KAL_FALSE == params_info->is_mobile_data_setting_enabled)
+                    {/*data off, CS*/
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    }
+                }
+            }
+            break;
+        }
+        case 133: /* DU */
+        {
+            if(0 == strcmp(params_info->mcc, "424")) /** United Arab Emirates **/
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                 switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                        break;
+                    default:
+                        break;
+				}		
+            }
+            break;
+        }
+        case 134: /* ELISA */
+        {
+            if(0 == strcmp(params_info->mcc, "244")) /* Finland */
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "248")) /* Estonia */
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            } 
+            break;
+        }
+        case 135: /* MTS */
+        {
+            if(0 == strcmp(params_info->mcc, "250")) /* Russia */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "257")) /* Belarus */
+            {
+                /* CSFB if mobile data switch off */
+                if(KAL_TRUE != params_info->is_mobile_data_setting_enabled)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+                /* CSFB if mobile data when roaming switch off */                
+                need_check_roaming_data_off_cs_only = KAL_TRUE;
+                
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            break;
+        }
+        case 136: /* ENTEL */
+        {
+            if(0 == strcmp(params_info->mcc, "730")) /** Chile **/
+			{
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                   params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+                {
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+                if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                   params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                }
+            }
+
+            if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER ||
+               atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY)
+            {
+				/* Ignore mobile data off for Entel/Chile due to ALPS05790200 */
+                if((!params_info->is_mobile_data_setting_enabled) && (0 != strcmp(params_info->mcc, "730")))
+                {
+                    if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_DISABLE_SS_WHEN_DATA_OFF,(protocol_id_enum)(params_info->ps_id)))
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_NO_CONN_845;
+                    }
+                    else
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_100;
+                    }
+                }
+            }
+            break;
+        }
+        case 137: /* TELE2 */
+        {
+            if(0 == strcmp(params_info->mcc, "250"))  //Russia
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "240")) //Sweden
+            {                        
+                if(0 == strcmp(params_info->mnc, "07"))
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "204")) //NL)
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "246")) //Lithuania)
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "248")) //Estonia
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            break;
+        }
+        case 139: /* BOUYGUES */
+        {
+            if (params_info->atcmd_type != CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING &&
+                params_info->atcmd_type != CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING &&
+                params_info->ims_domain == CUSTOM_SSDS_IMS_DOMAIN_TYPE_WFC &&
+                params_info->rf_status == CUSTOM_SSDS_RF_OFF)
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                break;
+            }
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 140: /* MTN */
+        {
+            if(0 == strcmp(params_info->mcc, "620")) /* MTN/Ghana */
+			{
+				if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+					params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+				{/* CW service*/
+					atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+				}
+			}
+            break;
+        }
+        case 141: /* CELL_C */
+        {
+            /* default config */
+            break;
+        }
+        case 143: /* TURKCELL */
+        {
+            if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+            {/* CW service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+            }
+            else
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            break;
+        }
+        case 144: /* SMILTE */
+        {
+            /* default config */
+            break;
+        }
+        case 146: /* ETISALAT */
+        {
+            if(0 == strcmp(params_info->mcc, "424")) /** United Arab Emirates **/
+			{
+				atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:		
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+					default:
+                        break;
+                }
+            }
+            break;
+        }
+        case 147: /* AIRTEL-India */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR)
+            {
+                /* MOLY00324132:
+                1) Set CLIR: terminal based; CME Error:4 greys out CLIR settings
+                2) Get CLIR: NW based to avoid invalid pop-up on MMI query */
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+            }
+            break;
+        }
+        case 148:/* Seatel-Cambodia(4G only solution) */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 149: /* CMHK-HK */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+        case 150: /* SWISSCOM_SCHWEIZ_AG */
+        {
+            /* UT interface over 2G/3G/4G */ 
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 151: /* M1-Singapore */
+        {
+            if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+            {/* CW service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+            }		
+			else if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                    params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+			{/* CLIR service*/			    
+				atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+			}
+            else
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            break;
+        }
+        case 152: /* OPTUS-AUS */
+        {
+            if ((params_info->is_ims_registered)&&
+                (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                 params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING))
+            {/* CW service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            }
+            else if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+            {/* CLIR service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+            }
+            break;
+        }
+        case 153: /* VHA-AUS */
+        {
+            if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                 params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+            {/* CW service*/
+                if(params_info->is_ims_registered && params_info->ims_domain == CUSTOM_SSDS_IMS_DOMAIN_TYPE_WFC
+                    && params_info->rf_status == CUSTOM_SSDS_RF_OFF)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                }
+				else
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+            }
+            else if((params_info->is_ims_registered) &&
+                (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                 params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR))
+            {/* CLIR service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+            }
+            break;
+        }
+        case 154:/* TELIA */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    if(0 == strcmp(params_info->mcc, "248"))//EE
+                    {
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_PREFER:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    }
+                    else
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    if(0 == strcmp(params_info->mcc, "246"))//LT
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                    else
+                    {
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    if(0 == strcmp(params_info->mcc, "244"))//FI
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    }
+                    break;                    
+                default:
+                    break;
+            }
+            need_check_roaming_data_off = KAL_FALSE;
+            break;
+        }
+        case 155: /* Digi */
+        {
+            /* default config */
+            if(0 == strcmp(params_info->mcc, "502"))
+			{
+			    if(0 == strcmp(params_info->mnc, "16"))  /* Malaysia */
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "216"))
+			{
+			    if(0 == strcmp(params_info->mnc, "03"))
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                    if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                        params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+                    {/* CW service*/
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    }
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "226"))
+			{
+			    if(0 == strcmp(params_info->mnc, "05"))
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+			    else if(0 == strcmp(params_info->mnc, "10"))
+                {
+                    if (CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING == params_info->atcmd_type)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_832;
+                    }
+                    else
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_CCWA;
+                    }
+                }
+            }
+            break;
+        }
+        case 156: /* TELENOR */
+        {
+            /* default config */
+            if(0 == strcmp(params_info->mcc, "216")) /* Telenor HU */
+            {
+                if(0 == strcmp(params_info->mnc, "01"))
+                {                
+                    switch(params_info->atcmd_type)
+                    {
+                        case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                            atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_PREFER:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                            break;
+                        default:
+                            break;
+                    }
+                }
+            }
+            if(0 == strcmp(params_info->mcc, "238"))
+            {
+                if(0 == strcmp(params_info->mnc, "02") || 0 == strcmp(params_info->mnc, "77"))
+                {
+                    if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                        params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+                    {/* CLIR service*/
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    }
+                    else if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                             params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+                    {/* CW service*/
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    }
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "242")) /* Telenor NO */
+            {
+                if(0 == strcmp(params_info->mnc, "01"))
+                {                
+                    switch(params_info->atcmd_type)
+                    {
+                        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                            break; 
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                            break;
+                        case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                            atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                            break;
+                        default:
+                            break;
+                    }
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "284"))
+            {
+                if(0 == strcmp(params_info->mnc, "05"))
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                        params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+                    {/* CW service*/
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;;
+                    }
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "240"))  /* Telenor SE*/
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "410"))
+            {
+                if(0 == strcmp(params_info->mnc, "06"))  /* Pakistan */
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+					if(params_info->ims_domain == CUSTOM_SSDS_IMS_DOMAIN_TYPE_WFC)
+					{
+						atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+					}
+					switch(params_info->atcmd_type)
+					{
+						case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+						case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+						case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+						case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+							atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+							break;
+						default:
+							break;
+					}
+					if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER ||
+						atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY   ||
+						atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY)
+					{
+						if(KAL_TRUE != params_info->is_mobile_data_setting_enabled)
+						{
+							atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+							return atcmd_path_type;
+						}
+					}
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "414"))
+            {
+                if(0 == strcmp(params_info->mnc, "06")) /* Myanmmar */
+                {
+                    if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                        params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+                    {/* CW service*/
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                    }
+                    else if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                             params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+                    {/* CLIR service*/
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                }
+            }
+            else if(0 == strcmp(params_info->mcc, "220")) /* Serbia */
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            else if((0 == strcmp(params_info->mcc, "297"))) /* Montenegro */
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+                need_check_roaming = KAL_TRUE;
+            }
+            break;
+        }
+        case 157:/* TELUS */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 158: /* Zain */
+        {
+           /*Kuwait*/
+            if(0 == strcmp(params_info->mcc, "419"))
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            else if(0 == strcmp(params_info->mcc, "420")) /* SA */
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            }			
+            break;
+        }
+        case 159: /* STC */
+        {
+            /*Bahrain*/
+            if(0 == strcmp(params_info->mcc, "426"))  
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            /*Kuwait*/
+            else if(0 == strcmp(params_info->mcc, "419"))
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            /*Saudi Arabia*/
+            else if(0 == strcmp(params_info->mcc, "420"))
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+					case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+					case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:					
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                        break;
+					case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+					case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+						atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+						break;
+                    default:
+                        break;
+			    }
+            }
+            break;
+        }
+        case 160: /* WEBE-Malaysia */
+        {
+            if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+            {/* CW service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+            }
+            break;
+        }
+        case 161: /* PLAY */
+        {
+            switch(params_info->atcmd_type)
+            {
+                // CLIR SET CS
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY_ALWAYS;
+                    break;
+                // CLIR GET TB Solution 
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR: 
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+
+            if(0 == strcmp(params_info->mcc, "260"))
+			{
+			    if(0 == strcmp(params_info->mnc, "06"))
+                {
+                    // CW PS Prefer
+                    switch(params_info->atcmd_type)
+                    {
+                        case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:                    
+                            atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_PREFER:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                            break;
+                        default:
+                            break;
+                    }
+                }
+            }
+            break;
+        }
+        case 162: /* FREEDOM */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+
+            if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY || atcmd_path_type ==CUSTOM_SSDS_PATH_TYPE_PS_PREFER )
+            {
+                if(CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+            }
+            break;
+        }
+        case 163: /* DIALOG-Srilanka */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+        case 164:/* Telenet Belgium */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 165: /* Sunrise */
+        {
+            if((KAL_TRUE == params_info->is_ims_registered) &&
+                (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                 params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING))
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            }
+
+            break;
+        }
+        case 166: /* SALT */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+        case 168: /* Eir */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+		case 170: /* Partner */
+        {
+            if(0 == strcmp(params_info->mcc, "425"))  /* Israel */
+            {
+				switch(params_info->atcmd_type)
+				{
+					case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+					case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+						atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+						break;
+					case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+					case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+						atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+						break;
+					default:
+						break;
+				}
+            }
+            break;
+        }
+        case 171: /* WOM */
+        {
+            /* default config */
+            break;
+        }
+        case 172: /* Altice Dominican*/
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+        case 175:/* TDC */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 176: /* TStar */
+        {
+            if ((KAL_TRUE == params_info->is_ims_registered) &&
+				(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                 params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING))
+            {/* CW service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+            }
+            else
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            break;
+        }
+        case 177: /* Telecom-Egypt */
+        {
+            /* default config */
+            break;
+        }
+        case 178: /* SMART */
+        {
+            /* default config */
+            if ((KAL_TRUE == params_info->is_ims_registered) &&
+				(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                 params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING))
+            {/* CW service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            }
+
+            if(0 == strcmp(params_info->mcc, "515"))
+			{
+			    if(0 == strcmp(params_info->mnc, "03")) /* Philippines */
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                        params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+                    {/* CW service*/
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                }
+            }
+            break;
+        }
+        case 179: /* NEWROZ */
+        {
+            /* default config */
+            break;
+        }
+        case 180: /* Swazi Mobile */
+        {
+            /* default config */
+            break;
+        }
+        case 181: /* TelKom-SA */
+        {
+            if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+            {/* CLIR service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+            }
+            return atcmd_path_type;
+            //break;
+        }
+        case 182: /* PROXIMUS */
+		{
+            if(0 == strcmp(params_info->mcc, "206"))
+			{
+			    if(0 == strcmp(params_info->mnc, "01"))
+                {
+                    switch(params_info->atcmd_type)
+                    {
+                        // CLIR SET CS
+                        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY_ALWAYS;
+                            break;
+                        // CLIR GET TB Solution 
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR: 
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                            break;
+                        default:
+                            break;
+                    }
+                }
+            }
+            break;
+        }
+        case 183: /* PERSONAL */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;                    
+                default:
+                    break;
+            }
+            /*data off or roaming status*/
+            if((KAL_TRUE != params_info->is_mobile_data_setting_enabled) ||
+                (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status) )
+            {
+                return atcmd_path_type;
+            }
+            break;
+        }
+        case 184: /* VIETEL-Vietnam */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 185: /* 2DEGREES-NZ */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            need_check_roaming = KAL_TRUE;
+            break;
+        }
+        case 186: /* IDEA-IND */
+        {
+            atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+                default:
+                    break;
+            }
+            if((KAL_TRUE != params_info->is_data_roaming_setting_enabled) &&
+                (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status))
+            {
+                return atcmd_path_type;
+            }
+            break;
+        }
+        case 187: /* SAFARICOM */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			switch(params_info->atcmd_type)
+			{
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+				case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+					atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;                      
+					break;
+				default:
+					break;
+			}			
+            break;
+        }
+        case 188: /* A1 */
+        {
+            if (0 == strcmp(params_info->mcc, "232")) /* Austria */
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        if (KAL_TRUE == params_info->is_ims_registered)
+                        {
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        }                        
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            if (0 == strcmp(params_info->mcc, "219")) /* Croatia */
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            if (0 == strcmp(params_info->mcc, "257")) /* Belarus */
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            if(0 == strcmp(params_info->mcc, "293")) /* Slovenia */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            }
+            break;
+        }
+        case 189: /* UMOBILE-Malaysia */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+				 case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                 case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+					break;	
+                default:
+                    break;
+            }
+			need_check_roaming = KAL_TRUE;
+            break;
+        }
+        case 190: /* TELKOM-KENYA */
+        {
+            /* default config */
+            break;
+        }
+        case 191: /* GrameenPhone-Bangladesh */
+        {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+        case 192: /* Robi-Bangladesh */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+		case 193: /* Banglalink-Bangladesh */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+			if ((KAL_TRUE == params_info->is_ims_registered) &&
+				(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                 params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING))
+            {/* CW service*/
+				atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+            }
+            break;
+        }
+        case 195: /* O2 */
+        {
+            if ((KAL_TRUE == params_info->is_ims_registered) &&
+				(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                 params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING))
+            {/* CW service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            }
+
+            if(0 == strcmp(params_info->mcc, "230"))
+			{
+			    if(0 == strcmp(params_info->mnc, "02")) /* O2-Czech */
+			    {
+                    if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR
+                        || params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+			    }
+            }
+            else if(0 == strcmp(params_info->mcc, "231"))
+			{
+			    if(0 == strcmp(params_info->mnc, "06")) /* O2-Slovakia */
+			    {
+                    if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR
+                        || params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+			    }
+            }
+            break;
+        }
+        case 199:/* VIVACOM */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 200: /* JTL_KENYA */
+        {
+            /* default config */
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 201:/* KPN-Netherlands */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:/* KPN/Netherlands Call barring should not be supported in XCAP/Ut and CS domain */
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    if( CUSTOM_SSDS_IMS_DOMAIN_TYPE_WFC == params_info->ims_domain &&
+                        CUSTOM_SSDS_RF_OFF == params_info->rf_status )
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                    else
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 202: /* SPARK-NZ */
+        {
+            if ((params_info->is_ims_registered)&&
+                (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                 params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING))
+            {/* CW service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            }
+            break;
+        }
+        case 203: /* NOS */
+        {
+            if(0 == strcmp(params_info->mnc, "03")) // NOS live does not support XCAP over Ut-interface but lab does
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 204: /* ROGERS */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:/* Rogers/Canada Call barring should not be supported in XCAP/Ut and CS domain */
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+                default:
+                    break;
+			}
+            break;
+        }
+        case 205: /* ALTAN-Mexico */
+        {
+            /* default config */
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+			if(CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status)
+			{
+				atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_100;
+			}
+            break;
+        }
+        case 206: /* Sky-UK */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            need_check_roaming = KAL_TRUE;
+            break;
+        }
+        case 207: /* CTM */
+        {
+            /* default config */
+            break;
+        }
+        case 208: /* 3MACAU */
+        {
+            /* default config */
+            break;
+        }
+        case 209: /* AVANTEL */
+        {
+            /* default config */
+            if(((CUSTOM_SSDS_PATH_TYPE_PS_PREFER == atcmd_path_type) ||
+                (CUSTOM_SSDS_PATH_TYPE_PS_ONLY == atcmd_path_type)) &&
+                (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status))
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            break;
+        }
+        case 210: /* BSNL-India */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR)
+            {
+                /* 1) Set CLIR: terminal based; CME Error:4 greys out CLIR settings
+                2) Get CLIR: NW based to avoid invalid pop-up on MMI query */
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+            }
+            else if((KAL_TRUE == params_info->is_ims_registered) &&
+				    (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                     params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING))
+            {/* CW service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+            }
+            break;
+        }
+        case 211: /* CW */
+        {
+			if(0 == strcmp(params_info->mcc, "714")) /* panama*/
+			{
+				atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                switch(params_info->atcmd_type)
+                { /* CW service, issue encountered : ALPS05801202*/
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    default:
+                        break;
+				}
+			}
+			else if(0 == strcmp(params_info->mcc, "338")) /* Jamaica*/
+			{
+				atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+				if(CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+			}
+            break;
+        }
+        case 214: /* IDC */
+        {
+            if(0 == strcmp(params_info->mcc, "259"))
+			{
+			    if(0 == strcmp(params_info->mnc, "15")) /* IDC-Moldova */
+			    {
+                    if((KAL_TRUE == params_info->is_ims_registered) &&
+                        (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                         params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING))
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                    }
+			    }
+            }
+            break;
+        }
+        case 215: /* CELLCARD */
+        {
+            if(0 == strcmp(params_info->mcc, "456"))
+			{
+			    if(0 == strcmp(params_info->mnc, "01")) /* Cellcard-Cambodia */
+			    {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			    }
+            }
+            break;
+        }
+        case 216:/* Zong-Pakistan */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 217:/* Telekom-Slovenia */
+        {
+            if(0 == strcmp(params_info->mcc, "293"))
+			{
+			    if(0 == strcmp(params_info->mnc, "41")) /* Telekom-Slovenia */
+			    {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                    switch(params_info->atcmd_type)
+                    {
+                        case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                            atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                            break; 
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                            atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                            break;
+                        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                            break;
+                        default:
+                            break;
+                    }
+			    }
+            }
+            break;
+        }
+		case 218:/* Rakuten-Japan */
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+            break;
+		}	
+        case 219: /* MYTEL-Myanmmar */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+		        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+		        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+		            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            if((atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY || atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER) &&
+				(CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status))
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                return atcmd_path_type;
+            }
+            break;
+        }
+        case 220: /* Tigo */
+        {
+            if(0 == strcmp(params_info->mcc, "704"))/* Tigo-Guatemala */
+            {
+
+                if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+                   params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                }
+
+            }
+            break;
+        }
+        case 221:/* TPG-Singapore */
+        {
+            /* If IMS registered:  CF/CLIR/CLLP/COLR/COLP:PS;   CW: TB based */
+            /* TPG-Singapore(221) supports SS over Ut only if IMS registered, else SS not supported */
+            /* TPG-Singapore(221): do not allow Ut when roaming */
+            if((KAL_TRUE != params_info->is_ims_registered) ||
+                ((CUSTOM_SSDS_PATH_TYPE_PS_PREFER == atcmd_path_type)&&(CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status)))
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_100;
+            break;
+        }
+        case 223:/* Indosat/Indonesia */
+        {
+            /* Supports XCAP regardless of IMS Reg status */
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            if(0 == strcmp(params_info->mcc, "419")) /* Ooredoo-Kuwait */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            break;
+        }
+        case 224: /* Telkomsel-Indonesia */
+        {
+            /* default config */
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+                params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING)
+            {/* CW service*/
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+            }
+			else if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+				params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+			{
+				atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+			}
+            break;
+        }
+        case 227: /* WIND */
+        {
+            /* default config */
+            if(0 == strcmp(params_info->mcc, "222")) /* Wind-Italy */
+            {
+                /* Wind/3 Italy supports XCAP when IMS registered in LTE, otherwise CSFB */
+                if ((CUSTOM_SSDS_IMS_DOMAIN_TYPE_WFC == params_info->ims_domain) || (KAL_FALSE == params_info->lte_attached))
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                }
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        /* Set to CS only to sync the status with CS, then retun terminal based */
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+                need_check_roaming = KAL_TRUE;            
+            }
+            else if(0 == strcmp(params_info->mcc, "202"))  /* Wind-Greece */     
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            break;
+        }
+        case 228: /* Celcom-Malaysia */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+		        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+		        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+		            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 231: /* Maxis-Malaysia */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            need_check_roaming = KAL_TRUE;
+			switch(params_info->atcmd_type)
+            {
+		        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+		        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+		            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 232: /* MOBITEL-Srilanka */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+            if((atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY || atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER) &&
+                (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status))
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                return atcmd_path_type;
+            }
+            break;
+        }
+        case 233: /* Pelephone */
+        {
+            if(0 == strcmp(params_info->mcc, "425")) /* Israel */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+				switch(params_info->atcmd_type)
+				{
+					case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+					case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+						atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+						break;
+					default:
+						break;
+				}
+            }
+            break;
+        }
+        case 234: /* PLUS */
+        {
+            if(0 == strcmp(params_info->mcc, "260")) /* PL - Poland */
+            {
+                if(0 == strcmp(params_info->mnc, "01")) 
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    switch(params_info->atcmd_type)
+                    {
+                        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                            break;
+                        default:
+                            break;
+                    }
+                }
+            }
+            break;
+        }
+        case 235: /* VIP */
+        {
+            if(0 == strcmp(params_info->mcc, "220")) /* Serbia */
+            {
+                 atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            }
+            break;
+        }
+        case 237: /* Ice Norway */
+        {
+            /* default config */
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 238:/* VideoTron */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+		        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+		        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+		case 239:/* Eastlink-Canada */
+		{
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+			break;
+		}
+		case 240:/* XPloreMobile-Canada */
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+		        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+		        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+			break;
+		}
+		case 241: /* Claro-Puerto Rico */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+				default:
+                    break;
+            }
+            break;
+        }
+        case 243: /* Globe-Philippines */
+        {
+           	switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+				default:
+                    break;
+            }
+            break;
+        }
+		case 244: /* Metfone- Cambodia */
+		{
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+		        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+				default:
+                    break;
+            }
+			if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER ||
+               atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY)
+            {
+                if(KAL_TRUE != params_info->is_mobile_data_setting_enabled)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    return atcmd_path_type;
+                }
+            }
+			break;
+		}
+        case 245: /* Vietnamobile-Vietnam */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+		case 247: /* Maroc Telecom */
+        {
+            if(0 == strcmp(params_info->mcc, "604")) /* Morocco */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+				switch(params_info->atcmd_type)
+				{
+					case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+					case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+						atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+						break;
+					default:
+						break;
+				}				
+            }
+            break;
+        }
+        case 257: /* Viaero/US */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+		        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+		        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+		case 271:/*Sagebrush - US*/
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			break;
+		}		
+        case 274: /* Yoigo */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 275:/* Lifecell Ukraine */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 276:/* Altice US */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+		        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+		        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 277: /* Telemach/Slovenia  */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+		case 278: /* Jazz-Pakistan */
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			switch(params_info->atcmd_type)
+			{
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+				case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+				case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:	
+					atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+					break;
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+				default:
+					break;
+			}
+			break;
+		}
+        case 279:/* Dito-Philippines */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    if(KAL_FALSE == params_info->is_ims_registered)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                    }
+                    break;
+		        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+		        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 281: /* Kyivstar */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+            /*data off or roaming status*/
+            if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER ||
+               atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY   ||
+               atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY)
+            {
+                if((KAL_TRUE != params_info->is_mobile_data_setting_enabled) ||
+                   (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status) )
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    return atcmd_path_type;
+                }
+            }
+            break;
+        }
+        case 282: /* Mobily Saudi Arabia*/
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:				
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+					break;				
+                default:
+                    break;
+            }
+            break;
+        }
+        case 283: /* MEO Portugal */
+        {
+            /*do not support Ut/XCAP in roaming NW*/
+            need_check_roaming = KAL_TRUE;
+            break;
+        }
+        case 285: /* Vinaphone-Vietnam */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+                    break;
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+					break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 287: /* Free France */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 288: /* Virgin UK */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+        case 289: /* Batelco Bahrain */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+                default:
+                    break;
+            }
+            /*mobile data off and  roaming status*/
+            if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER ||
+               atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY   ||
+               atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY)
+            {
+                if((KAL_TRUE != params_info->is_mobile_data_setting_enabled) &&
+                   (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status) )
+                {
+                     if(params_info->ims_domain == CUSTOM_SSDS_IMS_DOMAIN_TYPE_LTE )
+                    /* CS if VoLTE, UT if VoWifi*/
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        return atcmd_path_type;
+                    }
+                }
+            }
+            break;
+        }
+        case 290: /* Omantel */
+        {
+            if(0 == strcmp(params_info->mcc, "422")) /** Oman **/
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            break;
+        }
+        case 291: /* LMT Latvia */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 292: /* CMHK-Hongkong */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            break;
+        }
+		case 295: /* NTC-Nepal */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+			need_check_roaming = KAL_TRUE;
+			if((KAL_TRUE != params_info->is_mobile_data_setting_enabled) &&
+                   (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status))
+			{
+				atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+				return atcmd_path_type;
+			}
+            break;
+        }
+		case 294: /* MPT-Mayanmar*/
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+		case 296: /* CWW-US */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 297: /* Fastweb/Italy */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }        
+            need_check_roaming = KAL_TRUE;
+            break;
+        }
+        case 302: /* Ooredoo/Oman */
+        {
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:				
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+					break;					
+                default:
+                    break;
+            }
+            break;
+        }
+		case 306:/* CUHK */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+		        case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+		case 307: /* Cellcom-Israel */
+		{
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+            need_check_roaming = KAL_TRUE;
+            break;
+		}
+		case 310: /* Hotmobile-Israel */
+		{
+			switch(params_info->atcmd_type)
+            {
+		        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+		}
+		case 313: /* Axtel-Mexico */
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			switch(params_info->atcmd_type)
+            {
+		        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+			}
+			break;
+		}
+		case 314: /* Telepost - Greenland */
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            break;
+		}
+		case 315: /* Tele2-Kazakhstan */
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+		}
+        case 318: /* Vianova/Italy */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 319: /* Monaco Telecom France/Epic Cyprus */
+        {
+            if(0 == strcmp(params_info->mcc, "212")) /* Monaco Telecom */
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            else if(0 == strcmp(params_info->mcc, "280")) /* Epic Cyprus */
+            {
+                switch(params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                        break;
+                    default:
+                        break;
+                }
+                /*data off or roaming status*/
+                if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER)
+                {
+                    if((KAL_TRUE != params_info->is_mobile_data_setting_enabled) ||
+                       (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status) )
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        return atcmd_path_type;
+                    }
+                }
+            }
+            break;
+        }
+        case 322: /* UPC/Switzerland */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            /* Do not support Ut when data disabled */
+            if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER ||
+               atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY   ||
+               atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY)
+            {
+                if(KAL_TRUE != params_info->is_mobile_data_setting_enabled)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    return atcmd_path_type;
+                }
+            }
+            break;
+        }
+        case 323: /* Lycamobile Italy */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+        case 324: /* Moldcell/Moldova */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                    break;
+                default:
+                    break;
+            }
+            need_check_roaming = KAL_TRUE;
+            break;
+        }
+		case 325: /* Jambotel-Kenya */
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+		}
+		case 326: /* 9mobile-Negeria */
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+			switch(params_info->atcmd_type)
+            {
+		        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+		}
+		case 327:/* Sasktel-Canada */
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            break;
+		}
+        case 329: /* Plintron Italy */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+		case 330: /* LTT-Libya */
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+		}
+		case 331: /* SPECTRANET Nigeria */
+        {
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            need_check_roaming_data_off_cs_only = KAL_TRUE;
+            break;
+        }
+		case 335:/* TOT- Thailand*/
+	    {
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+			break;
+		}
+		case 336:/* Mobifone*-Vietnam */
+	    {
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+			if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER ||
+               atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY   ||
+               atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY)
+            {
+                if(KAL_TRUE != params_info->is_mobile_data_setting_enabled)
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    return atcmd_path_type;
+                }
+            }
+			break;
+		}
+        case 337:/* Antel- Uruguay*/
+	    {
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+			if((params_info->ims_domain == CUSTOM_SSDS_IMS_DOMAIN_TYPE_WFC) || (KAL_TRUE != params_info->is_mobile_data_setting_enabled))
+			{
+				atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			}			
+			break;
+		}	
+        case 338: /* Spusu Austria */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+		case 339:/* Unitel- Angola*/
+	    {
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;					
+                default:
+                    break;
+            }
+			if(atcmd_path_type != CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION &&
+				(!params_info->is_mobile_data_setting_enabled && params_info->roaming_status != CUSTOM_SSDS_ROAMING_TYPE_NO))
+			{
+				atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			}			
+			break;
+		}
+		case 340:/*VDF-Papua*/
+		{
+			if(params_info->ps_attached == KAL_TRUE)
+			{
+				 atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+			}
+			else
+			{
+				 atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			}
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;					
+                default:
+                    break;
+            }
+			if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY || 
+			   atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER)
+            {
+                need_check_roaming = KAL_TRUE;
+            }
+			break;
+		}
+		case 341: /* Ucell-Uzbekistan */
+		{
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+			if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER ||
+               atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY   ||
+               atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY)
+            {
+                if(KAL_TRUE != params_info->is_mobile_data_setting_enabled)
+                {
+					atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+					return atcmd_path_type;
+                }
+            }
+			break;
+		}
+		case 342:/*Ecotel-Canada*/
+		{
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;					
+                default:
+                    break;
+            }
+			break;
+		}
+        case 344: /* 4ka/Slovakia */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 345: /* PrimeTel/Cyprus */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_PS_ONLY:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+            /*data off or roaming status*/
+            if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER ||
+               atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY)
+            {
+                if((KAL_TRUE != params_info->is_mobile_data_setting_enabled) ||
+                   (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status) )
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    return atcmd_path_type;
+                }
+            }
+            break;
+        }
+		case 348:/*Ncell-Nepal*/
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = (KAL_TRUE == params_info->is_ims_registered)?CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION:CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+			break;
+		}
+		case 349:/*MTS-Armenia*/
+		{
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+			need_check_roaming = KAL_TRUE;
+			break;
+		}
+		case 351:/*Hutch-Srilanka*/
+		{
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+                    break;
+                default:
+                    break;
+            }
+			if(atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_PREFER ||
+               atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY   ||
+               atcmd_path_type == CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY)
+            {
+                if((KAL_TRUE != params_info->is_mobile_data_setting_enabled) &&
+                   (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status) )
+                {
+					atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+					return atcmd_path_type;
+                }
+            }
+			break;
+		}
+		case 353:/*We4G-Isreal*/
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+			break;
+		}
+		case 357:/*CNT-Ecuador*/
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+			break;
+		}	
+		case 359:/*Aliv-Bahamas*/
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;	
+                    break;					
+                default:
+                    break;
+            }
+			break;
+		}	
+		case 360:/*CTExcel-Hongkong*/
+		{
+			need_check_roaming_data_off = KAL_FALSE;
+			switch(params_info->atcmd_type)
+            {
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;				
+                default:
+                    break;
+            }
+			break;
+		}
+		case 362:/*B-Mobile- Bhutan*/
+		{
+			need_check_roaming_data_off_cs_only = KAL_TRUE;
+			break;
+		}
+		case 363:/*C Spire - US*/
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			break;
+		}
+		case 366:/*Appalachian - US*/
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+			break;
+		}
+		case 379:/*PTCI- US*/
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+			break;
+		}
+		case 381:/*Asiacell-Iraq*/
+		{
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+			need_check_roaming = KAL_TRUE;
+			break;
+		}
+		case 387:/*West Central Wireless - US*/
+		{
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+			break;
+		}
+        case 1001: /* Ericsson-IODT */
+        {
+            /* default config */
+            if(((CUSTOM_SSDS_PATH_TYPE_PS_PREFER == atcmd_path_type) ||
+                (CUSTOM_SSDS_PATH_TYPE_PS_ONLY == atcmd_path_type))&&
+                (KAL_TRUE != params_info->is_mobile_data_setting_enabled))
+            {
+                if(KAL_TRUE == sbp_query_md_feature_by_ps(SBP_DISABLE_SS_WHEN_DATA_OFF,(protocol_id_enum)(params_info->ps_id)))
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_NO_CONN_845;
+                }
+                else
+                {
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_100;
+                }
+            }
+            break;
+        }
+        case 320: /* Coriolis/France */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+        case 350:/* Gibtelecom/Gibraltar */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 354: /* Poste Mobile/Italy */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            break;
+        }
+        case 383: /* Magti/Georgia */
+        {
+            switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 386: /* ENetworks/Guyana */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+			switch(params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    break;
+                default:
+                    break;
+            }
+			if(atcmd_path_type != CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION &&
+				(!params_info->is_mobile_data_setting_enabled && params_info->roaming_status != CUSTOM_SSDS_ROAMING_TYPE_NO))
+			{
+				atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			}			
+            break;
+        }		
+        case 1002: /* Nokia IODT */
+        {
+            /* default config */
+            break;
+        }
+        case 1003: /* MTK_HQLAB-Ericsson */
+        {
+            /* default config */
+            break;
+        }
+        case 1004: /* Huawei IODT */
+        {
+            /* default config */
+            break;
+        }
+        default:
+            break;
+    }
+
+    /* only mncmcc , no SBP ID?  not suggest this method.currently all mncmcc mapping to SBP ID */
+    if(0 == strcmp(params_info->mccmnc, "22603"))
+    {
+        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+    }
+    else if(0 == strcmp(params_info->mccmnc, "722070") || 0 == strcmp(params_info->mccmnc, "722010"))
+    {
+        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+        if((KAL_TRUE == params_info->is_ims_registered) &&
+            (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING ||
+            params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING))
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+        }
+    }
+    else if(0 == strcmp(params_info->mccmnc, "23207") || 0 == strcmp(params_info->mccmnc, "23591")
+              || 0 == strcmp(params_info->mccmnc, "23099"))
+    {
+        if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+            params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+        }
+    }
+    else if(0 == strcmp(params_info->mccmnc, "33430"))
+    {
+        if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR ||
+            params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+        }
+    }
+
+
+    //if roaming and roaming data setting off, can't use xcap by default
+    if(((CUSTOM_SSDS_PATH_TYPE_PS_PREFER == atcmd_path_type) ||
+        (CUSTOM_SSDS_PATH_TYPE_PS_ONLY == atcmd_path_type) ||
+        (CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY == atcmd_path_type) ||
+		(CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY_PDN == atcmd_path_type))&&
+        (KAL_TRUE != params_info->is_data_roaming_setting_enabled) && 
+        (CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status))
+    {
+        if(need_check_roaming_data_off_cs_only)
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+        }
+        else if(need_check_roaming_data_off)
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_100;
+        }
+    }
+
+    // If roaming, can't use XCAP 
+    if((CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status) && need_check_roaming)
+    {        
+        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+    }
+
+    // If roaming and IMS not registerd, can't use xcap
+    if((CUSTOM_SSDS_ROAMING_TYPE_NO != params_info->roaming_status) && 
+        (KAL_FALSE == params_info->is_ims_registered) && need_check_roaming_ims)
+    {
+        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+    }
+    return atcmd_path_type;
+}
+
+
+void  custom_ssds_get_req_path_config_from_nvram (custom_ssds_params_info_struct *params_info,custom_ssds_path_type *req_path_type,custom_ssds_config_type cfg_type)
+{
+	nvram_ef_ssds_request_profile_value_struct	request_info;
+	nvram_ef_ssds_request_profile_action_struct	request_action;
+
+	kal_mem_set(&request_info, 0x0, sizeof(nvram_ef_ssds_request_profile_value_struct));
+
+	request_info.ims_domain = params_info->ims_domain;
+	request_info.ims_registered = params_info->is_ims_registered;
+	request_info.atcmd_type = params_info->atcmd_type;
+	request_info.roaming_type = params_info->roaming_status;
+	request_info.sim_type = params_info->sim_type;
+    request_info.lte_attached= params_info->lte_attached;
+
+	if (KAL_TRUE == (custom_ssds_config_get_request_path(params_info->sim_id, &request_info, &request_action,cfg_type)))
+	{
+		*req_path_type = request_action.req_path;
+    	kal_prompt_trace(MOD_SSDS+params_info->ps_id, "Use NVRAM reqeust result");
+	}
+
+}
+
+void  _custom_ssds_get_req_path_from_common_file (sim_interface_enum	     sim_id,
+	                                        custom_ssds_atcmd_type   atcmd_type,
+                                            custom_ssds_path_type	 *req_path_type,
+                                            custom_ssds_config_type  cfg_type)
+{
+    nvram_ssds_req_path_type nvram_req_path = CUSTOM_SSDS_SS_REQ_PATH_MAX;
+    kal_bool vaild_config = KAL_TRUE;
+
+    //get NVRAM/MCF config value
+    custom_ssds_config_get_request_path_from_common_file(sim_id,atcmd_type,&nvram_req_path,cfg_type);
+
+    if(nvram_req_path == CUSTOM_SSDS_SS_REQ_PATH_PS)
+    {
+        *req_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+    }
+    else if(nvram_req_path == CUSTOM_SSDS_SS_REQ_PATH_CS)
+    {
+        *req_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+    }
+    else if(nvram_req_path == CUSTOM_SSDS_SS_REQ_PATH_NOT_SUPPORT)
+    {
+        *req_path_type = CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_100;
+    }
+    else if(nvram_req_path == CUSTOM_SSDS_SS_REQ_PATH_TB)
+    {
+        switch(atcmd_type)
+        {
+            case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                *req_path_type = CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_832;
+                break;
+            case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                *req_path_type = CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_CCWA;
+                break;
+
+            case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                *req_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY_ALWAYS;
+                break;
+            case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                *req_path_type = CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_832;
+                break;
+
+            default:
+                //trace:invalid config
+                vaild_config = KAL_FALSE;
+                kal_prompt_trace(MOD_SSDS+sim_id, "invalid TB configuration in common config file ");
+                break;
+        }
+    }
+    else
+    {
+        //trace:invalid config
+        vaild_config = KAL_FALSE;
+        kal_prompt_trace(MOD_SSDS+sim_id, "There is no valid req_path configuration in common config file ");
+    }
+
+    if(vaild_config)
+    {
+        kal_prompt_trace(MOD_SSDS+sim_id, "There is valid configuration for SS:%d",nvram_req_path);
+    }
+}
+
+custom_ssds_path_type  custom_ssds_get_req_path(custom_ssds_params_info_struct *params_info)
+{
+    custom_ssds_path_type req_path_type;
+
+    /* Priority 5 :default config */
+    custom_ssds_get_req_path_default_config(params_info, &req_path_type);
+
+    /* Priority 4 :mcf ota config */
+    custom_ssds_get_req_path_config_from_nvram(params_info, &req_path_type,CUSTOM_SSDS_CFG_TYPE_MCF_OTA);
+    _custom_ssds_get_req_path_from_common_file(params_info->sim_id,params_info->atcmd_type,&req_path_type,CUSTOM_SSDS_CFG_TYPE_MCF_OTA);
+
+    /* Priority 3 :default OP config */
+	req_path_type = custom_ssds_get_req_path_config(params_info, &req_path_type);
+
+    /* Priority 2 :mcf ota by op config */
+    custom_ssds_get_req_path_config_from_nvram(params_info, &req_path_type,CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP);
+    _custom_ssds_get_req_path_from_common_file(params_info->sim_id,params_info->atcmd_type,&req_path_type,CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP);
+
+    /* Priority 1 :nvram file- By ELT(Nvram editor) or Meta Tool */
+    custom_ssds_get_req_path_config_from_nvram(params_info, &req_path_type,CUSTOM_SSDS_CFG_TYPE_NVRAM);
+    _custom_ssds_get_req_path_from_common_file(params_info->sim_id,params_info->atcmd_type,&req_path_type,CUSTOM_SSDS_CFG_TYPE_NVRAM);
+
+    return  req_path_type;
+}
+#endif
+
+void custom_ssds_get_rsp_path_default_config(custom_ssds_params_info_struct *params_info,custom_ssds_csfb_type *rsp_path)
+{
+    *rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO;
+
+    /*set the default value*/
+    switch (params_info->rsp_id)
+    {
+        case 200:
+        case 404:
+        case 409:
+            *rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO;
+            break;
+
+        case 403:
+        case 843:
+            *rsp_path = CUSTOM_SSDS_CSFB_TYPE_ALWAYS;
+            break;
+
+        case 831:
+            *rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            break;
+
+        default:
+            *rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO;
+            break;
+    }
+
+    return;
+}
+
+custom_ssds_csfb_type custom_ssds_get_rsp_path_config(custom_ssds_params_info_struct *params_info,custom_ssds_csfb_type *rsp_path_in)
+{
+    custom_ssds_csfb_type rsp_path = *rsp_path_in;
+	kal_bool is_need_sync_to_cs = KAL_TRUE;
+	
+    switch(params_info->op_id)
+    {
+        case 0: /* Default values */
+        {
+            break;
+        }
+        case 1:/* CMCC */
+        {
+			is_need_sync_to_cs = KAL_FALSE;
+            switch (params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIP:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIP:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_COLR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_COLR:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_COLP:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_COLP:
+                    if ((KAL_TRUE == params_info->is_ims_registered) ||
+                        (403 != params_info->rsp_id && 831 != params_info->rsp_id))
+                    {//VOLTE card: not support CLIR/CLIP/COLR/COLP
+                        rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_4;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    //is_ocb = _custom_ssds_is_ocb(&(req_info->atcmd_info));
+                    if(CUSTOM_SSDS_OUTGOING_CALL_BARRING == params_info->cb_type && ((KAL_TRUE == params_info->is_ims_registered) ||
+                        (403 != params_info->rsp_id && 831 != params_info->rsp_id)))
+                    {//VOLTE card: not support OCB
+                        rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_4;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    if((KAL_TRUE == params_info->is_ims_registered) ||
+                        (403 != params_info->rsp_id && 831 != params_info->rsp_id))
+                    {
+                        rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_832;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    if((KAL_TRUE == params_info->is_ims_registered) ||
+                        (403 != params_info->rsp_id && 831 != params_info->rsp_id))
+                    {
+                        rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_CCWA;
+                    }
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 2:/* CU */
+        {
+			is_need_sync_to_cs = KAL_FALSE;
+            if(400 == params_info->rsp_id)
+            {
+                params_info->rsp_id = 403;
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ALWAYS;
+            }
+
+            switch (params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIP:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIP:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_COLR:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_COLR:
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_COLP:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_COLP:
+                    if ((KAL_TRUE == params_info->is_ims_registered) ||
+                        (403 != params_info->rsp_id && 831 != params_info->rsp_id))
+                    {//VOLTE card: not support CLIR/CLIP/COLR/COLP
+                        rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_4;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    if((KAL_TRUE == params_info->is_ims_registered) ||
+                        (403 != params_info->rsp_id && 831 != params_info->rsp_id))
+                    {
+                        rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_832;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    if((KAL_TRUE == params_info->is_ims_registered) ||
+                        (403 != params_info->rsp_id && 831 != params_info->rsp_id))
+                    {
+                        rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_CCWA;
+                    }
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 3: /* Orange */
+        {
+            /* Orange France requires to start 4hr timer for 403 or 831 (PDN Connectivity reject) */
+            if(0 == strcmp(params_info->mccmnc, "20801") || 0 == strcmp(params_info->mccmnc, "20802")) /* Orange France */
+            {
+                if(((403 == params_info->rsp_id) || (831 == params_info->rsp_id)) && (0 == params_info->real_rsp_id))
+                {
+                    rsp_path = CUSTOM_SSDS_CSFB_TYPE_ALWAYS;
+                }
+            }
+            break;
+        }
+        case 5:/* TMOEU */
+        {
+            switch (params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    if(403 != params_info->rsp_id && 831 != params_info->rsp_id)
+                    {
+                        rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_832;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    if(403 != params_info->rsp_id && 831 != params_info->rsp_id)
+                    {
+                        rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_CCWA;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+                    if (KAL_FALSE == params_info->is_ims_registered)
+                    {  
+                        //if NW response 403, it is non-volte sim card.
+                        if (403 == params_info->rsp_id)
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_ALWAYS;
+                        }
+                        else if (831 == params_info->rsp_id)
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+                        }
+                        else
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+                        }
+                    }
+                    else
+                    {
+                        rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+                    }                
+                    break;                
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+                    if (KAL_FALSE == params_info->is_ims_registered)
+                    {  
+                        //if NW response 403, it is non-volte sim card.
+                        if (403 == params_info->rsp_id)
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_ALWAYS;
+                        }
+                        else if (831 == params_info->rsp_id)
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+                        }
+                        else
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_832;
+                        }
+                    }
+                    else
+                    {
+                        rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_832;
+                    }
+                    break;
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    if ((831 == params_info->rsp_id) && (844 == params_info->real_rsp_id))
+                    { // No support
+                        rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_4;
+                    }
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 6: /* VDF */
+        {
+            /* TCD-BEAR-REQ-012124 expects UE to always use CSFB as a backup option */
+            if (403 == params_info->rsp_id)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ALWAYS;
+            }
+            else if (params_info->rsp_id >= 400 && params_info->rsp_id < 410)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }            
+            /* Exclude 404 for Call Barring not supported (404 is mapped to 831 and 844 on XCAP) */
+            switch (params_info->atcmd_type)
+            {                
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                    if ((831 == params_info->rsp_id) && (844 == params_info->real_rsp_id))
+                    { // No support
+                        rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_4;
+                    }
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+		case 8:/* TMO-US */
+        {
+            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO;
+            break;
+        }
+        case 9:/* CT-only support CF and CW */
+        {
+            //international roaming: same as CMCC
+            //non international roaming:
+            switch (params_info->atcmd_type)
+            {
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_FORWARDING:
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_FORWARDING:
+                    if (CUSTOM_SSDS_ROAMING_TYPE_INTERNATIONAL != params_info->roaming_status)
+                    {
+                        rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO;
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    if (CUSTOM_SSDS_ROAMING_TYPE_INTERNATIONAL == params_info->roaming_status)
+                    {
+                        if((KAL_TRUE == params_info->is_ims_registered) ||
+                            (403 != params_info->rsp_id && 831 != params_info->rsp_id))
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_832;
+                        }
+                    }
+                    else
+                    {
+                        if(KAL_TRUE == params_info->is_ims_registered)
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_832;
+                        }
+                        else if(403 == params_info->rsp_id)
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_403;
+                        }
+                        else if(831 == params_info->rsp_id)
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_31;
+                        }
+                        else
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_832;
+                        }
+                    }
+                    break;
+                case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                    if (CUSTOM_SSDS_ROAMING_TYPE_INTERNATIONAL == params_info->roaming_status)
+                    {
+                        if((KAL_TRUE == params_info->is_ims_registered) ||
+                            (403 != params_info->rsp_id && 831 != params_info->rsp_id))
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_CCWA;
+                        }
+                    }
+                    else
+                    {
+                        if(KAL_TRUE == params_info->is_ims_registered)
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_CCWA;
+                        }
+                        else if(403 == params_info->rsp_id)
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_403;
+                        }
+                        else if(831 == params_info->rsp_id)
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_31;
+                        }
+                        else
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_CCWA;
+                        }
+                    }
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
+        case 15:/* Telefonica requires that after UE receives 40x error response (other than 403) from NW, it needs to CSFB */
+        {
+            if (403 == params_info->rsp_id)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ALWAYS;
+            }
+            else if (params_info->rsp_id >= 400 && params_info->rsp_id < 410)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }
+            break;
+        }
+        case 16:/* EE UK requires that when UE receives 404 or 408 Error response from NW, it needs to CSFB */
+        {
+            if (404 == params_info->rsp_id || 408 == params_info->rsp_id)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }
+            break;
+        }
+        case 18:    /* RJIO-IND */
+        {
+            /* ALPS04349217: In international romaing, Server not responding, try on CS once */
+            if (CUSTOM_SSDS_ROAMING_TYPE_INTERNATIONAL == params_info->roaming_status && 200 != params_info->rsp_id)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }
+            else
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO;
+            }
+            break;
+        }
+		case 19: /*Telstra-Aus*/
+		{
+			switch (params_info->atcmd_type)
+			{
+				case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+				case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+				/* If PDN formed successfully,rsp_id=200, set TB CW
+			    If PDN establishment fails with esm_cause=33, rsp_id=403,CSFB always
+			    If PDN establishment fails with esm_cause!=33,rsp_id=831,CSFB once */
+					if(200 == params_info->rsp_id)
+					{
+						if (params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING)
+						{
+							rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_832;
+						}
+						else
+						{
+							rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_CCWA;
+						}
+					}
+					break;
+				default:
+					break;
+			}
+			break;
+		}
+        case 20:/* Sprint(CDMA solution) */
+        {
+            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO;
+            break;
+        }
+        case 102:/* Smartone-Hongkong */
+        {
+            if (200 != params_info->rsp_id)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }
+            break;
+        }
+        case 104:/* Starhub:no special case,default config */
+            break;
+
+        case 117:/* SmartFren Indonesia(CDMA solution) */
+        {
+            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO;
+            break;
+        }
+        case 121:/* Bell Canada  */
+        {
+            if (500 == params_info->rsp_id)
+            {
+               rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }
+            break;
+        }
+        case 130:/* TIM */
+        {
+            if (0 == strcmp(params_info->mcc, "222")) //TIM Italy
+            {
+                if ((401 == params_info->rsp_id) && (KAL_TRUE != params_info->is_ims_registered))
+                {
+                    rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+                }
+                
+                switch (params_info->atcmd_type)
+                {                
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                        /* 404 is mapped to 831 and 844 on XCAP */
+                        if ((831 == params_info->rsp_id) && (844 == params_info->real_rsp_id))
+                        { // No support
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_4;
+                        }
+                        break;
+                    default:
+                        break;
+                }
+            }
+            break;
+        }
+        case 134:/* Elisa/Finland requires that when UE receives 400 Error response from NW, it needs to CSFB */
+        {
+            if (400 == params_info->rsp_id)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }
+            break;
+        }
+		case 140:/* MTN */
+		{
+			if(0 == strcmp(params_info->mcc, "620")) /* Special case for MTN/Ghana, Usage of SS CS fallback for HTTP error: No */
+			{
+				rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO;
+			}
+            break;
+		}
+        case 148:/* Seatel - Cambodia(4G only solution) */
+        {
+            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO;
+            break;
+        }
+        case 154:/* Telia */
+        {
+            if (0 == strcmp(params_info->mcc, "240")) //Sweden
+            {
+                switch (params_info->atcmd_type)
+                {
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+                        /* Telia Sweden requires that UE should not do CS fallback in case call barring rule is not found from server */
+                        if ((831 == params_info->rsp_id) && (844 == params_info->real_rsp_id))
+                        {
+                            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO_4;
+                        }
+                        break;
+                    default:
+                        break;
+                }
+            }
+            break;
+        }
+        case 156:/* Telenor */
+        {
+            if (0 == strcmp(params_info->mcc, "220")) //Serbia
+            {
+                if (403 == params_info->rsp_id)
+                {
+                    rsp_path = CUSTOM_SSDS_CSFB_TYPE_ALWAYS;
+                }
+                else if (params_info->rsp_id >= 400 && params_info->rsp_id < 410)
+                {
+                    rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+                }
+            }
+            break;
+        }
+        case 164:/* Telenet Belgium requires that after UE receives 40x error response (other than 403) from NW, it needs to CSFB */
+        {
+            if (403 == params_info->rsp_id)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ALWAYS;
+            }
+            else if (params_info->rsp_id >= 400 && params_info->rsp_id < 410)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }
+            break;
+        }
+        case 178:/*Opearator: Smart. Oppo hope UE does CSFB when receive 409 when do CLIR like reference's behavior */
+        {
+            if(params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR || params_info->atcmd_type == CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR)
+            {
+                if (409 == params_info->rsp_id)
+                {
+                    rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+                }
+            }
+            break;
+        }
+        case 186:/* IDEA-IND */
+        {
+            /* Requires that when UE receives 304, 403, 404, 409 or 412 Error response from NW, it needs to CSFB */
+            if (304 == params_info->rsp_id || 403 == params_info->rsp_id || 404 == params_info->rsp_id
+                || 409 == params_info->rsp_id || 412 == params_info->rsp_id || (500 <= params_info->rsp_id && 599 >= params_info->rsp_id))
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }
+            break;
+        }
+        case 185:/* 2DEGREES-NZ */
+        {
+            /* Requires that when UE receives 403, 404, 501, 502, 503 or 504 Error response from NW, it needs to CSFB */
+            if (403 == params_info->rsp_id || 404 == params_info->rsp_id || 501 == params_info->rsp_id
+                || 502 == params_info->rsp_id || 503 == params_info->rsp_id || 504 == params_info->rsp_id)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }
+            break;
+        }
+        case 195:/* O2 CZ requires that when UE receives 409 Error response from NW, it needs to CSFB */
+        {
+            if (409 == params_info->rsp_id)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }
+            break;
+        }
+        case 202:/* Spark-NZ */
+        {
+            if (200 != params_info->rsp_id)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }
+            break;
+        }
+        case 221:/* TPG-Singapore(4G only solution) */
+        {
+            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO;
+            break;
+        }
+		case 224:/* Telkomsel-Indonesia */
+        {
+            if (400 == params_info->rsp_id)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }
+            break;
+        }
+		case 225: /* XL-Indonesia */
+		{
+			if (403 == params_info->rsp_id || 404 == params_info->rsp_id || 500 == params_info->rsp_id ||
+			502 == params_info->rsp_id || 503 == params_info->rsp_id || 504 == params_info->rsp_id)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }
+			break;
+		}
+        case 238:/* VideoTron Canada requires that when UE receives 409 Error response from NW, it needs to CSFB */
+        {
+            if (409 == params_info->rsp_id)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }
+            break;
+        }
+		case 239:/* Eastlink-Canada */
+        {
+            rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO;
+            break;
+        }
+		case 307: /* Cellcom-Israel */
+		{
+			if (300 <= params_info->rsp_id && 599 >= params_info->rsp_id)
+			{
+				rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+			}
+			break;
+		}
+		case 340:/*VDF-Papua*/
+		{
+			if (403 == params_info->rsp_id)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }
+			else
+			{
+				rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO;
+			}
+            break;
+		}
+        default:
+            break;
+    }
+	
+	/* If CLIR activation/deactivation is successful over XCAP then SSDS need to sync its status to CS */
+	if((custom_ssds_need_sync_to_cs(params_info->atcmd_type,params_info->rsp_id) == KAL_TRUE) && is_need_sync_to_cs)
+	{
+		rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+	}
+	
+    return rsp_path;
+}
+
+
+
+void custom_ssds_get_rsp_path_config_from_nvram(custom_ssds_params_info_struct *params_info,
+                                                custom_ssds_csfb_type          *csfb_type,
+                                                custom_ssds_config_type        cfg_type)
+{
+	nvram_ef_ssds_response_profile_value_struct		request_info;
+	nvram_ef_ssds_response_profile_action_struct	request_action;
+
+	kal_mem_set(&request_info, 0x0, sizeof(nvram_ef_ssds_response_profile_value_struct));
+
+	request_info.ims_registered = params_info->is_ims_registered;
+	request_info.atcmd_type = params_info->atcmd_type;
+	request_info.roaming_type = params_info->roaming_status;
+	request_info.rsp_id = params_info->rsp_id;
+	request_info.sim_type = params_info->sim_type;
+
+	if (KAL_TRUE == (custom_ssds_config_get_response_path(params_info->sim_id, &request_info, &request_action,cfg_type)))
+	{
+		*csfb_type = request_action.rsp_path;
+    	kal_prompt_trace(MOD_SSDS+params_info->ps_id, "Use NVRAM response result");
+	}
+
+}
+
+void _custom_ssds_get_rsp_path_from_common_file(sim_interface_enum	   sim_id,
+	                                      kal_uint32               xcap_error_code,
+                                          custom_ssds_csfb_type    *csfb_type,
+                                          custom_ssds_config_type  cfg_type)
+{
+    custom_ssds_config_get_response_path_from_common_file(sim_id,xcap_error_code,csfb_type,cfg_type);
+}
+
+
+custom_ssds_csfb_type custom_ssds_get_rsp_path(custom_ssds_params_info_struct *params_info)
+{
+    custom_ssds_csfb_type rsp_path;
+
+    /* Priority 5 :default config */
+    custom_ssds_get_rsp_path_default_config(params_info,&rsp_path);
+
+    /* Priority 4 :mcf ota config */
+    custom_ssds_get_rsp_path_config_from_nvram(params_info, &rsp_path,CUSTOM_SSDS_CFG_TYPE_MCF_OTA);
+    _custom_ssds_get_rsp_path_from_common_file(params_info->sim_id,params_info->rsp_id,&rsp_path,CUSTOM_SSDS_CFG_TYPE_MCF_OTA);
+
+    /* Priority 3 :default OP config */
+    rsp_path = custom_ssds_get_rsp_path_config(params_info,&rsp_path);
+
+    /* Priority 2 :mcf ota by op config */
+    custom_ssds_get_rsp_path_config_from_nvram(params_info, &rsp_path,CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP);
+    _custom_ssds_get_rsp_path_from_common_file(params_info->sim_id,params_info->rsp_id,&rsp_path,CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP);
+
+    /* Priority 1 :nvram file- By ELT(Nvram editor) or Meta Tool */
+    custom_ssds_get_rsp_path_config_from_nvram(params_info, &rsp_path,CUSTOM_SSDS_CFG_TYPE_NVRAM);
+    _custom_ssds_get_rsp_path_from_common_file(params_info->sim_id,params_info->rsp_id,&rsp_path,CUSTOM_SSDS_CFG_TYPE_NVRAM);
+
+    return rsp_path;
+}
+
+void custom_ssds_get_disable_ut_timer_value_default_config(custom_ssds_params_info_struct *params_info,kal_uint32 *timer_value)
+{
+    *timer_value = INVALID_SSDS_TIMER_VALUE;
+    //for gen93
+    if(params_info->ssds_xcap_error_info == NULL)
+    {
+        *timer_value = INVALID_SSDS_TIMER_VALUE; //0xffffffff means always disable UT until restarting UE or changing SIM card.
+        kal_prompt_trace(MOD_SSDS+params_info->ps_id,"the disable UT timer value is max ");
+        if((0 == kal_mem_cmp(params_info->mccmnc, "20801", 5) || 0 == kal_mem_cmp(params_info->mccmnc, "20802", 5)) &&
+           (((403 == params_info->rsp_id) || (831 == params_info->rsp_id)) && (0 == params_info->real_rsp_id)))
+        {
+            *timer_value = KAL_TICKS_1_MIN * 240; // 4h timer
+            kal_prompt_trace(MOD_SSDS+params_info->ps_id, "The Orange disable UT timer value is:%d ", *timer_value);
+        }    
+        else
+        {
+            *timer_value = INVALID_SSDS_TIMER_VALUE; //0xffffffff means always disable UT until restarting UE or changing SIM card.
+            kal_prompt_trace(MOD_SSDS+params_info->ps_id,"the disable UT timer value is max (no XCAP error info) ");
+        }
+
+    }
+    //for gen95/97
+    else
+    {
+        if((0 == kal_mem_cmp(params_info->mccmnc, "20801", 5) || 0 == kal_mem_cmp(params_info->mccmnc, "20802", 5)) &&
+           (((403 == params_info->rsp_id) || (831 == params_info->rsp_id)) && (0 == params_info->real_rsp_id)))
+        {
+            *timer_value = KAL_TICKS_1_MIN * 240; // 4h timer
+            kal_prompt_trace(MOD_SSDS+params_info->ps_id, "The Orange disable UT timer value is:%d ", *timer_value);
+        }
+        else if(params_info->ssds_xcap_error_info->error_info == CUSTOM_SSDS_XCAP_NW_ERROR_NW_NO_RESPONSE)
+        {
+            *timer_value = KAL_TICKS_1_SEC * 10; //
+            kal_prompt_trace(MOD_SSDS+params_info->ps_id,"the disable UT timer value is:%d ",*timer_value);
+        }
+        else
+        {
+            *timer_value = INVALID_SSDS_TIMER_VALUE; //0xffffffff means always disable UT until restarting UE or changing SIM card.
+            kal_prompt_trace(MOD_SSDS+params_info->ps_id,"the disable UT timer value is max ");
+        }
+    }
+
+	return;
+}
+
+
+kal_uint32 custom_ssds_get_disable_ut_timer_value_config(custom_ssds_params_info_struct *params_info,kal_uint32 *timer_value_in)
+{
+    kal_uint32 timer_value = *timer_value_in;
+
+	return timer_value;
+}
+
+void custom_ssds_get_disable_ut_timer_value_config_from_nvram(custom_ssds_params_info_struct *params_info,
+                                                              kal_uint32                     *timer_value,
+                                                              custom_ssds_config_type        cfg_type)
+{
+    nvram_ef_ssds_timer_value_profile_value_struct		request_info;
+    nvram_ef_ssds_timer_value_profile_action_struct 	request_action;
+    sim_interface_enum	sim_id;
+    ssds_timer_id_enum  timer_id = SSDS_MAX_TIMER;
+
+    kal_mem_set(&request_info, 0x0, sizeof(nvram_ef_ssds_timer_value_profile_value_struct));
+    //request_info.op_id = op_id;
+    //kal_mem_cpy(&(request_info.mccmnc[0]), mccmnc, 6);
+    sim_id = l4c_gemini_get_actual_sim_id((sim_interface_enum)(params_info->ps_id));
+
+    //for gen93
+	if(params_info->ssds_xcap_error_info == NULL)
+    {
+        timer_id = DISABLE_UT_TIMER;
+	}
+	//for gen95/97
+	else
+	{
+	    if(params_info->ssds_xcap_error_info->error_info == CUSTOM_SSDS_XCAP_NW_ERROR_NW_NO_RESPONSE)
+	    {
+            timer_id = DISABLE_UT_NW_NO_RESP_TIMER;
+	    }
+	    else
+	    {
+	        timer_id = DISABLE_UT_TIMER;
+	    }
+	}
+	if(KAL_TRUE == (custom_ssds_config_get_timer_value(timer_id, sim_id, &request_info, &request_action,cfg_type)))
+	{
+        *timer_value = request_action.timer_value * KAL_TICKS_1_SEC;
+        kal_prompt_trace(MOD_SSDS+params_info->ps_id, "Use NVRAM disable UT timer,timer value:%d",request_action.timer_value);
+	}
+
+	return;
+}
+
+void _custom_ssds_get_disable_ut_timer_value_from_common_file(module_type   src_module,
+                                                              kal_uint32    *timer_value,
+                                                              custom_ssds_config_type        cfg_type)
+{
+    sim_interface_enum sim_id;
+    sim_id = l4c_gemini_get_actual_sim_id((sim_interface_enum)(src_module - MOD_SSDS));
+
+    custom_ssds_config_get_timer_value_from_common_file(sim_id,NVRAM_SSDS_DISABLE_UT_TIMER,timer_value,cfg_type);
+}
+
+
+kal_uint32 custom_ssds_get_disable_ut_timer_value(custom_ssds_params_info_struct *params_info)
+{
+    kal_uint32 timer_value;
+
+	/* Priority 5 :default config */
+    custom_ssds_get_disable_ut_timer_value_default_config(params_info,&timer_value);
+
+    /* Priority 4 :mcf ota config */
+    custom_ssds_get_disable_ut_timer_value_config_from_nvram(params_info,&timer_value,CUSTOM_SSDS_CFG_TYPE_MCF_OTA);
+    _custom_ssds_get_disable_ut_timer_value_from_common_file((params_info->ps_id+ MOD_SSDS),&timer_value,CUSTOM_SSDS_CFG_TYPE_MCF_OTA);
+
+    /* Priority 3 :default OP config */
+    timer_value = custom_ssds_get_disable_ut_timer_value_config(params_info,&timer_value);
+
+    /* Priority 2 :mcf ota by op config */
+    custom_ssds_get_disable_ut_timer_value_config_from_nvram(params_info,&timer_value,CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP);
+    _custom_ssds_get_disable_ut_timer_value_from_common_file((params_info->ps_id+ MOD_SSDS),&timer_value,CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP);
+
+    /* Priority 1 :nvram file- By ELT(Nvram editor) or Meta Tool */
+    custom_ssds_get_disable_ut_timer_value_config_from_nvram(params_info,&timer_value,CUSTOM_SSDS_CFG_TYPE_NVRAM);
+    _custom_ssds_get_disable_ut_timer_value_from_common_file((params_info->ps_id+ MOD_SSDS),&timer_value,CUSTOM_SSDS_CFG_TYPE_NVRAM);
+
+    return timer_value;
+}
+
+/********new design end*************/
+
+kal_bool custom_only_ps_supported_atcmd( custom_ssds_params_info_struct  *params_info,
+                                                              custom_ssds_path_type           *atcmd_req_type)
+    
+{
+    if((params_info->atcmd_type== CUSTOM_SSDS_ATCMD_TYPE_SET_COLR) && (params_info->op_id == 1 || params_info->op_id == 2))
+    {//special case for CMCC/CU
+        *atcmd_req_type = custom_ssds_get_req_path(params_info);
+        return KAL_TRUE;
+    }
+    return KAL_FALSE;
+}
+
+kal_bool custom_only_cs_supported_atcmd(custom_ssds_params_info_struct  *params_info,
+                                                              custom_ssds_path_type           *atcmd_req_type)
+{
+    return KAL_FALSE;
+}
+
+void custom_ssds_ussd_is_csfb_retry_allowed(custom_ssds_params_info_struct  *params_info,kal_bool *is_ussd_csfb_retry_allowed)
+{
+	*is_ussd_csfb_retry_allowed = KAL_TRUE;
+	
+	switch(params_info->op_id)
+	{
+		case 8:/*TMO-US */
+		case 117:
+	    case 9:/* CT: only support CF and CW */
+		case 304:/* CTMO: only support CF and CW --aomen*/
+			*is_ussd_csfb_retry_allowed = KAL_FALSE;
+			break;
+		default:
+			break;
+	}
+	
+	return;
+}
+
+kal_bool custom_ssds_is_ussi_allowed_during_ims_call(custom_ssds_params_info_struct  *params_info)
+{
+	kal_bool	is_ussi_allowed_during_ims_call = KAL_TRUE;
+	switch(params_info->op_id)
+	{
+		case 122:/*AIS-Thailand*/
+		case 131:/*Truemove-Thailand */
+		case 178:/*Smartfone-Cambodia */
+		case 232:/*MOBITEL-Srilanka*/
+			is_ussi_allowed_during_ims_call  = KAL_FALSE;
+			break;
+        case 171: /* WOM */
+            if(0 == strcmp(params_info->mcc, "732")) /* WOM-Colombia */
+            {
+                is_ussi_allowed_during_ims_call  = KAL_FALSE;
+            }
+            break;			
+		default:
+			break;
+	}
+	return is_ussi_allowed_during_ims_call;
+}
+
+kal_bool custom_ssds_is_rat_mode_change_allowed(custom_ssds_params_info_struct  *params_info)
+{
+    kal_bool    is_rat_mode_change_allowed = KAL_FALSE;
+    
+    if(params_info->nr_attached == KAL_TRUE)
+    {
+        switch(params_info->op_id)
+        {    
+            case 6: /* Vodafone */
+                if(0 == strcmp(params_info->mcc, "262")) /* Vodafone-Germany */
+                {
+                    is_rat_mode_change_allowed  = KAL_TRUE;
+                }
+                break;
+            case 102: /* Smartone-HK */
+                is_rat_mode_change_allowed  = KAL_TRUE;
+                break;			
+			case 103: /* Singtel */
+			case 104:/* Starhub-Singapore */
+			case 151: /* M1-Singapore */			
+                is_rat_mode_change_allowed  = KAL_TRUE;
+                break;
+            default:
+                break;
+        }
+    }
+    kal_prompt_trace(MOD_SSDS+params_info->ps_id, "Is RAT mode change allowed:%d",is_rat_mode_change_allowed);
+    return is_rat_mode_change_allowed;
+}
+
+
+kal_uint32 custom_ssds_get_rat_mode_change_timer_value(custom_ssds_rat_mode_change_timer_type timer_type)
+{
+    kal_uint32 timer_value = 0;
+    
+    switch(timer_type)
+    {    
+        case CUSTOM_SSDS_RAT_MODE_CHANGE_TIMER_TYPE_TRIGGER:
+            timer_value = KAL_TICKS_1_SEC * 1;
+            break;
+        case CUSTOM_SSDS_RAT_MODE_CHANGE_TIMER_TYPE_WAIT:
+            timer_value = KAL_TICKS_1_SEC * 2;
+            break;
+        case CUSTOM_SSDS_RAT_MODE_CHANGE_TIMER_TYPE_CS_REG:
+            timer_value = KAL_TICKS_1_SEC * 9;
+            break;            
+        default:
+            break;
+    }
+    kal_prompt_trace(MOD_SSDS, "RAT mode timer value and type: %d/%d",timer_type,timer_value);
+    return timer_value;
+}
diff --git a/mcu/custom/protocol/common/ps/custom_ssds.h b/mcu/custom/protocol/common/ps/custom_ssds.h
new file mode 100644
index 0000000..2b7424d
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_ssds.h
@@ -0,0 +1,313 @@
+/*****************************************************************************
+*  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) 2006
+*
+*  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:
+ * ---------
+ *   custom_ssds.h
+ *
+ * Project:
+ * --------
+ *
+ * Description:
+ * ------------
+ *    *
+ * Author:
+ * -------
+ * -------
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __CUSTOM_SSDS_H__
+#define __CUSTOM_SSDS_H__
+
+#include "sim_exported_enum.h"
+#include "l3_inc_enums_public.h"
+
+typedef enum
+{
+    CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_FORWARDING,
+    CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_FORWARDING,
+    CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING,
+    CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING,
+    CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING,
+    CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING,
+    CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR,
+    CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR,
+    CUSTOM_SSDS_ATCMD_TYPE_SET_CLIP,
+    CUSTOM_SSDS_ATCMD_TYPE_GET_CLIP,
+    CUSTOM_SSDS_ATCMD_TYPE_SET_COLP,
+    CUSTOM_SSDS_ATCMD_TYPE_GET_COLP,
+    CUSTOM_SSDS_ATCMD_TYPE_SET_COLR,
+    CUSTOM_SSDS_ATCMD_TYPE_GET_COLR,
+    CUSTOM_SSDS_ATCMD_TYPE_UNKNOWN
+
+}custom_ssds_atcmd_type;
+
+typedef enum
+{
+    CUSTOM_SSDS_PATH_TYPE_PS_PREFER,          /*Support XCAP and CS. And with PS prefer*/
+    CUSTOM_SSDS_PATH_TYPE_PS_ONLY,            /*XCAP only*/
+    CUSTOM_SSDS_PATH_TYPE_CS_ONLY,            /*CS only*/
+    CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_409,        /*not support: return error 409*/
+    CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_832,        /*not support: return error 832*/
+    CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_CCWA,        /*not support: return +CCWA:0xff,0, then OK*/
+    CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_403,        /*not support: return error 403*/
+    CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_100,        /*not support: return error 100*/
+    CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY,           /*XCAP only, Specail for call waiting: change to query operation*/
+    CUSTOM_SSDS_PATH_TYPE_PS_ONLY_SET_TO_QUERY_PDN, /* XCAP only, return the status of PDN establishment successful or not */
+	CUSTOM_SSDS_PATH_TYPE_NOT_SUPPORT_31,         /*no csfb, return error 31*/
+    CUSTOM_SSDS_PATH_TYPE_CS_ONLY_ALWAYS,         /*CS  even if IMS call exist*/
+    CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4,  /* return error 4 */
+    CUSTOM_SSDS_PATH_TYPE_OPR_DTR_BARRING_8,          /* return error 8 */
+    CUSTOM_SSDS_PATH_TYPE_CALL_BARRED_10,             /* return error 10 */
+    CUSTOM_SSDS_PATH_TYPE_SIM_PIN_REQUIRED_11,        /* return error 11 */
+    CUSTOM_SSDS_PATH_TYPE_SIM_PUK_REQUIRED_12,        /* return error 12 */
+    CUSTOM_SSDS_PATH_TYPE_NOT_FOUND_404,              /* return error 404 */
+    CUSTOM_SSDS_PATH_TYPE_PRECONDITION_FAILED_412,    /* return error 412 */
+    CUSTOM_SSDS_PATH_TYPE_PHB_FDN_BLOCKED_2600,       /* return error 2600 */
+    CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION,                /* CLIR/CW terminal based solution */
+    CUSTOM_SSDS_PATH_TYPE_NO_CONN_845                 /* Report no connection when data off */
+
+}custom_ssds_path_type;
+
+typedef enum
+{
+    CUSTOM_SSDS_USSD_PATH_TYPE_INVALID,
+    CUSTOM_SSDS_USSD_PATH_TYPE_IMS,                 /*Support IMS and VoPS*/
+    CUSTOM_SSDS_USSD_PATH_TYPE_CS,
+    CUSTOM_SSDS_USSD_PATH_TYPE_NOT_SUPPORT
+
+}custom_ssds_ussd_path_type;
+
+
+typedef enum
+{
+    CUSTOM_SSDS_CSFB_TYPE_ALWAYS,               /*csfb: from now on till reboot*/
+    CUSTOM_SSDS_CSFB_TYPE_ONCE,                 /*csfb: but only this time*/
+    CUSTOM_SSDS_CSFB_TYPE_NO_CCWA,              /*no csfb, return +CCWA:0xff,0, then OK*/
+    CUSTOM_SSDS_CSFB_TYPE_NO_832,               /*no csfb, return error 832*/
+    CUSTOM_SSDS_CSFB_TYPE_NO_403,               /*no csfb, return error 403*/
+    CUSTOM_SSDS_CSFB_TYPE_NO_4,               /*no csfb, return error 409*/
+    CUSTOM_SSDS_CSFB_TYPE_NO_409,               /*no csfb, return error 409*/
+    CUSTOM_SSDS_CSFB_TYPE_NO_31,               /*no csfb, return error 31*/
+    CUSTOM_SSDS_CSFB_TYPE_NO                    /*csfb: no*/
+
+}custom_ssds_csfb_type;
+
+typedef enum
+{
+    CUSTOM_SSDS_PDN_TYPE_XCAP,                 /*Need to setup XCAP PDN*/
+    CUSTOM_SSDS_PDN_TYPE_INTERNET,             /*Need to setup internet PDN*/
+    CUSTOM_SSDS_PDN_TYPE_NO,                   /*No need to setup PDN*/
+    CUSTOM_SSDS_PDN_TYPE_NOT_MATCH,            /*The condition of setup PDN is not matched*/
+
+}custom_ssds_pdn_type;
+
+typedef enum
+{
+    CUSTOM_SSDS_ROAMING_TYPE_NO,               /*No roaming*/
+    CUSTOM_SSDS_ROAMING_TYPE_UNKNOWN,          /*roaming, but can not tell if its domestic or international*/
+    CUSTOM_SSDS_ROAMING_TYPE_DOMESTIC,         /*Domistic roaming*/
+    CUSTOM_SSDS_ROAMING_TYPE_INTERNATIONAL,    /*International roaming*/
+
+}custom_ssds_roaming_type;
+
+typedef enum
+{
+    CUSTOM_SSDS_IMS_DOMAIN_TYPE_NONE,
+    CUSTOM_SSDS_IMS_DOMAIN_TYPE_WFC,
+    CUSTOM_SSDS_IMS_DOMAIN_TYPE_LTE,
+    CUSTOM_SSDS_IMS_DOMAIN_TYPE_OTHERS
+
+}custom_ssds_ims_domain_type;
+
+typedef enum
+{
+    CUSTOM_SSDS_PDN_FAIL_PATH_TYPE_NO_CSFB,          /*No need CSFB,return error to AP*/
+    CUSTOM_SSDS_PDN_FAIL_PATH_TYPE_CSFB_ONCE,        /*Need CSFB once*/
+    CUSTOM_SSDS_PDN_FAIL_PATH_TYPE_CSFB_ALWAYS,      /*CSFB always*/
+    CUSTOM_SSDS_PDN_FAIL_PATH_TYPE_NO_CSFB_31,       /*For CT No need CSFB,return error to AP*/
+
+}custom_ssds_pdn_fail_path_type;
+
+typedef enum
+{
+    CUSTOM_SSDS_ALL_OUTGOING_CALL_BARRING,
+    CUSTOM_SSDS_OUTGOING_CALL_BARRING,
+    CUSTOM_SSDS_INCOMING_CALL_BARRING,
+
+}custom_ssds_call_barring_type;
+
+typedef enum{
+CUSTOM_SSDS_RF_OFF,
+CUSTOM_SSDS_RF_ON,
+}custom_ssds_rf_status;
+
+typedef enum
+{
+	CUSTOM_SSDS_STATUS_NOT_CHECKED,
+	CUSTOM_SSDS_STATUS_USER_VOLTE_SUBSCRIBED,
+	CUSTOM_SSDS_STATUS_USER_VOLTE_NOT_SUBSCRIBED
+
+}custom_ssds_user_volte_subscription_status;
+
+typedef struct
+{
+    kal_int8                *atcmd_buff;
+    kal_uint16              atcmd_len;
+    custom_ssds_atcmd_type  atcmd_type;
+}custom_ssds_atcmd_info;
+
+typedef struct
+{
+	sim_interface_enum	sim_id;
+	kal_uint8			sim_type;
+    kal_char    mccmnc[7];
+
+    kal_bool    is_ct_volte_enabled;
+    kal_bool    is_ct_card;
+    rat_enum    preferred_network_type;
+    kal_bool    is_data_roaming_setting_enabled;
+    kal_bool    is_mobile_data_setting_enabled;
+	kal_bool    only_use_real_error_code;
+
+}custom_ssds_info_struct;
+
+typedef enum {
+	CUSTOM_SSDS_XCAP_NW_ERROR_NONE = 0,
+	CUSTOM_SSDS_XCAP_NW_ERROR_NW_NO_RESPONSE = 1,
+	CUSTOM_SSDS_XCAP_NW_ERROR_GEMINI_ISSUE = 2,
+	CUSTOM_SSDS_XCAP_NW_ERROR_CANNOT_CONNECT_TO_SERVER = 3,
+	CUSTOM_SSDS_XCAP_NW_ERROR_PS_ALWAYS_FAIL = 4,
+	CUSTOM_SSDS_XCAP_NW_EEROR_SERVICE_NOT_SUPPORTED = 5, // network not support this sim do xcap
+}custom_ssds_xcap_nw_error_info;
+
+typedef struct
+{
+    kal_uint32                        error_code;
+	kal_uint32                        real_error_code;
+	custom_ssds_xcap_nw_error_info    error_info;
+}custom_ssds_xcap_error_info_struct;
+
+typedef enum {
+    CUSTOM_SSDS_CFG_TYPE_MCF_OTA,
+    CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP,
+    CUSTOM_SSDS_CFG_TYPE_NVRAM,
+    CUSTOM_SSDS_CFG_TYPE_MAX
+}custom_ssds_config_type;
+
+typedef enum {
+    CUSTOM_SSDS_RAT_MODE_CHANGE_TIMER_TYPE_TRIGGER = 0,
+    CUSTOM_SSDS_RAT_MODE_CHANGE_TIMER_TYPE_WAIT = 1,
+    CUSTOM_SSDS_RAT_MODE_CHANGE_TIMER_TYPE_CS_REG = 2
+}custom_ssds_rat_mode_change_timer_type;
+
+/********new design begin***********/
+//condition
+typedef struct
+{
+    sim_interface_enum	               sim_id;
+    kal_uint8                          ps_id;
+    kal_uint8			               sim_type;
+    kal_char                           mccmnc[7];
+    kal_char                           mcc[4];
+    kal_char                           mnc[4];
+    kal_uint32                         op_id;
+    custom_ssds_atcmd_type             atcmd_type;//Duplicate with atcmd_type in the atcmd_info;remove atcmd_info 
+    custom_ssds_call_barring_type      cb_type;//The type of call barring 
+    kal_bool                           is_cfu;//is call forwarding uncondition
+    kal_bool                           is_ct_volte_enabled;
+    kal_bool                           is_ct_card;
+    kal_bool                           is_ims_registered;
+    custom_ssds_ims_domain_type        ims_domain;
+    kal_bool                           ps_attached;
+    kal_bool                           lte_attached;
+	kal_bool                           nr_attached;
+    custom_ssds_rf_status              rf_status;
+    rat_enum                           preferred_network_type;
+    custom_ssds_roaming_type           roaming_status;
+    kal_bool                           is_data_roaming_setting_enabled;
+    kal_bool                           is_mobile_data_setting_enabled;
+	kal_bool                           is_imsvops_support;//for ussd
+
+    kal_uint32                         rsp_id;//only used for rsp domain selection
+    kal_uint32                         real_rsp_id;
+    custom_ssds_xcap_error_info_struct *ssds_xcap_error_info;//only used for getting disable_ut_timer vaule
+	custom_ssds_user_volte_subscription_status user_volte_subscription_status;
+
+    //the output parameter
+    kal_bool                           only_use_real_error_code;//in case of set_to_query, this value will be true
+
+}custom_ssds_params_info_struct;
+
+/********new design end*************/
+
+custom_ssds_ussd_path_type  custom_ssds_get_ussd_req_path_variable ( custom_ssds_params_info_struct *params_info );
+void custom_ssds_need_send_409_err_string_variable(module_type module,kal_bool *need_send,kal_uint32 op_id,kal_char *mccmnc);
+void custom_ssds_need_sync_cw_in_234g_variable(module_type module,kal_bool *need_sync,kal_uint32 op_id,kal_char *mccmnc);
+void custom_ssds_need_send_test_cmd(module_type module,kal_bool *need_send,kal_uint32 op_id,kal_char *mccmnc);
+void custom_ssds_ussd_is_csfb_retry_allowed(custom_ssds_params_info_struct  *params_info,kal_bool *is_ussd_csfb_allowed);
+
+kal_bool custom_ssds_need_sync_to_cs(custom_ssds_atcmd_type ss_type,kal_uint32 rsp_code);
+kal_bool custom_ssds_is_csfb_allowed(kal_uint32 op_id, kal_char *mccmnc, custom_ssds_roaming_type roaming_type);
+kal_bool custom_ssds_is_ussi_allowed_during_ims_call(custom_ssds_params_info_struct  *params_info);
+kal_bool custom_ssds_is_csfb_during_imsCall_allowed(kal_uint32 op_id,
+                                                    kal_char *mccmnc,
+                                                    custom_ssds_roaming_type roaming_type,
+                                                    custom_ssds_ims_domain_type ims_domain,
+                                                    kal_bool is_wfc_call);
+													
+custom_ssds_path_type  custom_ssds_get_req_path(custom_ssds_params_info_struct *params_info);
+custom_ssds_csfb_type  custom_ssds_get_rsp_path(custom_ssds_params_info_struct *params_info);
+kal_uint32 custom_ssds_get_disable_ut_timer_value(custom_ssds_params_info_struct *params_info);
+kal_bool custom_ssds_is_rat_mode_change_allowed(custom_ssds_params_info_struct  *params_info);
+kal_uint32 custom_ssds_get_rat_mode_change_timer_value(custom_ssds_rat_mode_change_timer_type timer_type);
+
+kal_bool custom_only_ps_supported_atcmd( custom_ssds_params_info_struct  *params_info,
+                                                              custom_ssds_path_type           *atcmd_req_type);
+
+kal_bool custom_only_cs_supported_atcmd(custom_ssds_params_info_struct  *params_info,
+                                                              custom_ssds_path_type           *atcmd_req_type);
+#endif
+
diff --git a/mcu/custom/protocol/common/ps/custom_ssds_config.c b/mcu/custom/protocol/common/ps/custom_ssds_config.c
new file mode 100644
index 0000000..b10597f
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_ssds_config.c
@@ -0,0 +1,1039 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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:
+ * ---------
+ *   custom_ssds_config.c
+ *
+ * Project:
+ * --------
+ *   MOLY
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the SSDS configuration.
+ *
+ * Author:
+ * -------
+ *******************************************************************************/
+#include <stdlib.h>
+#include "kal_public_api.h"
+#include "kal_trace.h"
+#include "custom_ssds_config.h"
+
+extern void nvram_external_msg_reg_req(
+            kal_uint16 file_idx,
+            kal_uint16 record_index,
+            kal_uint16 rec_amount);
+
+void nvram_external_msg_dereg_req(
+            kal_uint16 file_idx,
+            kal_uint16 record_index,
+            kal_uint16 rec_amount);
+
+/* save the config from NVRAM file  */
+static custom_ssds_config_context_struct          custom_ssds_config_context[CUSTOM_SSDS_CONFIG_CONTEXT_MAX_NUM];
+/* save the config from MCF_OTA_BY_OP */
+static custom_ssds_config_context_struct          custom_ssds_config_context_for_mcfota_by_op[CUSTOM_SSDS_CONFIG_CONTEXT_MAX_NUM];
+/* save the config from MCF_OTA */
+static custom_ssds_config_context_struct          custom_ssds_config_context_for_mcfota[CUSTOM_SSDS_CONFIG_CONTEXT_MAX_NUM];
+
+#if defined(__MTK_TARGET__)
+extern ltable_entry_struct logical_data_item_table_ssds[];
+#else
+extern logical_data_item_table_ssds[];
+#endif
+
+kal_bool _custom_ssds_compare_mccmnc(kal_char *nvram_mccmnc, kal_char *input_mccmnc)
+{
+	kal_int32		index, translated_value;
+	
+	if (!nvram_mccmnc || !input_mccmnc)
+		return	KAL_FALSE;
+
+	for (index=0; index<5; index++)
+	{
+		translated_value = (kal_int32)(input_mccmnc[index]) - 0x30;
+		if ((kal_int32)(nvram_mccmnc[index]) != translated_value)
+			return	KAL_FALSE;
+	}
+
+	return	KAL_TRUE;
+}
+
+kal_uint16 _custom_ssds_get_record_by_simid(sim_interface_enum	sim_id)
+{
+	if ((SIM1 != sim_id) &&
+		(SIM2 != sim_id))
+	{
+		return	0;
+	}
+
+	return	(kal_uint16)(sim_id+1);
+}
+
+custom_ssds_config_context_struct * _custom_ssds_get_context_by_simid(sim_interface_enum	sim_id,
+                                                                      custom_ssds_config_type  cfg_type)
+{
+	if ((SIM1 != sim_id) &&
+		(SIM2 != sim_id))
+	{
+		return	NULL;
+	}
+
+    if(cfg_type == CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP)
+    {
+        return	&(custom_ssds_config_context_for_mcfota_by_op[sim_id]);
+    }
+    else if(cfg_type == CUSTOM_SSDS_CFG_TYPE_MCF_OTA)
+    {
+        return	&(custom_ssds_config_context_for_mcfota[sim_id]);
+    }
+    else
+    {//From NVRAM
+        return	&(custom_ssds_config_context[sim_id]);
+    }
+
+	return	NULL;
+}
+
+custom_ssds_config_context_struct * _custom_ssds_get_context_by_recordid(kal_uint16 record_id,
+                                                                         custom_ssds_config_type  cfg_type)
+{
+	if ((1 != record_id) &&
+		(2 != record_id))
+	{
+		return	NULL;
+	}
+
+    if(cfg_type == CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP)
+    {
+        return	&(custom_ssds_config_context_for_mcfota_by_op[record_id-1]);
+    }
+    else if(cfg_type == CUSTOM_SSDS_CFG_TYPE_MCF_OTA)
+    {
+        return	&(custom_ssds_config_context_for_mcfota[record_id-1]);
+    }
+    else
+    {//From NVRAM
+        return	&(custom_ssds_config_context[record_id-1]);
+    }
+
+	return	NULL;
+}
+
+kal_bool	_custom_ssds_check_request_value(nvram_ef_ssds_request_profile_mask_struct	 *check_mask, 
+											  nvram_ef_ssds_request_profile_value_struct *dst_value, 
+											  nvram_ef_ssds_request_profile_value_struct *src_value)
+{
+
+	if (KAL_FALSE != check_mask->check_atcmd_type)
+	{
+		if (dst_value->atcmd_type != src_value->atcmd_type)
+			return	KAL_FALSE;
+	}
+/*	
+	if (KAL_FALSE != check_mask->check_opid)
+	{
+		if (dst_value->op_id != src_value->op_id)
+			return	KAL_FALSE;
+	}
+*/
+	if (KAL_FALSE != check_mask->check_sim_type)
+	{
+		if (dst_value->sim_type != src_value->sim_type)
+			return	KAL_FALSE;
+	}	
+
+	if (KAL_FALSE != check_mask->check_ims_registered)
+	{
+		if (dst_value->ims_registered != src_value->ims_registered)
+			return	KAL_FALSE;
+	}	
+
+	if (KAL_FALSE != check_mask->check_ims_domain)
+	{
+		if (dst_value->ims_domain != src_value->ims_domain)
+			return	KAL_FALSE;
+	}
+
+	if (KAL_FALSE != check_mask->check_roaming_type)
+	{
+		if (dst_value->roaming_type != src_value->roaming_type)
+			return	KAL_FALSE;
+	}
+/*	
+	if (KAL_FALSE != check_mask->check_mccmnc)
+	{
+		if (KAL_FALSE == _custom_ssds_compare_mccmnc(dst_value->mccmnc, src_value->mccmnc))
+			return	KAL_FALSE;
+	}	
+*/
+
+    if (KAL_FALSE != check_mask->check_lte_attached)
+    {
+        if (dst_value->lte_attached!= src_value->lte_attached)
+            return	KAL_FALSE;
+    }
+
+	return	KAL_TRUE;
+}
+
+kal_bool	_custom_ssds_check_response_value(nvram_ef_ssds_response_profile_mask_struct	 *check_mask, 
+											   nvram_ef_ssds_response_profile_value_struct *dst_value, 
+											   nvram_ef_ssds_response_profile_value_struct *src_value)
+{
+
+
+	if (KAL_FALSE != check_mask->check_rsp_id)
+	{
+		if (dst_value->rsp_id != src_value->rsp_id)
+			return	KAL_FALSE;
+	}
+	
+	if (KAL_FALSE != check_mask->check_atcmd_type)
+	{
+		if (dst_value->atcmd_type != src_value->atcmd_type)
+			return	KAL_FALSE;
+	}
+/*	
+	if (KAL_FALSE != check_mask->check_opid)
+	{
+		if (dst_value->op_id != src_value->op_id)
+			return	KAL_FALSE;
+	}
+*/
+	if (KAL_FALSE != check_mask->check_sim_type)
+	{
+		if (dst_value->sim_type != src_value->sim_type)
+			return	KAL_FALSE;
+	}	
+
+	if (KAL_FALSE != check_mask->check_ims_registered)
+	{
+		if (dst_value->ims_registered != src_value->ims_registered)
+			return	KAL_FALSE;
+	}	
+
+	if (KAL_FALSE != check_mask->check_ims_domain)
+	{
+		if (dst_value->ims_domain != src_value->ims_domain)
+			return	KAL_FALSE;
+	}
+
+	if (KAL_FALSE != check_mask->check_roaming_type)
+	{
+		if (dst_value->roaming_type != src_value->roaming_type)
+			return	KAL_FALSE;
+	}
+/*	
+	if (KAL_FALSE != check_mask->check_mccmnc)
+	{
+		if (KAL_FALSE == _custom_ssds_compare_mccmnc(dst_value->mccmnc, src_value->mccmnc))
+			return	KAL_FALSE;
+	}	
+*/
+	return	KAL_TRUE;
+}
+
+
+
+kal_bool	_custom_ssds_check_timer_value(nvram_ef_ssds_timer_value_profile_mask_struct	 *check_mask, 
+										  nvram_ef_ssds_timer_value_profile_value_struct *dst_value, 
+										  nvram_ef_ssds_timer_value_profile_value_struct *src_value)
+{
+	return	KAL_TRUE;
+}
+
+
+void _custom_ssds_config_customization(sim_interface_enum sim_slot_id, kal_uint16 op_id, kal_uint16 mccmnc_len, kal_uint8 *mccmnc, custom_ssds_config_context_struct *record_root)
+{
+	nvram_ef_ssds_request_profile_struct	    *request_record_ptr = NULL;
+	nvram_ef_ssds_response_profile_struct	    *response_record_ptr = NULL;
+	nvram_ef_ssds_pdn_profile_struct		    *pdn_record_ptr = NULL;
+	nvram_ef_ssds_pdn_fail_profile_struct	    *pdn_fail_record_ptr = NULL;
+    nvram_ef_ssds_timer_value_profile_struct	*timer_value_record_ptr = NULL;
+    nvram_ef_ssds_common_config_profile_struct	*common_config_record_ptr = NULL;
+	
+	/*get the hardcoded the profile*/
+	switch (op_id)
+	{
+		case 1:
+			//request_record_ptr = ??;
+			//response_record_ptr = ??;
+			//pdn_record_ptr = ??;
+			//pdn_fail_record_ptr = ??;
+			break;
+		default:
+			break;
+	}
+
+	if (NULL != request_record_ptr)
+		kal_mem_cpy(&(record_root->request_record), request_record_ptr, sizeof(nvram_ef_ssds_request_profile_struct));
+
+	if (NULL != response_record_ptr)
+		kal_mem_cpy(&(record_root->response_record), response_record_ptr, sizeof(nvram_ef_ssds_response_profile_struct));
+
+	if (NULL != pdn_record_ptr)
+		kal_mem_cpy(&(record_root->pdn_record), pdn_record_ptr, sizeof(nvram_ef_ssds_pdn_profile_struct));
+
+	if (NULL != pdn_fail_record_ptr)
+		kal_mem_cpy(&(record_root->pdn_fail_record), pdn_fail_record_ptr, sizeof(nvram_ef_ssds_pdn_fail_profile_struct));
+
+    if (NULL != timer_value_record_ptr)
+        kal_mem_cpy(&(record_root->timer_value_record), timer_value_record_ptr, sizeof(nvram_ef_ssds_timer_value_profile_struct));
+
+    if (NULL != common_config_record_ptr)
+        kal_mem_cpy(&(record_root->common_config_record), common_config_record_ptr, sizeof(nvram_ef_ssds_common_config_profile_struct));
+
+}
+
+void _custom_ssds_config_init_nvram(kal_uint16	record_index)
+{
+	custom_ssds_config_context_struct			*record_root = NULL;
+    kal_uint8 i=0;
+
+    for(i=0; i<CUSTOM_SSDS_CFG_TYPE_MAX; i++)
+    {
+        record_root = _custom_ssds_get_context_by_recordid(record_index,i);
+
+        if (NULL == record_root)
+		    return;	
+
+        kal_prompt_trace(MOD_SSDS+record_index-1, "Reset config to default value");
+#if !defined (__GEN97_ESL_SPEEDUP__)
+        kal_mem_set(record_root, 0x0, sizeof(custom_ssds_config_context_struct));
+#endif
+        record_root->common_config_record.cf_path = INVALID_VALUE;
+        record_root->common_config_record.cw_path = INVALID_VALUE;
+        record_root->common_config_record.cb_path= INVALID_VALUE;
+        record_root->common_config_record.clir_path = INVALID_VALUE;
+        record_root->common_config_record.clip_path = INVALID_VALUE;
+        record_root->common_config_record.colp_path = INVALID_VALUE;
+        record_root->common_config_record.colr_path = INVALID_VALUE;
+        record_root->common_config_record.csfb_always_xcap_error_code = INVALID_XCAP_ERROR_CODE;
+        record_root->common_config_record.csfb_once_xcap_error_code = INVALID_XCAP_ERROR_CODE;
+        record_root->common_config_record.no_csfb_xcap_error_code = INVALID_XCAP_ERROR_CODE;
+        record_root->common_config_record.disable_ut_timer_value = INVALID_SSDS_TIMER_VALUE;
+        record_root->common_config_record.need_send_409_err_str = INVALID_VALUE;
+        record_root->common_config_record.need_sync_cw_in_234g = INVALID_VALUE;
+        record_root->common_config_record.need_send_test_cmd = INVALID_VALUE;
+		record_root->common_config_record.ussd_path = INVALID_VALUE;
+    }
+}
+
+
+kal_bool	custom_ssds_config_get_request_path(sim_interface_enum	sim_id,
+												nvram_ef_ssds_request_profile_value_struct *value_ptr, 
+												nvram_ef_ssds_request_profile_action_struct *value_action,
+                                                custom_ssds_config_type cfg_type)
+{
+	nvram_ef_ssds_request_profile_struct		*nvram_ptr;	
+	nvram_ef_ssds_request_profile_entry_struct	*request_entry_ptr;
+	kal_bool									retval = KAL_FALSE;
+	custom_ssds_config_context_struct			*context_root;
+	kal_int8									index;
+
+    context_root = _custom_ssds_get_context_by_simid(sim_id,cfg_type);
+
+	if (!context_root || !value_ptr || !value_action)
+	{
+		return	KAL_FALSE;
+	}
+
+	nvram_ptr = &(context_root->request_record);
+
+	for (index=NVRAM_EF_SSDS_REQUEST_PROFILE_MAX_ENTRY_NUM-1; index>=0; index--)		
+	{
+		request_entry_ptr = &(nvram_ptr->req_path_entry[index]);
+		if (KAL_FALSE == request_entry_ptr->is_valid)
+			continue;
+		
+		if (KAL_FALSE == _custom_ssds_check_request_value(&(request_entry_ptr->mask),
+														   &(request_entry_ptr->value),
+														   value_ptr))
+		{
+			continue;
+		}
+
+		/*Finally, we found matched one*/
+		kal_mem_cpy(value_action, &(request_entry_ptr->action), sizeof(nvram_ef_ssds_request_profile_action_struct));
+		
+		retval = KAL_TRUE;
+		break;
+	}
+
+    if(KAL_TRUE == retval)
+	{
+	    kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,entry index:%d,req_path is:%d",cfg_type, index, *value_action);
+    }
+
+	return	retval;
+}
+
+
+kal_bool	custom_ssds_config_get_response_path(sim_interface_enum	sim_id,
+												 nvram_ef_ssds_response_profile_value_struct *value_ptr, 
+												 nvram_ef_ssds_response_profile_action_struct *value_action,
+                                                 custom_ssds_config_type  cfg_type)
+{
+	nvram_ef_ssds_response_profile_struct		*nvram_ptr;	
+	nvram_ef_ssds_response_profile_entry_struct	*nvram_entry_ptr;
+	kal_bool									retval = KAL_FALSE;
+	custom_ssds_config_context_struct			*context_root;
+	kal_int8									index;
+
+    context_root = _custom_ssds_get_context_by_simid(sim_id,cfg_type);
+
+	if (!context_root || !value_ptr || !value_action)
+	{
+		return	KAL_FALSE;
+	}
+	
+	nvram_ptr = &(context_root->response_record);
+
+	for (index=NVRAM_EF_SSDS_RESPONSE_PROFILE_MAX_ENTRY_NUM-1; index>=0; index--)		
+	{
+		nvram_entry_ptr = &(nvram_ptr->response_path_entry[index]);
+		if (KAL_FALSE == nvram_entry_ptr->is_valid)
+			continue;
+
+		if (KAL_FALSE == _custom_ssds_check_response_value(&(nvram_entry_ptr->mask),
+														   &(nvram_entry_ptr->value),
+														   value_ptr))
+		{
+			continue;
+		}
+
+		/*Finally, we found matched one*/
+		kal_mem_cpy(value_action, &(nvram_entry_ptr->action), sizeof(nvram_ef_ssds_response_profile_action_struct));
+		
+		retval = KAL_TRUE;
+		break;
+	}
+
+    if(KAL_TRUE == retval)
+	{
+	    kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,entry index:%d,rsp_path is:%d",cfg_type, index, *value_action);
+    }
+
+	return	retval;
+}
+
+
+
+kal_bool	custom_ssds_config_get_timer_value(ssds_timer_id_enum timer_id,
+	                                           sim_interface_enum	sim_id,
+											   nvram_ef_ssds_timer_value_profile_value_struct *value_ptr, 
+											   nvram_ef_ssds_timer_value_profile_action_struct *value_action,
+                                               custom_ssds_config_type  cfg_type)
+{
+	nvram_ef_ssds_timer_value_profile_struct		*nvram_ptr = NULL;	
+	nvram_ef_ssds_timer_value_profile_entry_struct	*nvram_entry_ptr = NULL;
+	kal_bool									retval = KAL_FALSE;
+	custom_ssds_config_context_struct			*context_root;
+	kal_int8									index;
+
+    context_root = _custom_ssds_get_context_by_simid(sim_id,cfg_type);
+
+	if (!context_root || !value_ptr || !value_action)
+	{
+		return	KAL_FALSE;
+	}
+	nvram_ptr = &(context_root->timer_value_record);
+
+	for (index=NVRAM_EF_SSDS_TIMER_VALUE_PROFILE_MAX_ENTRY_NUM-1; index>=0; index--)		
+	{
+        if(timer_id == REUSE_PDN_TIMER)
+        {
+            nvram_entry_ptr = &(nvram_ptr->reuse_pdn_timer_value_entry[index]);
+        }
+        else if(timer_id == DISABLE_UT_TIMER)
+        {//timer_id == 1
+            nvram_entry_ptr = &(nvram_ptr->disable_ut_timer_value_entry[index]);
+        }
+		else if(timer_id == DISABLE_UT_NW_NO_RESP_TIMER)
+		{
+            nvram_entry_ptr = &(nvram_ptr->disable_ut_timer_nw_no_resp_value_entry[index]);
+		}
+
+		if (KAL_FALSE == nvram_entry_ptr->is_valid)
+			continue;
+
+		if (KAL_FALSE == _custom_ssds_check_timer_value(&(nvram_entry_ptr->mask),
+														   &(nvram_entry_ptr->value),
+														   value_ptr))
+	    {
+			continue;
+		}
+
+		/*Finally, we found matched one*/
+		kal_mem_cpy(value_action, &(nvram_entry_ptr->action), sizeof(nvram_ef_ssds_timer_value_profile_action_struct));
+		retval = KAL_TRUE;
+		break;
+	}
+    if(KAL_TRUE == retval)
+	{
+	    kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,entry index:%d,timer_id is %d,timer value is:%d",cfg_type, index,timer_id, *value_action);
+    }
+
+	return	retval;
+}
+
+#if 1
+//new begin
+void custom_ssds_config_get_request_path_from_common_file(sim_interface_enum       sim_id,
+                                                          custom_ssds_atcmd_type   atcmd_type,
+                                                          nvram_ssds_req_path_type *nvram_req_path,
+                                                          custom_ssds_config_type  cfg_type)
+{
+    nvram_ef_ssds_common_config_profile_struct		    *nvram_ptr = NULL;	
+	custom_ssds_config_context_struct			*context_root;
+
+    context_root = _custom_ssds_get_context_by_simid(sim_id,cfg_type);
+
+	if (!context_root || !nvram_req_path)
+	{
+		return;
+	}
+	nvram_ptr = &(context_root->common_config_record);
+
+    switch(atcmd_type)
+    {
+        case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_FORWARDING:
+        case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_FORWARDING:
+            if(nvram_ptr->cf_path < CUSTOM_SSDS_SS_REQ_PATH_MAX)
+            {
+                *nvram_req_path = nvram_ptr->cf_path;
+                kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,cf_path is:%d in common config file",cfg_type,nvram_ptr->cf_path);
+            }
+            break;
+        case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+        case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+            if(nvram_ptr->cw_path < CUSTOM_SSDS_SS_REQ_PATH_MAX)
+            {
+                *nvram_req_path = nvram_ptr->cw_path;
+                kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,cw_path is:%d in common config file",cfg_type,nvram_ptr->cw_path);
+            }
+            break;
+        case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_BARRING:
+        case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_BARRING:
+            if(nvram_ptr->cb_path < CUSTOM_SSDS_SS_REQ_PATH_MAX)
+            {
+                *nvram_req_path = nvram_ptr->cb_path;
+                kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,cb_path is:%d in common config file",cfg_type,nvram_ptr->cb_path);
+            }
+            break;
+        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
+        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIR:
+            if(nvram_ptr->clir_path < CUSTOM_SSDS_SS_REQ_PATH_MAX)
+            {
+                *nvram_req_path = nvram_ptr->clir_path;
+                kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,clir_path is:%d in common config file",cfg_type,nvram_ptr->clir_path);
+            }
+            break;
+        case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIP:
+        case CUSTOM_SSDS_ATCMD_TYPE_GET_CLIP:
+            if(nvram_ptr->clip_path < CUSTOM_SSDS_SS_REQ_PATH_MAX)
+            {
+                *nvram_req_path = nvram_ptr->clip_path;
+                kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,clip_path is:%d in common config file",cfg_type,nvram_ptr->clip_path);
+            }
+            break;
+        case CUSTOM_SSDS_ATCMD_TYPE_SET_COLP:
+        case CUSTOM_SSDS_ATCMD_TYPE_GET_COLP:
+            if(nvram_ptr->colp_path < CUSTOM_SSDS_SS_REQ_PATH_MAX)
+            {
+                *nvram_req_path = nvram_ptr->colp_path;
+                kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,colp_path is:%d in common config file",cfg_type,nvram_ptr->colp_path);
+            }
+            break;
+        case CUSTOM_SSDS_ATCMD_TYPE_SET_COLR:
+        case CUSTOM_SSDS_ATCMD_TYPE_GET_COLR:
+            if(nvram_ptr->colr_path < CUSTOM_SSDS_SS_REQ_PATH_MAX)
+            {
+                *nvram_req_path = nvram_ptr->colr_path;
+                kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,colr_path is:%d in common config file",cfg_type,nvram_ptr->colr_path);
+            }
+            break;
+        default:
+            break;
+    }
+}
+
+void custom_ssds_config_get_response_path_from_common_file(sim_interface_enum	sim_id,
+												           kal_uint32            xcap_error_code, 
+												           custom_ssds_csfb_type    *csfb_type,
+                                                           custom_ssds_config_type  cfg_type)
+{
+    nvram_ef_ssds_common_config_profile_struct		    *nvram_ptr = NULL;	
+	custom_ssds_config_context_struct			*context_root;
+
+    context_root = _custom_ssds_get_context_by_simid(sim_id,cfg_type);
+
+	if (!context_root || !csfb_type)
+	{
+		return;
+	}
+	nvram_ptr = &(context_root->common_config_record);
+    kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,csfb_always_xcap_error_code is 0x%x,csfb_once_xcap_error_code is 0x%x,no_csfb_xcap_error_code is 0x%x in common config file",
+		cfg_type,nvram_ptr->csfb_always_xcap_error_code,nvram_ptr->csfb_once_xcap_error_code,nvram_ptr->no_csfb_xcap_error_code);
+
+    if(nvram_ptr->csfb_always_xcap_error_code != INVALID_XCAP_ERROR_CODE &&
+       xcap_error_code == nvram_ptr->csfb_always_xcap_error_code)
+    {
+        *csfb_type = CUSTOM_SSDS_CSFB_TYPE_ALWAYS;
+    }
+    else if(nvram_ptr->csfb_once_xcap_error_code != INVALID_XCAP_ERROR_CODE &&
+       xcap_error_code == nvram_ptr->csfb_once_xcap_error_code)
+    {
+        *csfb_type = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+    }
+    else if(nvram_ptr->no_csfb_xcap_error_code != INVALID_XCAP_ERROR_CODE &&
+       xcap_error_code == nvram_ptr->no_csfb_xcap_error_code)
+    {
+        *csfb_type = CUSTOM_SSDS_CSFB_TYPE_NO;
+    }
+    else
+    {
+        kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]There is no valid or matched xcap_response_path config in common config file");
+    }
+}
+
+void custom_ssds_config_get_timer_value_from_common_file(sim_interface_enum	    sim_id,
+                                                         nvram_ssds_timer_type  timer_id,
+												         kal_uint32             *timer_value,
+                                                         custom_ssds_config_type  cfg_type)
+{
+    nvram_ef_ssds_common_config_profile_struct		    *nvram_ptr = NULL;	
+	custom_ssds_config_context_struct			        *context_root;
+
+    context_root = _custom_ssds_get_context_by_simid(sim_id,cfg_type);
+
+	if (!context_root || !timer_value)
+	{
+		return;
+	}
+	nvram_ptr = &(context_root->common_config_record);
+
+    if(timer_id == NVRAM_SSDS_DISABLE_UT_TIMER)
+    {
+        if(nvram_ptr->disable_ut_timer_value!= INVALID_SSDS_TIMER_VALUE)
+        {
+            *timer_value = nvram_ptr->disable_ut_timer_value;
+            kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,disable_ut_timer_value is 0x%x in common config file",cfg_type,nvram_ptr->disable_ut_timer_value);
+        }
+    }
+    else
+    {
+        
+    }
+}
+
+void custom_ssds_config_get_need_send_409_err_string_from_common_file(sim_interface_enum	sim_id,
+                                                                      kal_bool              *need_send,
+                                                                      custom_ssds_config_type  cfg_type)
+{
+    nvram_ef_ssds_common_config_profile_struct		    *nvram_ptr = NULL;	
+	custom_ssds_config_context_struct			        *context_root;
+
+    context_root = _custom_ssds_get_context_by_simid(sim_id,cfg_type);
+
+	if (!context_root || !need_send)
+	{
+		return;
+	}
+	nvram_ptr = &(context_root->common_config_record);
+
+    if(INVALID_VALUE != nvram_ptr->need_send_409_err_str)
+    {
+        *need_send = (nvram_ptr->need_send_409_err_str == 0?KAL_FALSE:KAL_TRUE);
+        kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,need_send_409_err_str is 0x%x in common config file",cfg_type,nvram_ptr->need_send_409_err_str);
+    }
+}
+
+void custom_ssds_config_get_need_sync_cw_in_234g_from_common_file(sim_interface_enum	sim_id,
+                                                                  kal_bool              *need_sync,
+                                                                  custom_ssds_config_type  cfg_type)
+{
+    nvram_ef_ssds_common_config_profile_struct		    *nvram_ptr = NULL;	
+	custom_ssds_config_context_struct			        *context_root;
+
+    context_root = _custom_ssds_get_context_by_simid(sim_id,cfg_type);
+
+	if (!context_root || !need_sync)
+	{
+		return;
+	}
+	nvram_ptr = &(context_root->common_config_record);
+
+    if(INVALID_VALUE != nvram_ptr->need_sync_cw_in_234g)
+    {
+        *need_sync = (nvram_ptr->need_sync_cw_in_234g == 0?KAL_FALSE:KAL_TRUE);
+        kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,need_sync_cw_in_234g is 0x%x in common config file",cfg_type,nvram_ptr->need_sync_cw_in_234g);
+    }
+}
+
+void custom_ssds_config_get_need_send_test_cmd_from_common_file(sim_interface_enum	sim_id,
+                                                                kal_bool            *need_send,
+                                                                custom_ssds_config_type  cfg_type)
+{
+    nvram_ef_ssds_common_config_profile_struct		    *nvram_ptr = NULL;	
+	custom_ssds_config_context_struct			        *context_root;
+
+    context_root = _custom_ssds_get_context_by_simid(sim_id,cfg_type);
+
+	if (!context_root || !need_send)
+	{
+		return;
+	}
+	nvram_ptr = &(context_root->common_config_record);
+
+    if(INVALID_VALUE != nvram_ptr->need_send_test_cmd)
+    {
+        *need_send = (nvram_ptr->need_send_test_cmd == 0?KAL_FALSE:KAL_TRUE);
+        kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,need_send_test_cmd is 0x%x in common config file",cfg_type,nvram_ptr->need_send_test_cmd);
+    }
+}
+
+
+#endif//end
+
+
+kal_bool	custom_ssds_config_get_common_config(kal_uint8 config_id,
+	                                             sim_interface_enum	sim_id,
+											     void *value_action,
+                                                 custom_ssds_config_type  cfg_type)
+{
+	nvram_ef_ssds_common_config_profile_struct		    *nvram_ptr;	
+	nvram_ef_ssds_need_send_409_err_str_entry_struct	*nvram_entry_ptr;
+	kal_bool									        retval = KAL_FALSE;
+	custom_ssds_config_context_struct			        *context_root;
+	kal_int8									        index;
+
+    context_root = _custom_ssds_get_context_by_simid(sim_id,cfg_type);
+
+	if (!context_root || !value_action)
+	{
+		return	KAL_FALSE;
+	}
+	nvram_ptr = &(context_root->common_config_record);
+
+	for (index=NVRAM_EF_SSDS_COMMON_CONFIG_PROFILE_MAX_ENTRY_NUM-1; index>=0; index--)		
+	{
+        if(config_id == NVRAM_SSDS_NEED_SEND_409_ERR_STRING)
+        {
+            nvram_entry_ptr = &(nvram_ptr->need_send_409_err_str_entry[index]);
+		    if (KAL_FALSE == nvram_entry_ptr->is_valid)
+			    continue;
+            /*Finally, we found matched one*/
+            kal_mem_cpy(value_action, &(nvram_entry_ptr->need_send_409_err_str), sizeof(nvram_entry_ptr->need_send_409_err_str));
+		    kal_prompt_trace(MOD_SSDS+sim_id, "[Config file]cfg_type:%d,We found matched one,nvram_entry_ptr->need_send_409_err_str = %d",cfg_type,nvram_entry_ptr->need_send_409_err_str);
+		    retval = KAL_TRUE;
+		    break;
+        }
+        else
+        {
+        }
+	}
+
+	return	retval;
+}
+
+
+void custom_ssds_config_customization(sim_interface_enum sim_slot_id, kal_uint16 op_id, kal_uint16 mccmnc_len, kal_uint8 *mccmnc)
+{
+	custom_ssds_config_context_struct	*record_root;
+	kal_uint16							record_id;
+
+    kal_prompt_trace(MOD_SSDS+sim_slot_id, "%s %d sim_id:%d op_id:%d mccmnc_len:%d ", __FUNCTION__, __LINE__, sim_slot_id, op_id, mccmnc_len);
+
+	/*Init to default value*/
+	record_id = _custom_ssds_get_record_by_simid(sim_slot_id);
+	_custom_ssds_config_init_nvram(record_id);
+	record_root = _custom_ssds_get_context_by_simid(sim_slot_id,CUSTOM_SSDS_CFG_TYPE_NVRAM);
+	if (NULL == record_root)
+		return;
+
+	/*Do we have table define based on op_id and mccmnc?*/
+	_custom_ssds_config_customization(sim_slot_id, op_id, mccmnc_len, mccmnc, record_root);
+
+	/*Write to NVRAM*/
+	record_id = _custom_ssds_get_record_by_simid(sim_slot_id);
+	if (record_id)
+	{
+		nvram_external_write_data(NVRAM_EF_SSDS_REQUEST_PROFILE_LID, record_id, (kal_uint8*)(&(record_root->request_record)), sizeof(nvram_ef_ssds_request_profile_struct));
+		nvram_external_write_data(NVRAM_EF_SSDS_RESPONSE_PROFILE_LID, record_id, (kal_uint8*)(&(record_root->response_record)), sizeof(nvram_ef_ssds_response_profile_struct));
+		nvram_external_write_data(NVRAM_EF_SSDS_PDN_PROFILE_LID, record_id, (kal_uint8*)(&(record_root->pdn_record)), sizeof(nvram_ef_ssds_pdn_profile_struct));
+		nvram_external_write_data(NVRAM_EF_SSDS_PDN_FAIL_PROFILE_LID, record_id, (kal_uint8*)(&(record_root->pdn_fail_record)), sizeof(nvram_ef_ssds_pdn_fail_profile_struct));
+        nvram_external_write_data(NVRAM_EF_SSDS_TIMER_VALUE_PROFILE_LID, record_id, (kal_uint8*)(&(record_root->timer_value_record)), sizeof(nvram_ef_ssds_timer_value_profile_struct));
+        nvram_external_write_data(NVRAM_EF_SSDS_COMMON_CONFIG_PROFILE_LID, record_id, (kal_uint8*)(&(record_root->common_config_record)), sizeof(nvram_ef_ssds_common_config_profile_struct));
+	}
+
+}
+
+void custom_ssds_config_nvram_change_notify(nvram_lid_enum file_id, kal_uint16 record_id, kal_uint16 record_len, void *record_ptr)
+{
+	custom_ssds_config_context_struct		*record_root;
+
+	if (NULL == record_ptr)
+		return;
+
+    kal_prompt_trace(MOD_SSDS, "%s %d file_id:%d record_id:%d record_len:%d ", __FUNCTION__, __LINE__, file_id, record_id, record_len);
+
+	record_root = _custom_ssds_get_context_by_recordid(record_id,CUSTOM_SSDS_CFG_TYPE_NVRAM);
+	if (NULL == record_root)
+		return;
+
+	switch (file_id)
+	{
+		case NVRAM_EF_SSDS_REQUEST_PROFILE_LID:
+			if (record_len == sizeof(nvram_ef_ssds_request_profile_struct))
+			{
+			    kal_prompt_trace(MOD_SSDS, "%s %d ", __FUNCTION__, __LINE__);
+				kal_mem_cpy(&(record_root->request_record), record_ptr, sizeof(nvram_ef_ssds_request_profile_struct));
+
+			}
+            else if((record_id == 1 )&& (record_len == sizeof(nvram_ef_ssds_request_profile_struct)*2))
+            {
+                kal_prompt_trace(MOD_SSDS, "%s %d ", __FUNCTION__, __LINE__);
+                kal_mem_cpy(&(record_root->request_record), record_ptr, sizeof(nvram_ef_ssds_request_profile_struct));
+				kal_mem_cpy(&(record_root[1].request_record), (kal_uint8*)record_ptr+sizeof(nvram_ef_ssds_request_profile_struct), sizeof(nvram_ef_ssds_request_profile_struct));
+			}
+			break;
+			
+		case NVRAM_EF_SSDS_RESPONSE_PROFILE_LID:
+			if (record_len == sizeof(nvram_ef_ssds_response_profile_struct))
+			{
+			    kal_prompt_trace(MOD_SSDS, "%s %d ", __FUNCTION__, __LINE__);
+				kal_mem_cpy(&(record_root->response_record), record_ptr, sizeof(nvram_ef_ssds_response_profile_struct));
+			}
+            else if((record_id == 1 )&& (record_len == sizeof(nvram_ef_ssds_response_profile_struct)*2))
+            {
+                kal_prompt_trace(MOD_SSDS, "%s %d ", __FUNCTION__, __LINE__);
+                kal_mem_cpy(&(record_root->response_record), record_ptr, sizeof(nvram_ef_ssds_response_profile_struct));
+                kal_mem_cpy(&(record_root[1].response_record), (kal_uint8*)record_ptr+sizeof(nvram_ef_ssds_response_profile_struct), sizeof(nvram_ef_ssds_response_profile_struct));
+			}
+			break;
+			
+		case NVRAM_EF_SSDS_PDN_PROFILE_LID:
+			if (record_len == sizeof(nvram_ef_ssds_pdn_profile_struct))
+			{
+			    kal_prompt_trace(MOD_SSDS, "%s %d ", __FUNCTION__, __LINE__);
+				kal_mem_cpy(&(record_root->pdn_record), record_ptr, sizeof(nvram_ef_ssds_pdn_profile_struct));
+			}
+            else if((record_id == 1 )&& (record_len == sizeof(nvram_ef_ssds_pdn_profile_struct)*2))
+            {
+                kal_prompt_trace(MOD_SSDS, "%s %d ", __FUNCTION__, __LINE__);
+                kal_mem_cpy(&(record_root->pdn_record), record_ptr, sizeof(nvram_ef_ssds_pdn_profile_struct));
+                kal_mem_cpy(&(record_root[1].pdn_record), (kal_uint8*)record_ptr+sizeof(nvram_ef_ssds_pdn_profile_struct), sizeof(nvram_ef_ssds_pdn_profile_struct));
+			}
+			break;
+			
+		case NVRAM_EF_SSDS_PDN_FAIL_PROFILE_LID:
+			if (record_len == sizeof(nvram_ef_ssds_pdn_fail_profile_struct))
+			{
+			    kal_prompt_trace(MOD_SSDS, "%s %d ", __FUNCTION__, __LINE__);
+				kal_mem_cpy(&(record_root->pdn_fail_record), record_ptr, sizeof(nvram_ef_ssds_pdn_fail_profile_struct));
+			}
+            else if((record_id == 1 )&& (record_len == sizeof(nvram_ef_ssds_pdn_fail_profile_struct)*2))
+            {
+                kal_prompt_trace(MOD_SSDS, "%s %d ", __FUNCTION__, __LINE__);
+                kal_mem_cpy(&(record_root->pdn_fail_record), record_ptr, sizeof(nvram_ef_ssds_pdn_fail_profile_struct));
+	            kal_mem_cpy(&(record_root[1].pdn_fail_record), (kal_uint8*)record_ptr+sizeof(nvram_ef_ssds_pdn_fail_profile_struct), sizeof(nvram_ef_ssds_pdn_fail_profile_struct));
+			}
+			break;
+        case NVRAM_EF_SSDS_TIMER_VALUE_PROFILE_LID:
+            if (record_len == sizeof(nvram_ef_ssds_timer_value_profile_struct))
+            {
+                kal_prompt_trace(MOD_SSDS, "%s %d ", __FUNCTION__, __LINE__);
+                kal_mem_cpy(&(record_root->timer_value_record), record_ptr, sizeof(nvram_ef_ssds_timer_value_profile_struct));
+            }
+			else if((record_id == 1 )&& (record_len == sizeof(nvram_ef_ssds_timer_value_profile_struct)*2))
+            {
+                kal_prompt_trace(MOD_SSDS, "%s %d ", __FUNCTION__, __LINE__);
+                kal_mem_cpy(&(record_root->timer_value_record), record_ptr, sizeof(nvram_ef_ssds_timer_value_profile_struct));
+                kal_mem_cpy(&(record_root[1].timer_value_record), (kal_uint8*)record_ptr+sizeof(nvram_ef_ssds_timer_value_profile_struct), sizeof(nvram_ef_ssds_timer_value_profile_struct));
+            }
+
+			break;
+        case NVRAM_EF_SSDS_COMMON_CONFIG_PROFILE_LID:
+            if (record_len == sizeof(nvram_ef_ssds_common_config_profile_struct))
+            {
+                kal_prompt_trace(MOD_SSDS, "%s %d ", __FUNCTION__, __LINE__);
+                kal_mem_cpy(&(record_root->common_config_record), record_ptr, sizeof(nvram_ef_ssds_common_config_profile_struct));
+            }
+			else if((record_id == 1 )&& (record_len == sizeof(nvram_ef_ssds_common_config_profile_struct)*2))
+            {
+                kal_prompt_trace(MOD_SSDS, "%s %d ", __FUNCTION__, __LINE__);
+                kal_mem_cpy(&(record_root->common_config_record), record_ptr, sizeof(nvram_ef_ssds_common_config_profile_struct));
+                kal_mem_cpy(&(record_root[1].common_config_record), (kal_uint8*)record_ptr+sizeof(nvram_ef_ssds_common_config_profile_struct), sizeof(nvram_ef_ssds_common_config_profile_struct));
+            }
+
+			break;
+			
+		default:
+			break;
+	}
+	
+}
+
+void custom_ssds_config_nvram_change_register(kal_bool	is_register)
+{
+	if (KAL_TRUE == is_register)
+	{
+		nvram_external_msg_reg_req(NVRAM_EF_SSDS_REQUEST_PROFILE_LID, 1, 2);
+		nvram_external_msg_reg_req(NVRAM_EF_SSDS_RESPONSE_PROFILE_LID, 1, 2);
+		nvram_external_msg_reg_req(NVRAM_EF_SSDS_PDN_PROFILE_LID, 1, 2);
+		nvram_external_msg_reg_req(NVRAM_EF_SSDS_PDN_FAIL_PROFILE_LID, 1, 2);
+        nvram_external_msg_reg_req(NVRAM_EF_SSDS_TIMER_VALUE_PROFILE_LID, 1, 2);
+        nvram_external_msg_reg_req(NVRAM_EF_SSDS_COMMON_CONFIG_PROFILE_LID, 1, 2);
+	}
+	else
+	{
+		nvram_external_msg_dereg_req(NVRAM_EF_SSDS_REQUEST_PROFILE_LID, 1, 2);
+		nvram_external_msg_dereg_req(NVRAM_EF_SSDS_RESPONSE_PROFILE_LID, 1, 2);
+		nvram_external_msg_dereg_req(NVRAM_EF_SSDS_PDN_PROFILE_LID, 1, 2);
+		nvram_external_msg_dereg_req(NVRAM_EF_SSDS_PDN_FAIL_PROFILE_LID, 1, 2);
+        nvram_external_msg_dereg_req(NVRAM_EF_SSDS_TIMER_VALUE_PROFILE_LID, 1, 2);
+        nvram_external_msg_dereg_req(NVRAM_EF_SSDS_COMMON_CONFIG_PROFILE_LID, 1, 2);
+	}
+}
+
+void custom_ssds_config_print_nvram(kal_uint16 record_index)
+{
+	custom_ssds_config_context_struct 			*record_root;
+	nvram_ef_ssds_request_profile_struct		*request_record;
+	nvram_ef_ssds_response_profile_struct		*response_record;
+	nvram_ef_ssds_pdn_profile_struct			*pdn_record;
+	nvram_ef_ssds_request_profile_entry_struct	*request_entry;
+	nvram_ef_ssds_response_profile_entry_struct	*response_entry;
+	nvram_ef_ssds_pdn_profile_entry_struct		*pdn_entry;	
+	kal_uint32									index;
+
+    kal_prompt_trace(MOD_SSDS, "Dump SSDS NVRAM buffer... ");
+
+	record_root = _custom_ssds_get_context_by_recordid(record_index,CUSTOM_SSDS_CFG_TYPE_NVRAM);
+	if (NULL == record_root)
+		return;
+
+	request_record = &(record_root->request_record);
+	response_record = &(record_root->response_record);
+	pdn_record = &(record_root->pdn_record);
+
+    kal_prompt_trace(MOD_SSDS, "\nDump SSDS NVRAM buffer...Request ");
+    kal_prompt_trace(MOD_SSDS, "      Atcmd Opid Sim Imsreg Imsdomaim Roaming Action Valid Index");
+
+	for (index=0; index<NVRAM_EF_SSDS_REQUEST_PROFILE_MAX_ENTRY_NUM; index++)
+	{
+		request_entry = &(request_record->req_path_entry[index]);
+
+		if (request_entry){;}
+		
+	    kal_prompt_trace(MOD_SSDS, "   M: %d      %d    %d       %d          %d        %d        %d     %d ",
+									(kal_uint32)(request_entry->mask.check_atcmd_type),
+									(kal_uint32)(request_entry->mask.check_sim_type),(kal_uint32)(request_entry->mask.check_ims_registered),
+									(kal_uint32)(request_entry->mask.check_ims_domain),(kal_uint32)(request_entry->mask.check_roaming_type),
+									(kal_uint32)(request_entry->action.req_path),(kal_uint32)(request_entry->is_valid), index);
+
+	    kal_prompt_trace(MOD_SSDS, "   V: %d      %d    %d       %d          %d        %d        %d     %d ",
+									(kal_uint32)(request_entry->value.atcmd_type), 
+									(kal_uint32)(request_entry->value.sim_type),(kal_uint32)(request_entry->value.ims_registered),
+									(kal_uint32)(request_entry->value.ims_domain),(kal_uint32)(request_entry->value.roaming_type),
+									(kal_uint32)(request_entry->action.req_path),(kal_uint32)(request_entry->is_valid), index);		
+	}
+
+    kal_prompt_trace(MOD_SSDS, "\nDump SSDS NVRAM buffer...Response ");
+    kal_prompt_trace(MOD_SSDS, "      Atcmd Opid Sim Imsreg Imsdomaim Roaming ErrID Action Valid Index");
+
+	for (index=0; index<NVRAM_EF_SSDS_RESPONSE_PROFILE_MAX_ENTRY_NUM; index++)
+	{
+		response_entry = &(response_record->response_path_entry[index]);
+
+		if (response_entry){;}
+
+	    kal_prompt_trace(MOD_SSDS, "   M: %d     %d    %d       %d       %d     %d      %d      %d     %d ",
+									(kal_uint32)(response_entry->mask.check_atcmd_type), 
+									(kal_uint32)(response_entry->mask.check_sim_type),(kal_uint32)(response_entry->mask.check_ims_registered),
+									(kal_uint32)(response_entry->mask.check_ims_domain),(kal_uint32)(response_entry->mask.check_roaming_type),
+									(kal_uint32)(response_entry->mask.check_rsp_id),
+									(kal_uint32)(response_entry->action.rsp_path),(kal_uint32)(response_entry->is_valid), index);
+
+	    kal_prompt_trace(MOD_SSDS, "   V: %d      %d    %d       %d       %d     %d      %d      %d     %d ",
+									(kal_uint32)(response_entry->value.atcmd_type),
+									(kal_uint32)(response_entry->value.sim_type),(kal_uint32)(response_entry->value.ims_registered),
+									(kal_uint32)(response_entry->value.ims_domain),(kal_uint32)(response_entry->value.roaming_type),
+									(kal_uint32)(response_entry->value.rsp_id),
+									(kal_uint32)(response_entry->action.rsp_path),(kal_uint32)(response_entry->is_valid), index);
+	}
+
+    kal_prompt_trace(MOD_SSDS, "\nDump SSDS NVRAM buffer...PDN Setup ");
+    kal_prompt_trace(MOD_SSDS, "      Atcmd Opid Sim Imsreg Imsdomaim Roaming R_set D_set Action Valid Index");
+
+	for (index=0; index<NVRAM_EF_SSDS_PDN_PROFILE_MAX_ENTRY_NUM; index++)
+	{
+		pdn_entry = &(pdn_record->pdn_path_entry[index]);
+
+		if (pdn_entry){;}
+
+	    kal_prompt_trace(MOD_SSDS, "   M: %d       %d    %d     %d      %d    %d      %d      %d     %d      %d ",
+									(kal_uint32)(pdn_entry->mask.check_atcmd_type), 
+									(kal_uint32)(pdn_entry->mask.check_sim_type),(kal_uint32)(pdn_entry->mask.check_ims_registered),
+									(kal_uint32)(pdn_entry->mask.check_ims_domain),(kal_uint32)(pdn_entry->mask.check_roaming_type),
+									(kal_uint32)(pdn_entry->mask.check_roaming_setting), (kal_uint32)(pdn_entry->mask.check_data_setting),
+									(kal_uint32)(pdn_entry->action.pdn_path),(kal_uint32)(pdn_entry->is_valid), index);
+
+	    kal_prompt_trace(MOD_SSDS, "   V: %d      %d     %%d     %d      %d    %d      %d      %d     %d      %d ",
+									(kal_uint32)(pdn_entry->value.atcmd_type),
+									(kal_uint32)(pdn_entry->value.sim_type),(kal_uint32)(pdn_entry->value.ims_registered),
+									(kal_uint32)(pdn_entry->value.ims_domain),(kal_uint32)(pdn_entry->value.roaming_type),
+									(kal_uint32)(pdn_entry->value.roaming_setting), (kal_uint32)(pdn_entry->value.data_setting),
+									(kal_uint32)(pdn_entry->action.pdn_path),(kal_uint32)(pdn_entry->is_valid), index);	
+	}
+
+}
+void custom_ssds_config_init(void)
+{
+	kal_uint16	record_index;
+	
+	nvram_ltable_register(logical_data_item_table_ssds);	
+	for (record_index=0; record_index<CUSTOM_SSDS_CONFIG_CONTEXT_MAX_NUM; record_index++)
+	{
+		_custom_ssds_config_init_nvram(record_index+1);
+	}
+}
+
diff --git a/mcu/custom/protocol/common/ps/custom_ssds_config.h b/mcu/custom/protocol/common/ps/custom_ssds_config.h
new file mode 100644
index 0000000..f7fdded
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_ssds_config.h
@@ -0,0 +1,155 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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:
+ * ---------
+ *   custom_ssds_config.h
+ *
+ * Project:
+ * --------
+ *   MOLY
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the MM configuration.
+ *
+ * Author:
+ * -------
+ *   
+ *
+ *******************************************************************************/
+
+#ifndef __CUSTOM_SSDS_CONFIG_H__
+#define __CUSTOM_SSDS_CONFIG_H__
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "ps_public_enum.h"
+#include "l4_ps_api.h"
+#include "sim_ps_api.h"
+
+#include "nvram_editor_data_item.h"
+#include "ssds_nvram_editor.h"
+#include "nvram_interface.h"
+#include "ssds_nvram_def.h"
+
+#define	CUSTOM_SSDS_CONFIG_CONTEXT_MAX_NUM	2
+#define INVALID_XCAP_ERROR_CODE  0xFFFFFFFF
+#define INVALID_SSDS_TIMER_VALUE 0xFFFFFFFF
+#define INVALID_VALUE            0xFF
+
+typedef struct
+{
+	nvram_ef_ssds_request_profile_struct	    request_record;
+	nvram_ef_ssds_response_profile_struct	    response_record;
+	nvram_ef_ssds_pdn_profile_struct		    pdn_record;
+	nvram_ef_ssds_pdn_fail_profile_struct	    pdn_fail_record;
+    nvram_ef_ssds_timer_value_profile_struct    timer_value_record;
+    nvram_ef_ssds_common_config_profile_struct  common_config_record;
+
+}custom_ssds_config_context_struct;
+
+typedef enum
+{
+    REUSE_PDN_TIMER,
+    DISABLE_UT_TIMER,
+    DISABLE_UT_NW_NO_RESP_TIMER,
+	SSDS_MAX_TIMER
+}ssds_timer_id_enum;
+
+
+kal_bool	custom_ssds_config_get_request_path(sim_interface_enum	sim_id,
+												nvram_ef_ssds_request_profile_value_struct *value_ptr, 
+												nvram_ef_ssds_request_profile_action_struct *value_action,
+                                                custom_ssds_config_type cfg_type);
+kal_bool	custom_ssds_config_get_response_path(sim_interface_enum	sim_id,
+												 nvram_ef_ssds_response_profile_value_struct *value_ptr, 
+												 nvram_ef_ssds_response_profile_action_struct *value_action,
+                                                 custom_ssds_config_type cfg_type);
+kal_bool	custom_ssds_config_get_timer_value(ssds_timer_id_enum timer_id,
+	                                           sim_interface_enum	sim_id,
+											   nvram_ef_ssds_timer_value_profile_value_struct *value_ptr, 
+											   nvram_ef_ssds_timer_value_profile_action_struct *value_action,
+                                               custom_ssds_config_type cfg_type);
+kal_bool	custom_ssds_config_get_common_config(kal_uint8 config_id,
+	                                             sim_interface_enum	sim_id,
+											     void *value_action,
+                                                 custom_ssds_config_type cfg_type);
+
+void custom_ssds_config_get_request_path_from_common_file(sim_interface_enum       sim_id,
+                                                          custom_ssds_atcmd_type   atcmd_type,
+                                                          nvram_ssds_req_path_type *nvram_req_path,
+                                                          custom_ssds_config_type  cfg_type);
+
+void custom_ssds_config_get_response_path_from_common_file(sim_interface_enum	sim_id,
+												           kal_uint32            xcap_error_code, 
+												           custom_ssds_csfb_type    *csfb_type,
+                                                           custom_ssds_config_type cfg_type);
+
+void custom_ssds_config_get_timer_value_from_common_file(sim_interface_enum	    sim_id,
+                                                         nvram_ssds_timer_type  timer_id,
+												         kal_uint32             *timer_value,
+                                                         custom_ssds_config_type cfg_type);
+
+void custom_ssds_config_get_need_send_409_err_string_from_common_file(sim_interface_enum	sim_id,
+                                                                      kal_bool              *need_send,
+                                                                      custom_ssds_config_type cfg_type);
+
+void custom_ssds_config_get_need_sync_cw_in_234g_from_common_file(sim_interface_enum	sim_id,
+                                                                  kal_bool              *need_sync,
+                                                                  custom_ssds_config_type cfg_type);
+
+void custom_ssds_config_get_need_send_test_cmd_from_common_file(sim_interface_enum	sim_id,
+                                                                kal_bool            *need_send,
+                                                                custom_ssds_config_type cfg_type);
+
+void custom_ssds_config_customization(sim_interface_enum sim_slot_id, kal_uint16 op_id, kal_uint16 mccmnc_len, kal_uint8 *mccmnc);
+void custom_ssds_config_nvram_change_notify(nvram_lid_enum file_id, kal_uint16 record_id, kal_uint16 record_len, void *record_ptr);
+void custom_ssds_config_nvram_change_register(kal_bool	is_register);
+void custom_ssds_config_print_nvram(kal_uint16 record_index);
+void custom_ssds_config_init(void);
+void _custom_ssds_config_init_nvram(kal_uint16	record_index);
+
+kal_uint16 _custom_ssds_get_record_by_simid(sim_interface_enum	sim_id);
+
+custom_ssds_config_context_struct * _custom_ssds_get_context_by_recordid(kal_uint16 record_id, custom_ssds_config_type  cfg_type);
+
+custom_ssds_config_context_struct * _custom_ssds_get_context_by_simid(sim_interface_enum	sim_id, custom_ssds_config_type  cfg_type);
+
+
+
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_tcm_config.c b/mcu/custom/protocol/common/ps/custom_tcm_config.c
new file mode 100644
index 0000000..c80efac
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_tcm_config.c
@@ -0,0 +1,185 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CUSTOM_TCM_CONFIG.C
+ *
+ * Project:
+ * --------
+ *   
+ *
+ * Description:
+ * ------------
+ *
+ *
+ * Author:
+ * -------
+ *
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#include "custom_tcm_config.h"
+#include "l4_ps_api.h"  // qos and GCF mode
+
+/* Note: BASIC projects would have NVRAM_NOT_PRESENT but still build custom files. */
+#ifdef __PS_SERVICE__ 
+
+kal_bool                 custom_tcm_qos_is_supported(void) { return KAL_TRUE; }
+kal_bool                 custom_tcm_qos_is_testing(void)   { return (query_ps_conf_test_mode() == PS_CONF_TEST_IOT); }
+nvram_ef_sic_result_enum custom_tcm_qos_offed(void)        { return SIC_RESULT_QOS_R6; }
+nvram_ef_sic_result_enum custom_tcm_qos_testing(void)      { return SIC_RESULT_QOS_R11; }
+
+kal_bool                 custom_tcm_pdnReqType_is_supported(void) { return KAL_TRUE; }
+kal_bool                 custom_tcm_pdnReqType_is_testing(void)   { return KAL_FALSE; }
+nvram_ef_sic_result_enum custom_tcm_pdnReqType_offed(void)        { return SIC_RESULT_PDNREQTYPE_NOT_CARRY; }
+nvram_ef_sic_result_enum custom_tcm_pdnReqType_testing(void)      { return SIC_RESULT_PDNREQTYPE_CAN_CARRY; }
+
+kal_bool                 custom_tcm_v4AddrAlloc_is_supported(void) { return KAL_TRUE; }
+kal_bool                 custom_tcm_v4AddrAlloc_is_testing(void)   { return (query_ps_conf_test_mode() == PS_CONF_TEST_IOT); }
+nvram_ef_sic_result_enum custom_tcm_v4AddrAlloc_offed(void)        { return SIC_RESULT_V4ADDRALLOC_NONE; }
+nvram_ef_sic_result_enum custom_tcm_v4AddrAlloc_testing(void)      { return SIC_RESULT_V4ADDRALLOC_VIA_NASSIG; }
+
+kal_bool                 custom_tcm_v4dns_is_supported(void) { return KAL_TRUE; }         
+kal_bool                 custom_tcm_v4dns_is_testing(void)   { return (query_ps_conf_test_mode() == PS_CONF_TEST_IOT); }        
+nvram_ef_sic_result_enum custom_tcm_v4dns_offed(void)        { return SIC_RESULT_V4REQ_NONE; }
+nvram_ef_sic_result_enum custom_tcm_v4dns_testing(void)      { return SIC_RESULT_V4REQ_DNSV4; }
+
+kal_bool                 custom_tcm_v4mtu_is_supported(void) { return KAL_TRUE; }         
+kal_bool                 custom_tcm_v4mtu_is_testing(void)   { return KAL_FALSE; }        
+nvram_ef_sic_result_enum custom_tcm_v4mtu_offed(void)        { return SIC_RESULT_V4REQ_NONE; }
+nvram_ef_sic_result_enum custom_tcm_v4mtu_testing(void)      { return SIC_RESULT_V4REQ_MTUV4; }
+
+kal_bool custom_tcm_bcm_is_supported(protocol_id_enum ps_id) {
+    if (sbp_query_md_feature_by_ps(SBP_DISABLE_MS_SUPPORT_OF_NETWORK_REQUESTED_BEARER_CONTROL_INDICATOR,ps_id) == KAL_TRUE)
+    {
+        return KAL_FALSE;
+    }
+    else
+    {
+        return KAL_TRUE;
+    } 
+}
+kal_bool custom_tcm_bcm_is_testing(void) {
+    #ifdef __REL7__
+    if (query_ps_conf_test_mode() == PS_CONF_TEST_IOT && (query_ps_conf_test_profile_setting() & IOT_TEST_ERICSSON))  {
+        return KAL_TRUE ;
+    } else if (query_ps_conf_test_mode() == PS_CONF_TEST_OPERATOR && 
+                ((query_ps_conf_test_profile_setting() & OPERATOR_TEST_CU) ||
+                 (query_ps_conf_test_profile_setting() & OPERATOR_TEST_VODAFONE) ||
+                 (query_ps_conf_test_profile_setting() & OPERATOR_TEST_ATNT)
+                )) {
+        return KAL_TRUE ;
+    } else 
+    #endif /* __REL7__ */
+    {
+        return KAL_FALSE ;
+    }
+}
+nvram_ef_sic_result_enum custom_tcm_bcm_offed(void)        { return SIC_RESULT_BCMETFT_NONE; }
+nvram_ef_sic_result_enum custom_tcm_bcm_testing(void)      { return SIC_RESULT_BCMETFT_BCM; }
+
+kal_bool                 custom_tcm_etft_is_supported(void) { return KAL_TRUE; }         
+kal_bool                 custom_tcm_etft_is_testing(void)   { return (query_ps_conf_test_mode() == PS_CONF_TEST_IOT); }        
+nvram_ef_sic_result_enum custom_tcm_etft_offed(void)        { return SIC_RESULT_BCMETFT_NONE; }
+nvram_ef_sic_result_enum custom_tcm_etft_testing(void)      { return SIC_RESULT_BCMETFT_ETFT; }
+
+kal_bool                 custom_tcm_psi_in_pco_is_supported(void) { return KAL_TRUE; }         
+kal_bool                 custom_tcm_psi_in_pco_is_testing(void)   { return (query_ps_conf_test_mode() == PS_CONF_TEST_IOT); }        
+nvram_ef_sic_result_enum custom_tcm_psi_in_pco_offed(void)        { return SIC_RESULT_PSI_IN_PCO_CAN_CARRY; }
+nvram_ef_sic_result_enum custom_tcm_psi_in_pco_testing(void)      { return SIC_RESULT_PSI_IN_PCO_CAN_CARRY; }
+
+kal_bool                 custom_tcm_extended_eps_qos_is_supported(void) { return KAL_TRUE; }         
+kal_bool                 custom_tcm_extended_eps_qos_is_testing(void)   { return (query_ps_conf_test_mode() == PS_CONF_TEST_IOT); }        
+nvram_ef_sic_result_enum custom_tcm_extended_eps_qos_offed(void)        { return SIC_RESULT_EXTENDED_EPS_QOS_CAN_CARRY; }
+nvram_ef_sic_result_enum custom_tcm_extended_eps_qos_testing(void)      { return SIC_RESULT_EXTENDED_EPS_QOS_CAN_CARRY; }
+
+/* ALPS03016139 */
+/* If you DONT want to request P-CSCF PCO in roaming attach when some SIM is inserted, 
+ * please add the SIM MCC-MNC in the below list 
+ * - Note: The <p-cscf-discovery> setting by AT+CGDCONT would be ignored directly in roaming attach */
+const kal_char *CUSTOM_TCM_IGNORE_PCSCF_DISCOVERY_IN_SIM_PLMNS[] = { 
+    "26202", // MCC-MNC for VDF DE SIM 
+
+    /* Add before this line. */
+    END_OF_CUSTOM_TCM_IGNORE_PCSCF_DISCOVERY_IN_SIM_PLMNS
+} ;
+
+/* Example for setting Arrearage APN Prefix list in this function.
+ * Usage: For a few specific apn name (e.g., "aaa", "bbb" are arrearage apn prefix specified by the operator)
+ */
+
+/***********************      MODIFY THIS LINE AS EXAMPLE BLOCK   *******************************************************/
+const kal_char *CUSTOM_ARREARAGE_APN_PREFIX[] = {}; // fill in this array with APN prefix, e.g. {"aaa", "bbb"}
+/***********************      MODIFY THIS LINE AS EXAMPLE BLOCK   *******************************************************/
+const size_t ARREARAGE_APN_PREFIX_NUM = sizeof(CUSTOM_ARREARAGE_APN_PREFIX)/sizeof(*CUSTOM_ARREARAGE_APN_PREFIX);
+
+#endif /* __PS_SERVICE__ */
diff --git a/mcu/custom/protocol/common/ps/custom_tcm_config.h b/mcu/custom/protocol/common/ps/custom_tcm_config.h
new file mode 100644
index 0000000..d2007ea
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_tcm_config.h
@@ -0,0 +1,164 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CUSTOM_TCM_CONFIG.H
+ *
+ * Project:
+ * --------
+ *   
+ *
+ * Description:
+ * ------------
+ *
+ *
+ * Author:
+ * -------
+ *
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef _CUSTOM_TCM_CONFIG_H
+#define _CUSTOM_TCM_CONFIG_H
+
+/** kal */
+#include "kal_general_types.h"
+
+/** enum */
+#include "l4_nvram_editor.h"
+#include "nvram_editor_data_item.h"
+#include "sim_exported_enum.h"
+
+/** struct */
+
+/** Macros */
+
+/* Note: BASIC projects would have NVRAM_NOT_PRESENT but still build custom files. */
+#ifdef __PS_SERVICE__ 
+kal_bool                 custom_tcm_qos_is_supported(void) ; 
+kal_bool                 custom_tcm_qos_is_testing(void)   ; 
+nvram_ef_sic_result_enum custom_tcm_qos_offed(void)        ; 
+nvram_ef_sic_result_enum custom_tcm_qos_testing(void)      ; 
+
+kal_bool                 custom_tcm_pdnReqType_is_supported(void) ;
+kal_bool                 custom_tcm_pdnReqType_is_testing(void)   ;  
+nvram_ef_sic_result_enum custom_tcm_pdnReqType_offed(void)        ;
+nvram_ef_sic_result_enum custom_tcm_pdnReqType_testing(void)      ;
+
+kal_bool                 custom_tcm_v4AddrAlloc_is_supported(void) ;
+kal_bool                 custom_tcm_v4AddrAlloc_is_testing(void)   ;
+nvram_ef_sic_result_enum custom_tcm_v4AddrAlloc_offed(void)        ;
+nvram_ef_sic_result_enum custom_tcm_v4AddrAlloc_testing(void)      ;
+
+kal_bool                 custom_tcm_v4dns_is_supported(void) ;
+kal_bool                 custom_tcm_v4dns_is_testing(void)   ;
+nvram_ef_sic_result_enum custom_tcm_v4dns_offed(void)        ;
+nvram_ef_sic_result_enum custom_tcm_v4dns_testing(void)      ;
+
+kal_bool                 custom_tcm_v4mtu_is_supported(void) ;
+kal_bool                 custom_tcm_v4mtu_is_testing(void)   ;
+nvram_ef_sic_result_enum custom_tcm_v4mtu_offed(void)        ;
+nvram_ef_sic_result_enum custom_tcm_v4mtu_testing(void)      ;
+
+kal_bool                 custom_tcm_bcm_is_supported(protocol_id_enum ps_id) ;
+kal_bool                 custom_tcm_bcm_is_testing(void)   ;
+nvram_ef_sic_result_enum custom_tcm_bcm_offed(void)        ;
+nvram_ef_sic_result_enum custom_tcm_bcm_testing(void)      ;
+
+kal_bool                 custom_tcm_etft_is_supported(void) ;
+kal_bool                 custom_tcm_etft_is_testing(void)   ;
+nvram_ef_sic_result_enum custom_tcm_etft_offed(void)        ;
+nvram_ef_sic_result_enum custom_tcm_etft_testing(void)      ;
+
+kal_bool                 custom_tcm_psi_in_pco_is_supported(void) ;
+kal_bool                 custom_tcm_psi_in_pco_is_testing(void)   ;
+nvram_ef_sic_result_enum custom_tcm_psi_in_pco_offed(void)        ;
+nvram_ef_sic_result_enum custom_tcm_psi_in_pco_testing(void)      ;
+
+kal_bool                 custom_tcm_extended_eps_qos_is_supported(void) ;
+kal_bool                 custom_tcm_extended_eps_qos_is_testing(void)   ;
+nvram_ef_sic_result_enum custom_tcm_extended_eps_qos_offed(void)        ;
+nvram_ef_sic_result_enum custom_tcm_extended_eps_qos_testing(void)      ;
+
+/* ALPS03016139 */
+#define END_OF_CUSTOM_TCM_IGNORE_PCSCF_DISCOVERY_IN_SIM_PLMNS "FFFFFF"
+extern const kal_char *CUSTOM_TCM_IGNORE_PCSCF_DISCOVERY_IN_SIM_PLMNS[] ;
+
+extern const kal_char *CUSTOM_ARREARAGE_APN_PREFIX[];
+extern const size_t ARREARAGE_APN_PREFIX_NUM;
+#endif /* __PS_SERVICE__ */
+
+#endif /* _CUSTOM_TCM_CONFIG_H */
diff --git a/mcu/custom/protocol/common/ps/custom_uas_config.c b/mcu/custom/protocol/common/ps/custom_uas_config.c
new file mode 100644
index 0000000..ffd5bea
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_uas_config.c
@@ -0,0 +1,128 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_uas_config.c
+ *
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the UAS configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#include "custom_uas_config.h"
+
+/*****************************************************************************
+* FUNCTION
+*  uas_get_custom_bmc_max_history_num
+* DESCRIPTION
+*   This function is used to get the customized bmc max history num
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint32
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint32 uas_get_custom_bmc_max_history_num (void)
+{
+   return (CUSTOM_MAX_BMC_HISTORY_NUM);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  uas_custom_is_23G_pingpong_restrain_enable
+* DESCRIPTION
+*   The function returns if the feature "23G PingPong restrain" enabled or not.
+*
+* PARAMETERS
+*   void
+* RETURNS
+*   kal_bool
+*   KAL_TRUE: the feature is enabled, KAL_FALSE: the feature is disabled (default).
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool uas_custom_is_23G_pingpong_restrain_enable()
+{
+    return KAL_FALSE;
+}
+
+/****************** For TAS 3A customize ******************/
+kal_uint8 uas_get_custom_3A_thresholdownsystem_csps()
+{
+    return (TDD_3A_THRESHOLDOWNSYSTM_CSPS);
+}
+
+kal_uint8 uas_get_custom_3A_thresholdothersystem_2G_csps()
+{
+    return (TDD_3A_THRESHOLDOTHERSYSTM_2G_CSPS);
+}
+
+kal_uint8 uas_get_custom_3A_thresholdownsystem_cs()
+{
+    return (TDD_3A_THRESHOLDOWNSYSTM_CS);    
+}
+
+kal_uint8 uas_get_custom_3A_thresholdothersystem_2G_cs()
+{
+    return (TDD_3A_THRESHOLDOTHERSYSTM_2G_CS);    
+}
+
diff --git a/mcu/custom/protocol/common/ps/custom_uas_config.h b/mcu/custom/protocol/common/ps/custom_uas_config.h
new file mode 100644
index 0000000..097b539
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_uas_config.h
@@ -0,0 +1,97 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ * custom_uas_config.h
+ *
+ * Project:
+ * --------
+ *   MONZA
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the UAS configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ 
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifndef _CUSTOM_UAS_CONFIG_H
+#define _CUSTOM_UAS_CONFIG_H
+
+#include "kal_general_types.h"
+
+/****  For customer to define max BMC history number.  ****/
+/****  Default size is 32, the value MUST be 32 ~ 255 !  ****/
+#define CUSTOM_MAX_BMC_HISTORY_NUM 32
+
+/**** Check whether the setting is valid. ****/
+#if (CUSTOM_MAX_BMC_HISTORY_NUM < 32) || (CUSTOM_MAX_BMC_HISTORY_NUM > 255)
+#error The value of CUSTOM_MAX_BMC_HISTORY_NUM is not allowed !!
+#endif
+
+/***** for TAS 3A customize *****/
+/**** default value is 0, the value must be [0,125] *****/
+#define TDD_3A_THRESHOLDOWNSYSTM_CSPS 0
+#define TDD_3A_THRESHOLDOTHERSYSTM_2G_CSPS 0
+#define TDD_3A_THRESHOLDOWNSYSTM_CS 0
+#define TDD_3A_THRESHOLDOTHERSYSTM_2G_CS 0
+
+/*************************************************************************
+* Function
+*************************************************************************/
+extern kal_uint32 uas_get_custom_bmc_max_history_num (void);
+extern kal_bool uas_custom_is_23G_pingpong_restrain_enable();
+
+extern kal_uint8 uas_get_custom_3A_thresholdownsystem_csps();
+extern kal_uint8 uas_get_custom_3A_thresholdothersystem_2G_csps();
+extern kal_uint8 uas_get_custom_3A_thresholdownsystem_cs();
+extern kal_uint8 uas_get_custom_3A_thresholdothersystem_2G_cs();
+
+#endif /* _CUSTOM_UAS_CONFIG_H */
+
+
diff --git a/mcu/custom/protocol/common/ps/custom_uem.c b/mcu/custom/protocol/common/ps/custom_uem.c
new file mode 100644
index 0000000..3504563
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_uem.c
@@ -0,0 +1,232 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   custom_uem_config.c
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *
+ * Author:
+ * -------
+ * -------
+ *
+  *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "kal_general_types.h"
+#include "kal_trace.h"
+#include "uem_trc.h"
+#include "custom_uem.h"
+#include "device.h"
+#include "dcl.h"
+
+/* RMI default vaules*/
+#define CUSTOM_UEM_RMI_LANG_ID_DEFAULT_0   'e'
+#define CUSTOM_UEM_RMI_LANG_ID_DEFAULT_1   'n'
+#define CUSTOM_UEM_RMI_DATE_MODE_DEFAULT   1
+
+static const kal_uint8* g_custom_uem_equip_id[] = 
+{
+    (kal_uint8*)"MTK1",
+#ifdef __DM_MO_SUPPORT__
+    (kal_uint8*)"MTK3",
+#else
+    (kal_uint8*)"MTK2",
+#endif
+    (kal_uint8*)"MTK3",
+    (kal_uint8*)"MTK4",
+    (kal_uint8*)"MTK5",
+    (kal_uint8*)"MTK6",
+    (kal_uint8*)"MTK7",
+    (kal_uint8*)"MTK8",
+};
+
+
+
+void custom_uem_set_rmi_lang_id(kal_uint8 *lang_id)
+{
+    if (*((kal_uint16*)lang_id) == 0)
+    {
+        lang_id[0] = CUSTOM_UEM_RMI_LANG_ID_DEFAULT_0;
+        lang_id[1] = CUSTOM_UEM_RMI_LANG_ID_DEFAULT_1;
+    }
+}
+
+kal_uint8* custom_uem_get_equip_id(kal_uint8 equip_id)
+{
+    return (kal_uint8*)g_custom_uem_equip_id[equip_id];
+}
+
+//#pragma arm section code = "PRIMARY_ROCODE", rodata = "PRIMARY_RODATA"
+
+#ifdef __VIBRATION_SPEAKER_SUPPORT__
+
+static custom_uem_spkvib_func g_custom_uem_spkvib_func;
+#endif
+
+extern kal_bool custom_cfg_gpio_set_level(kal_uint8 gpio_dev_type, kal_uint8 gpio_dev_level );
+
+kal_bool custom_uem_gpio_set_level(kal_uint8 gpio_dev_type, kal_uint8 gpio_dev_level)
+{
+#ifndef __MTK_TARGET__
+    return custom_cfg_gpio_set_level_modis(gpio_dev_type, gpio_dev_level);
+#else
+#if !defined(L4_NOT_PRESENT)
+//    kal_trace(TRACE_FUNC, FUNC_UEM_CUST_SET_LEVEL, gpio_dev_type, gpio_dev_level);
+#endif
+ 
+#ifdef __VIBRATION_SPEAKER_SUPPORT__
+    if (gpio_dev_type == GPIO_DEV_VIBRATOR && g_custom_uem_spkvib_func)
+    {
+        g_custom_uem_spkvib_func((gpio_dev_level != 0));
+        return KAL_TRUE;
+    }
+#endif
+    return custom_cfg_gpio_set_level(gpio_dev_type, gpio_dev_level);
+#endif
+}
+
+#ifdef __VIBRATION_SPEAKER_SUPPORT__
+
+void custom_uem_set_spkvib_func(custom_uem_spkvib_func func)
+{
+    g_custom_uem_spkvib_func = func;
+}
+#endif
+
+//#pragma arm section code, rodata
+
+
+//extern kal_uint32 custom_bl_level_support_query(void);
+//extern kal_uint32 custom_use_pwm_channel_query(kal_uint8 gpio_dev_type);
+
+kal_uint32 custom_uem_get_bl_level_num(void)
+{
+    kal_uint32 ret = 0;
+
+//    ret = custom_bl_level_support_query();
+    return ret;
+}
+
+kal_uint32 custom_uem_get_pwm_bl_mode(kal_uint8 gpio_dev_type)
+{
+    kal_uint32 ret = 0;
+    
+  //  ret = custom_use_pwm_channel_query(gpio_dev_type);
+    return ret;
+}
+
diff --git a/mcu/custom/protocol/common/ps/custom_umac.c b/mcu/custom/protocol/common/ps/custom_umac.c
new file mode 100644
index 0000000..e99f4a9
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_umac.c
@@ -0,0 +1,73 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ * Filename:
+ * ---------
+ * custom_umac.c
+ *
+ * Project:
+ * --------
+ *   MOLY
+ *
+ * Description:
+ * ------------
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by ClearCase. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Log$ 
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by ClearCase. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#include "kal_general_types.h"
+#include "custom_umac.h"
+
+extern kal_bool custom_3G_Pvalue(void)
+{
+#ifdef PMODIFY  
+    /* KAL_TRUE for enable this mechanism */
+    return KAL_TRUE;
+#else
+    return KAL_FALSE;
+#endif    
+}
diff --git a/mcu/custom/protocol/common/ps/custom_umac.h b/mcu/custom/protocol/common/ps/custom_umac.h
new file mode 100644
index 0000000..b77f752
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_umac.h
@@ -0,0 +1,75 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   custom_umac.h
+ *
+ * Project:
+ * --------
+ *   MOLY
+ *
+ * Description:
+ * ------------
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef CUSTOM_UMAC_H
+#define CUSTOM_UMAC_H
+
+#ifdef __3G_PMODIFY__
+#define PMODIFY
+#endif
+extern kal_bool custom_3G_Pvalue(void);
+
+#endif /* CUSTOM_UMAC_H */
+
diff --git a/mcu/custom/protocol/common/ps/custom_ups_config.c b/mcu/custom/protocol/common/ps/custom_ups_config.c
new file mode 100644
index 0000000..e79c8d0
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_ups_config.c
@@ -0,0 +1,95 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ *  custom_ups_config.c
+ *
+ * Project:
+ * --------
+ *  MAUI
+ *
+ * Description:
+ * ------------
+ *  This file is used to define the UPS configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+/******************************************************************************/
+/*========================================================================
+ *  CAUTION !! CAUTION !! CAUTION !! CAUTION !! CAUTION !! CAUTION !!
+ *
+ *  Please DO NOT modify code below.
+ *
+ *  CAUTION !! CAUTION !! CAUTION !! CAUTION !! CAUTION !! CAUTION !!
+ *======================================================================= */
+
+/******************************************************************************/
+
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+
+#include "custom_ups_config.h"
+
+/******************************************************************************/
+
+/******************************************************************************/
diff --git a/mcu/custom/protocol/common/ps/custom_ups_config.h b/mcu/custom/protocol/common/ps/custom_ups_config.h
new file mode 100644
index 0000000..47a77ef
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_ups_config.h
@@ -0,0 +1,124 @@
+/*****************************************************************************
+*  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) 2008
+*
+*  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:
+ * ---------
+ *  custom_ups_config.h
+ *
+ * Project:
+ * --------
+ *  MAUI
+ *
+ * Description:
+ * ------------
+ *  This file is used to define the UPS configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifndef CUSTOM_UPS_CONFIG_H
+#define CUSTOM_UPS_CONFIG_H
+/******************************************************************************/
+
+/******************************************************************************/
+//  Descirption:   Defines the prefix of MAC address used by host                                   
+//  Restriction:    Three eight bits digits separated by commas
+/******************************************************************************/
+
+#define VENDOR_MAC_ADDRESS_PREFIX   0x02,0x00,0xFF
+
+/******************************************************************************/
+//  Descirption:    Defines the id of vendors (the same as usb id's)
+//  Restriction:     A 16 bits integer
+/******************************************************************************/
+
+#define VENDOR_ID                   0x0000
+
+/******************************************************************************/
+//  Descirption:   Defines the string of vendor descrption 
+//  Restriction:    String length must be under 64
+/******************************************************************************/
+
+#define VENDOR_DESCRIPTION          "N/A"
+
+/******************************************************************************/
+//  Descirption:    Defines the value of speed which shows in Windows Connection Status
+//  Unit:             1/10 kbps
+//  Range:          0~4294967295 ( 0x00000000 ~ 0xFFFFFFFF )
+/******************************************************************************/
+
+#if defined(__UMTS_FDD_MODE__)
+
+#if defined(__HSDPA_SUPPORT__)
+#define VENDOR_DEVICE_LINKSPEED     72000 // 7.2Mbps
+#else
+#define VENDOR_DEVICE_LINKSPEED      3840 // 384kbps
+#endif
+
+#elif defined(__UMTS_TDD128_MODE__)
+
+#define VENDOR_DEVICE_LINKSPEED     26240 // 2.6Mbps
+
+#elif defined(__EGPRS_MODE__)
+#define VENDOR_DEVICE_LINKSPEED      4736 // 473.6kbps
+#else
+#define VENDOR_DEVICE_LINKSPEED       800 // 80kbps
+#endif
+
+/******************************************************************************/
+#endif /* CUSTOM_UPS_CONFIG_H */
+
diff --git a/mcu/custom/protocol/common/ps/custom_urlc_config.c b/mcu/custom/protocol/common/ps/custom_urlc_config.c
new file mode 100644
index 0000000..32a6582
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_urlc_config.c
@@ -0,0 +1,120 @@
+/*****************************************************************************
+*  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) 2014
+*
+*  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:
+ * ---------
+ * custom_urlc_config.c
+ *
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the urlc configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#include "custom_urlc_config.h"
+
+
+/****  For customer to define customized urlc DL Ack vs UL data ratio.  ****/
+/****  Default value is 50. It has better DL throughput performance     ****/
+/****  while UL grant is limited. The value MUST be 0 ~ 99 which is     ****/
+/****  DL Ack vs UL data bit ratio. The 0 is system reserved behavior   ****/
+/****  which will not have 0 ratio result.                              ****/
+#define CUSTOM_URLC_TX_TCPACK_PREFER_RATIO_NUM 50
+#define HIGH_URLC_TX_TCPACK_PREFER_RATIO_NUM 56
+
+/**** Check whether the setting is valid. ****/
+#if (CUSTOM_URLC_TX_TCPACK_PREFER_RATIO_NUM < 0) || (CUSTOM_URLC_TX_TCPACK_PREFER_RATIO_NUM > 99)
+#error The value of CUSTOM_URLC_TX_TCPACK_PREFER_RATIO_NUM is not allowed !!
+#endif
+
+/*****************************************************************************
+* FUNCTION
+*  urlc_get_custom_ack_data_ratio_num
+* DESCRIPTION
+*   This function is used to get the customized urlc DL Ack vs UL data ratio
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint32
+*
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint32 urlc_get_custom_tx_tcpAck_prefer_ratio (void)
+{
+   return (CUSTOM_URLC_TX_TCPACK_PREFER_RATIO_NUM);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  urlc_get_tcp_ack_prio_data_ratio_num
+* DESCRIPTION
+*   This function is used to get the Higher urlc DL Ack Prio vs UL data ratio (Only in case of UL-DCH/DL-HSDSCH scenario)
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint32
+*
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint32 urlc_get_high_tx_tcpAck_prefer_ratio (void)
+{
+   return (HIGH_URLC_TX_TCPACK_PREFER_RATIO_NUM);
+}
+
diff --git a/mcu/custom/protocol/common/ps/custom_urlc_config.h b/mcu/custom/protocol/common/ps/custom_urlc_config.h
new file mode 100644
index 0000000..326de0d
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_urlc_config.h
@@ -0,0 +1,76 @@
+/*****************************************************************************
+*  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) 2014
+*
+*  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:
+ * ---------
+ * custom_urlc_config.h
+ *
+ * Project:
+ * --------
+ *   
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the URLC configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ 
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifndef _CUSTOM_URLC_CONFIG_H
+#define _CUSTOM_URLC_CONFIG_H
+
+#include "kal_general_types.h"
+
+/*************************************************************************
+* Function
+*************************************************************************/
+extern kal_uint32 urlc_get_custom_tx_tcpAck_prefer_ratio (void);
+extern kal_uint32 urlc_get_high_tx_tcpAck_prefer_ratio (void);
+
+#endif /* _CUSTOM_URLC_CONFIG_H */
+
+
diff --git a/mcu/custom/protocol/common/ps/custom_usir_config.c b/mcu/custom/protocol/common/ps/custom_usir_config.c
new file mode 100644
index 0000000..94955ad
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_usir_config.c
@@ -0,0 +1,56 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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).
+*
+*****************************************************************************/
+#include "kal_general_types.h"
+
+#include "custom_usir_config.h"
+
+kal_bool custom_usir_full_mask(void)
+{
+    /*
+     * Some modules support USIR full mask and partial mask switch.
+     * By default, the return value is KAL_TRUE. Related USIR modules mask
+     * all sensitive information.
+     *
+     * For changing to partial mask, please enable compile option
+     * __USIR_PARTIAL_MASK__ and rebuild.
+     */
+    kal_bool result = KAL_TRUE;
+
+#ifdef __USIR_PARTIAL_MASK__
+    result = KAL_FALSE;
+#endif
+
+    return result;
+}
diff --git a/mcu/custom/protocol/common/ps/custom_usir_config.h b/mcu/custom/protocol/common/ps/custom_usir_config.h
new file mode 100644
index 0000000..0d9dc80
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_usir_config.h
@@ -0,0 +1,42 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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).
+*
+*****************************************************************************/
+#include "kal_general_types.h"
+
+#ifndef __CUSTOM_USIR_CONFIG_H__
+#define __CUSTOM_USIR_CONFIG_H__
+
+kal_bool custom_usir_full_mask(void);
+
+#endif // __CUSTOM_USIR_CONFIG_H__
diff --git a/mcu/custom/protocol/common/ps/custom_vdm_utility.c b/mcu/custom/protocol/common/ps/custom_vdm_utility.c
new file mode 100644
index 0000000..a82be33
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_vdm_utility.c
@@ -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) 2015
+*
+*  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:
+ * ---------
+ * custom_vdm_utility.c
+ *
+ * Project:
+ * --------
+ * MOLY
+ *
+ * Description:
+ * ------------
+ * This file is for voice domain management customization functions, 
+ * customer can use these functions to configure parameters for voice all
+ * domain selection. 
+ *
+ * Author:
+ * -------
+ * 
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+/*
+**   Includes
+*/
+#include <string.h>
+
+#include "kal_general_types.h"
+#include "custom_vdm_utility.h"
+#include "kal_trace.h"
+#include "ps_public_enum.h"
+#include "sbp_public_utility.h"
+
+#if (!defined(__FLAVOR_BASIC__)) && (!defined(__FLAVOR_BASIC_TL1D__))
+kal_bool custom_is_number_not_allowed_in_lte(kal_uint8* call_number, plmn_id_struct plmn_id)
+{
+    kal_bool ret_val = KAL_FALSE;
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+    return ret_val;
+
+}
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_vdm_utility.h b/mcu/custom/protocol/common/ps/custom_vdm_utility.h
new file mode 100644
index 0000000..aa6d257
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_vdm_utility.h
@@ -0,0 +1,71 @@
+/*****************************************************************************
+*  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) 2015
+*
+*  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:
+ * ---------
+ * custom_vdm_utility.h
+ *
+ * Project:
+ * --------
+ * MOLY
+ *
+ * Description:
+ * ------------
+ * This file is intended for header file of voice domain management
+ * customization functions.
+ *
+ * Author:
+ * -------
+ * 
+ *
+ ****************************************************************************/
+ 
+#ifndef _CUSTOM_VDM_UTILITY_H
+#define _CUSTOM_VDM_UTILITY_H
+
+#include "kal_general_types.h"
+#include "l3_inc_enums_public.h"
+#include "sim_exported_enum.h"
+#if (!defined(__FLAVOR_BASIC__)) && (!defined(__FLAVOR_BASIC_TL1D__))
+#include "mcd_l3_inc_struct.h"
+#endif
+
+#if (!defined(__FLAVOR_BASIC__)) && (!defined(__FLAVOR_BASIC_TL1D__))
+extern kal_bool custom_is_number_not_allowed_in_lte(kal_uint8* call_number, plmn_id_struct plmn_id);
+#endif
+
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_vgmm_config.c b/mcu/custom/protocol/common/ps/custom_vgmm_config.c
new file mode 100644
index 0000000..f3fb299
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_vgmm_config.c
@@ -0,0 +1,355 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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:
+ * ---------
+ *   custom_vgmm_config.c
+ *
+ * Project:
+ * --------
+ *   VMOLY
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the VGMM custom configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *******************************************************************************/
+
+#ifdef __NR_RAT__ 
+
+#include "custom_vgmm_config.h"
+#include "l4_ps_api.h"
+#include "ps_em_exported_enum.h"
+
+
+//Mapping table for {PLMN ID, Operator}
+const vgmm_plmn_id_op_struct vgmm_plmn_op_map_list[] = 
+{
+/*******North America******/
+//AT&T
+{"310410", VGMM_OP_ATT},
+
+//VzW
+{"311480", VGMM_OP_VZW},
+
+//Sprint
+{"310120", VGMM_OP_SPRINT},
+
+//T-Mobile
+//GID-MTRREQ-373802
+{"310026", VGMM_OP_TMO_US},
+{"310160", VGMM_OP_TMO_US},
+{"310200", VGMM_OP_TMO_US},
+{"310210", VGMM_OP_TMO_US},
+{"310220", VGMM_OP_TMO_US},
+{"310230", VGMM_OP_TMO_US},
+{"310240", VGMM_OP_TMO_US},
+{"310250", VGMM_OP_TMO_US},
+{"310260", VGMM_OP_TMO_US},
+{"310270", VGMM_OP_TMO_US},
+{"310310", VGMM_OP_TMO_US},
+{"310490", VGMM_OP_TMO_US},
+{"310660", VGMM_OP_TMO_US},
+{"310800", VGMM_OP_TMO_US},
+
+//Telcel(Mexico)
+{"334020", VGMM_OP_TELCEL},
+
+/*******Sounth America**************/
+//Movistar
+{"71606F", VGMM_OP_MOVISTAR},
+
+/*******China**************/
+//China Mobile
+{"46000F", VGMM_OP_CMCC},
+{"46002F", VGMM_OP_CMCC},
+{"46004F", VGMM_OP_CMCC},
+{"46007F", VGMM_OP_CMCC},
+{"46008F", VGMM_OP_CMCC},
+
+//China Unicom
+{"46001F", VGMM_OP_CU},
+{"46006F", VGMM_OP_CU},
+
+//China Telecom
+{"46003F", VGMM_OP_CT},
+{"46011F", VGMM_OP_CT},
+
+/******Taiwan**************/
+//Chunghwa Telecom 
+{"46692F", VGMM_OP_CHT},
+
+//FarEasTone
+{"46601F", VGMM_OP_FAR_EAST},
+
+//Taiwan Mobile
+{"46697F", VGMM_OP_TWN},
+
+/*******Asia Others********/
+//Advanced Wireless Network (Thailand)
+{"52003F", VGMM_OP_AWN},
+
+//TURKCELL(Turkey)
+{"28601F", VGMM_OP_TURKCELL},
+
+//Vodafone India
+{"40401F", VGMM_OP_VDF_INDIA},
+{"40405F", VGMM_OP_VDF_INDIA},
+{"40411F", VGMM_OP_VDF_INDIA},
+{"40413F", VGMM_OP_VDF_INDIA},
+{"40415F", VGMM_OP_VDF_INDIA},
+{"40420F", VGMM_OP_VDF_INDIA},
+{"40427F", VGMM_OP_VDF_INDIA},
+{"40430F", VGMM_OP_VDF_INDIA},
+{"40443F", VGMM_OP_VDF_INDIA},
+{"40446F", VGMM_OP_VDF_INDIA},
+{"40460F", VGMM_OP_VDF_INDIA},
+{"40484F", VGMM_OP_VDF_INDIA},
+{"40486F", VGMM_OP_VDF_INDIA},
+{"40488F", VGMM_OP_VDF_INDIA},
+{"40566F", VGMM_OP_VDF_INDIA},
+{"40567F", VGMM_OP_VDF_INDIA},
+{"405750", VGMM_OP_VDF_INDIA},
+{"405751", VGMM_OP_VDF_INDIA},
+{"405752", VGMM_OP_VDF_INDIA},
+{"405753", VGMM_OP_VDF_INDIA},
+{"405754", VGMM_OP_VDF_INDIA},
+{"405755", VGMM_OP_VDF_INDIA},
+{"405756", VGMM_OP_VDF_INDIA},
+
+//Ooredoo(Myanmar)
+{"41405F", VGMM_OP_OOREDOO},
+
+// KT
+{"45002F", VGMM_OP_KT},
+{"45008F", VGMM_OP_KT},
+
+/*******Europe********/
+//Vodafone Portugal
+{"26801F", VGMM_OP_VDF_PORTUGAL},
+
+
+//Seatel(Cambodia)
+{"45611F", VGMM_OP_SEATEL},
+
+//Bharti Airtel Limited (India)
+{"40402F", VGMM_OP_BAL_INDIA},
+{"40403F", VGMM_OP_BAL_INDIA},
+{"40406F", VGMM_OP_BAL_INDIA},
+{"40410F", VGMM_OP_BAL_INDIA},
+{"40416F", VGMM_OP_BAL_INDIA},
+{"40431F", VGMM_OP_BAL_INDIA},
+{"40440F", VGMM_OP_BAL_INDIA},
+{"40445F", VGMM_OP_BAL_INDIA},
+{"40449F", VGMM_OP_BAL_INDIA},
+{"40470F", VGMM_OP_BAL_INDIA},
+{"40490F", VGMM_OP_BAL_INDIA},
+{"40492F", VGMM_OP_BAL_INDIA},
+{"40493F", VGMM_OP_BAL_INDIA},
+{"40494F", VGMM_OP_BAL_INDIA},
+{"40495F", VGMM_OP_BAL_INDIA},
+{"40496F", VGMM_OP_BAL_INDIA},
+{"40497F", VGMM_OP_BAL_INDIA},
+{"40498F", VGMM_OP_BAL_INDIA},
+{"40551F", VGMM_OP_BAL_INDIA},
+{"40552F", VGMM_OP_BAL_INDIA},
+{"40553F", VGMM_OP_BAL_INDIA},
+{"40554F", VGMM_OP_BAL_INDIA},
+{"40555F", VGMM_OP_BAL_INDIA},
+{"40556F", VGMM_OP_BAL_INDIA},
+
+//RJIO India
+{"405840", VGMM_OP_RJIO_INDIA},
+{"405854", VGMM_OP_RJIO_INDIA},
+{"405855", VGMM_OP_RJIO_INDIA},
+{"405856", VGMM_OP_RJIO_INDIA},
+{"405857", VGMM_OP_RJIO_INDIA},
+{"405858", VGMM_OP_RJIO_INDIA},
+{"405859", VGMM_OP_RJIO_INDIA},
+{"405860", VGMM_OP_RJIO_INDIA},
+{"405861", VGMM_OP_RJIO_INDIA},
+{"405862", VGMM_OP_RJIO_INDIA},
+{"405863", VGMM_OP_RJIO_INDIA},
+{"405864", VGMM_OP_RJIO_INDIA},
+{"405865", VGMM_OP_RJIO_INDIA},
+{"405866", VGMM_OP_RJIO_INDIA},
+{"405867", VGMM_OP_RJIO_INDIA},
+{"405868", VGMM_OP_RJIO_INDIA},
+{"405869", VGMM_OP_RJIO_INDIA},
+{"405870", VGMM_OP_RJIO_INDIA},
+{"405871", VGMM_OP_RJIO_INDIA},
+{"405872", VGMM_OP_RJIO_INDIA},
+{"405873", VGMM_OP_RJIO_INDIA},
+{"405874", VGMM_OP_RJIO_INDIA},
+
+};
+
+const kal_uint32 CUSTOM_VGMM_PLMN_OP_LIST_NUM = sizeof(vgmm_plmn_op_map_list)/sizeof(vgmm_plmn_id_op_struct);
+
+/********************************************************************
+VGMM paging protect timer
+Usage: Define the resource allocation period for VGMM paging procedure.  
+Set the value larger: Achieve longer DL data transmission without interruption from peer SIM, but peer SIM activity would be suspended longer.
+set the value smaller: Peer SIM would not be suspended too long when paging comes, but DL data transmission has higher chance to be interrupted.
+*********************************************************************/
+const kal_uint16 CUSTOM_VGMM_PAGING_PROTECT_TIMER_VAL_MILLISECS = 2000;
+
+/********************************************************************
+VGMM paging monitor timer
+Usage: Define the interval which 2 consecutive paging are considered as 1 DL data session. 
+If VGMM receives 2nd paging during this interval, VGMM would extend resource allocation period for paging procedure.
+Set the value larger: Achieve longer DL data transmission without interruption from peer SIM when consecutive pagings are received, but peer SIM activity would be suspended longer.  
+set the value smaller: Peer SIM would not be suspended too long when consecutive pagings come, but DL data transmission has higher chance to be interrupted.
+*********************************************************************/
+const kal_uint16 CUSTOM_VGMM_PAGING_MONITOR_TIMER_VAL_MILLISECS = 7000;
+
+/********************************************************************
+VGMM paging protect timer max length
+Usage: Define the max possible value of resource allocation period for paging procedure when resource allocation period is required to be extended, . 
+*********************************************************************/
+const kal_uint16 CUSTOM_VGMM_PAGING_PROTECT_TIMER_MAX_VAL_MILLISECS = 5000;
+
+/********************************************************************
+VGMM gemini recovery max count
+Usage: Define the max possible attempts of consecutive gemini recovery 
+       MRU(registration procedure for mobility and periodic update)
+*********************************************************************/
+const kal_uint8 CUSTOM_VGMM_GEMINI_RECOVERY_MAX_COUNT = 3;
+
+/********************************************************************
+VGMM customized T3511 timer default length (seconds), while set simultaneously with CUSTOM_VGMM_ABNORMAL_RELEASE_T3511_TIMER_VAL_SECS the value of later one would be used while NW abnormal release
+Usage: Define the T3511 default value(seconds)
+valid range: > 0, if 0 would be ignored
+*********************************************************************/
+const kal_uint16 CUSTOM_VGMM_T3511_DEFAULT_TIMER_VAL_SECS = 5;
+
+/********************************************************************
+VGMM customer T3511 timer length (seconds)
+Usage: Define the T3511 value(seconds) if REG/MRU procedure is released in some abnormal NW
+valid range: 1~10 (default: 5)
+*********************************************************************/
+const kal_uint16 CUSTOM_VGMM_ABNORMAL_RELEASE_T3511_TIMER_VAL_SECS = 5;
+
+/********************************************************************
+VGMM customer T3502 timer length
+Usage: Define the T3502 value(seconds) if REG/MRU procedure is released in some abnormal NW
+valid range: 60~57600 (default: 1440)
+*********************************************************************/
+const kal_uint16 CUSTOM_VGMM_ABNORMAL_RELEASE_T3502_TIMER_VAL_SECS = 1440;
+
+/********************************************************************
+VGMM custom REG_UPDATE_IRAT session release timer length
+Usage: Define the timer length to release REG_UPDATE_IRAT session early
+       in the case of T3530(15 sec) expires
+valid range: 0~15 (default: 5, 0 means early release behavior disabled)
+*********************************************************************/
+const kal_uint8 CUSTOM_VGMM_REG_UPDATE_IRAT_REL_TIMER_VAL_SECS = 5;
+
+/********************************************************************
+VGMM sync MRU during plmn-list max count
+Usage: Define the max possible attempts of sync MRU during plmn-list
+*********************************************************************/
+#if defined(__TC10__)
+const kal_uint8 CUSTOM_VGMM_LOCAL_RELEASE_RECOVERY_MRU_MAX_COUNT = 1;
+#else
+const kal_uint8 CUSTOM_VGMM_LOCAL_RELEASE_RECOVERY_MRU_MAX_COUNT = 3;
+#endif
+
+/********************************************************************
+VGMM paging gemini fail retry timer
+Usage: If paging can't get the rf resource, how long the same paging should wait for retry again
+*********************************************************************/
+const kal_uint16 CUSTOM_VGMM_PAGING_GEMINI_FAIL_RETRY_TIMER_VAL_MILLISECS = 1000;
+
+/********************************************************************
+VGMM paging gemini fail retry max count
+Usage: If paging can't get the rf resource, define the max possible attempts of paging retry
+*********************************************************************/
+const kal_uint8 CUSTOM_VGMM_PAGING_GEMINI_FAIL_RETRY_MAX_COUNT = 3;
+
+/********************************************************************
+VGMM customize remaining T3540 timer length if SBP_ALLOW_UPPER_LAYER_REQ_WHEN_T3540_RUNNING on, T3540 running and call ongoing
+Usage: Define the T3540 value(seconds)
+valid range: 1~10 (default: 1)
+*********************************************************************/
+const kal_uint16 CUSTOM_VGMM_T3540_TIMER_VAL_SECS_FOR_SBP_ALLOW_UPPER_LAYER_REQ_WHEN_T3540_RUNNING = 1;
+
+/**
+ *  @brief  This function is used to customize whether to allow null integrity
+ *
+ *
+ * @return    kal_bool
+ * @param[in] sim_interface, current protocol id used to query whether to allow NIA0
+ * @param[in] cur_plmn, current PLMN id used to query whether to allow NIA0
+ * @retval    the result about allowing null integrity or not
+ * 
+ */
+kal_bool vgmm_custom_get_null_integrity_allow(kal_uint8 sim_interface, plmn_id_struct *cur_plmn)
+{
+
+    kal_bool null_int_allow = KAL_FALSE;
+    /*
+     * whether to bypass NIA0 could be handled here, 
+     * for example, to bypass NIA0 in TEST mode please enable commented code below
+     */
+/*
+    plmn_id_struct nia0_plmn;
+
+    nia0_plmn.mcc1 = 0xff;   //change to the PLMN id to be bypassed
+    nia0_plmn.mcc2 = 0xff;   //change to the PLMN id to be bypassed
+    nia0_plmn.mcc3 = 0xff;	 //change to the PLMN id to be bypassed
+    nia0_plmn.mnc1 = 0xff;   //change to the PLMN id to be bypassed
+    nia0_plmn.mnc2 = 0xff;	 //change to the PLMN id to be bypassed
+    nia0_plmn.mnc3 = 0xff;   //change to the PLMN id to be bypassed
+
+    if (0 == kal_mem_cmp(&nia0_plmn, cur_plmn, sizeof(plmn_id_struct)))
+    {
+        null_int_allow = KAL_TRUE;
+    }    
+    
+    if (PS_CONF_TEST_NONE != test_mode_consider_sim(p_g_vgmm->protocol_id))
+    {
+        null_int_allow = KAL_TRUE;
+    }
+*/
+    return null_int_allow;
+}
+#endif /* __NR_RAT__ */
diff --git a/mcu/custom/protocol/common/ps/custom_vgmm_config.h b/mcu/custom/protocol/common/ps/custom_vgmm_config.h
new file mode 100644
index 0000000..73390e9
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_vgmm_config.h
@@ -0,0 +1,92 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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:
+ * ---------
+ *   custom_vgmm_config.h
+ *
+ * Project:
+ * --------
+ *   VMOLY
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the VGMM custom configurations.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *******************************************************************************/
+
+#ifdef __NR_RAT__
+
+#ifndef _CUSTOM_VGMM_CONFIG_H
+#define _CUSTOM_VGMM_CONFIG_H
+
+#include "kal_general_types.h"
+#include "l3_inc_local.h"
+#include "ps_public_utility.h"
+
+/*************************************************************************
+* Variable
+*************************************************************************/
+
+extern const kal_uint16 CUSTOM_VGMM_PAGING_PROTECT_TIMER_VAL_MILLISECS;
+extern const kal_uint16 CUSTOM_VGMM_PAGING_MONITOR_TIMER_VAL_MILLISECS;
+extern const kal_uint16 CUSTOM_VGMM_PAGING_PROTECT_TIMER_MAX_VAL_MILLISECS;
+extern const kal_uint8 CUSTOM_VGMM_GEMINI_RECOVERY_MAX_COUNT;
+extern const kal_uint16 CUSTOM_VGMM_PAGING_GEMINI_FAIL_RETRY_TIMER_VAL_MILLISECS;
+extern const kal_uint8 CUSTOM_VGMM_PAGING_GEMINI_FAIL_RETRY_MAX_COUNT;
+extern const kal_uint16 CUSTOM_VGMM_T3511_DEFAULT_TIMER_VAL_SECS;
+extern const kal_uint16 CUSTOM_VGMM_ABNORMAL_RELEASE_T3511_TIMER_VAL_SECS;
+extern const kal_uint16 CUSTOM_VGMM_ABNORMAL_RELEASE_T3502_TIMER_VAL_SECS;
+extern const vgmm_plmn_id_op_struct vgmm_plmn_op_map_list[];
+extern const kal_uint32 CUSTOM_VGMM_PLMN_OP_LIST_NUM;
+extern const kal_uint8 CUSTOM_VGMM_REG_UPDATE_IRAT_REL_TIMER_VAL_SECS;
+extern const kal_uint8 CUSTOM_VGMM_LOCAL_RELEASE_RECOVERY_MRU_MAX_COUNT;
+extern const kal_uint16 CUSTOM_VGMM_T3540_TIMER_VAL_SECS_FOR_SBP_ALLOW_UPPER_LAYER_REQ_WHEN_T3540_RUNNING;
+
+/*************************************************************************
+* Function
+*************************************************************************/
+
+extern kal_bool vgmm_custom_get_null_integrity_allow(kal_uint8 sim_interface, plmn_id_struct *plmn);
+
+#endif /* _CUSTOM_VGMM_CONFIG_H */
+#endif /* __NR_RAT__ */
+
diff --git a/mcu/custom/protocol/common/ps/custom_wo_config.c b/mcu/custom/protocol/common/ps/custom_wo_config.c
new file mode 100644
index 0000000..a386778
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_wo_config.c
@@ -0,0 +1,1866 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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).
+*
+*****************************************************************************/
+
+#include "custom_wo_config.h"
+
+#define streq(s, t) (strcmp(s, t) == 0)
+
+/*
+ * ATTENTION: Don't modify the default values!
+ *            (The default values are shared with AP daemon)
+ *            Customize your configs in custom_wo_cfg_get() function.
+ */
+static void cfg_reset_to_default(wo_cfg_t* p_cfg)
+{
+    kal_mem_set(p_cfg, 0, sizeof(wo_cfg_t));
+
+#define __WO_CFG_ACTION__ 2 /* WO CFG Macro DEFAULT Value Assign */
+#define __WO_CFG_PTR__ p_cfg
+#include "wo_nvram_config.h"
+#undef __WO_CFG_ACTION__
+#undef __WO_CFG_PTR__
+}
+
+/*
+ * Customize your configs here.
+ * (Configs priority: NVram > configs in custom_wo_cfg_get() > default values)
+ */
+kal_bool custom_wo_cfg_get(wo_cfg_t* p_cfg, kal_uint8 sim_id, kal_uint32 sbp_id,
+                           const kal_char *mcc, const kal_char *mnc)
+{
+    if (!p_cfg) {
+        return KAL_FALSE;
+    }
+
+    /* reset configuration to default*/
+    cfg_reset_to_default(p_cfg);
+
+    switch (sbp_id)
+    {
+        case 1: /* CMCC */
+        {
+            break;
+        }
+        case 2: /* CU */
+        {
+            break;
+        }
+        case 3: /* Orange */
+        {
+            if (streq(mcc, "214")) {
+                p_cfg->IDi = IDI_RFC822_ADDR;
+                p_cfg->IDr = IDR_KEY_ID;
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-aes256-sha256-sha1-modp2048-modp1536-modp1024!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-aes256-sha256-sha1!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                             "'ssidchgrst','24,180,180,43200','1040-1041i,1,2,4,8,16,32,64,128,256','1081-1111,180,180,43200','8192-11011,180,180,43200'");
+                p_cfg->keep_timer = 20;
+                p_cfg->ike_rekey_timer = 28800;
+                p_cfg->esp_rekey_timer = 7200;
+                p_cfg->rekey_margin = 180;
+                p_cfg->mtu = 1280;
+                p_cfg->oos = 30;
+                p_cfg->cert_used = 0;
+                p_cfg->dns_cache = 0;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "260")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-prfsha256-sha256-aes256-sha1-modp1536-modp768-modp1024-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-sha256-aes256-sha1-modp1536-modp768-modp1024-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                             "'ssidchgrst','24,180,180,43200','1040-1041i,1,2,4,8,16,32,64,128,256','1081-1111,180,180,43200','8192-11011,180,180,43200'");
+                p_cfg->ike_rekey_timer = 0;
+                p_cfg->esp_rekey_timer = 0;
+                p_cfg->rekey_margin = 0;
+                p_cfg->keep_timer = 50;
+                p_cfg->mtu = 1260;
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->fastreauth = 1;
+                p_cfg->cert_used = 0;
+                p_cfg->dns_cache = 0;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "226")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-aes256-sha256-sha1-modp2048-modp1536-modp1024-modp768!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-aes256-sha256-sha1-modp2048-modp1536-modp1024-modp768!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                             "'ssidchgrst','24,180,180,43200','1040-1041i,1,2,4,8,16,32,64,128,256','1081-1111,180,180,43200','8192-11011,180,180,43200'");
+                p_cfg->ike_rekey_timer = 0;
+                p_cfg->esp_rekey_timer = 0;
+                p_cfg->rekey_margin = 0;
+                p_cfg->keep_timer = 50;
+                p_cfg->mtu = 1340;
+                p_cfg->IDi = IDI_RFC822_ADDR_MAC;
+                p_cfg->fastreauth = 1;
+                p_cfg->cert_used = 0;
+                p_cfg->dns_cache = 0;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "231")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-aes128-des-3des-sha256-sha1-aesxcbc-md5-prfsha256-prfaesxcbc-prfsha1-modp2048-modp1536!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes256-aes128-des-3des-sha256-sha1-aesxcbc-md5-modp2048-modp1536!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                             "'ssidchgrst','24,180,180,43200','1040-1041i,1,2,4,8,16,32,64,128,256','1081-1111,180,180,43200','8192-11011,180,180,43200'");
+                p_cfg->ike_rekey_timer = 3001;
+                p_cfg->esp_rekey_timer = 1500;
+                p_cfg->rekey_margin = 180;
+                p_cfg->keep_timer = 50;
+                p_cfg->mtu = 1300;
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->ike_dscp = 48;
+                p_cfg->cert_used = 0;
+                p_cfg->dns_cache = 0;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "206")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-aes256-sha256-prfsha256-modp1536-modp1024-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-aes256-sha256-modp1536-modp1024-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                             "'ssidchgrst','24,180,180,43200','1040-1041i,1,2,4,8,16,32,64,128,256','1081-1111,180,180,43200','8192-11011,180,180,43200'");
+                p_cfg->ike_rekey_timer = 28800;
+                p_cfg->esp_rekey_timer = 81000;
+                p_cfg->rekey_margin = 180;
+                p_cfg->keep_timer = 20;
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->abort_mode = 1;
+                p_cfg->dns_cache = 0;
+            }
+            else {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-aes128-prfsha256-sha256-modp2048-modp1536!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes256-aes128-sha256-modp2048-modp1536!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                             "'ssidchgrst','24,180,180,43200','1040-1041i,1,2,4,8,16,32,64,128,256','1081-1111,180,180,43200','8192-11011,180,180,43200'");
+                p_cfg->ike_rekey_timer = 0;
+                p_cfg->esp_rekey_timer = 0;
+                p_cfg->rekey_margin = 0;
+                p_cfg->dpd_timer = 110;
+                p_cfg->keep_timer = 20;
+                p_cfg->mtu = 1300;
+                p_cfg->fastreauth = 1;
+                p_cfg->IDi = IDI_RFC822_ADDR_MAC_EAP_NO_MAC;
+                p_cfg->cert_used = 0;
+                p_cfg->dns_cache = 0;
+                p_cfg->fragment = 1;
+                p_cfg->abort_mode = 1;
+            }
+            break;
+        }
+        case 5: /* TMO_EU (DTAG) */
+        {
+            if (streq(mcc, "262")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-sha1-modp1024");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes256-sha1-modp1024-noesn-esn");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,7200','1040-1041,30,60,120,300,900','1081-1111,30,30,7200','8192-11011,30,30,7200'");
+                p_cfg->keep_timer = 20;
+                p_cfg->ike_rekey_timer = 81000;
+                p_cfg->esp_rekey_timer = 81000;
+                p_cfg->rekey_margin = 32400;
+                p_cfg->mtu=1300;
+                p_cfg->fastreauth = 1;
+                p_cfg->retrans_to = 30;
+                p_cfg->retrans_tries = 0;
+                p_cfg->retrans_base = 1;
+                p_cfg->dns_max_count = 1;
+                p_cfg->dns_cache = 0;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "230")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-aes128-sha1-md5-prfsha1-prfmd5-prfsha256-prfsha512-modp1024-modp1536-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes256-aes128-sha1-md5-modp1024-modp1536-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,7200','1040-1041,30,60,120,300,900','1081-1111,30,30,7200','8192-11011,30,30,7200'");
+                p_cfg->keep_timer = 20;
+                p_cfg->ike_rekey_timer = 81000;
+                p_cfg->esp_rekey_timer = 81000;
+                p_cfg->rekey_margin = 32400;
+                p_cfg->mtu=1300;
+                p_cfg->fastreauth = 1;
+                p_cfg->retrans_to = 30;
+                p_cfg->retrans_tries = 0;
+                p_cfg->retrans_base = 1;
+                p_cfg->dns_max_count = 1;
+                p_cfg->dns_cache = 0;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "260")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-aes128-sha1-md5-prfsha1-prfmd5-prfsha256-prfsha512-modp1024-modp1536-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes256-aes128-sha1-md5-modp1024-modp1536-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,7200','1040-1041,30,60,120,300,900','1081-1111,30,30,7200','8192-11011,30,30,7200'");
+                p_cfg->keep_timer = 20;
+                p_cfg->ike_rekey_timer = 81000;
+                p_cfg->esp_rekey_timer = 81000;
+                p_cfg->rekey_margin = 32400;
+                p_cfg->mtu=1300;
+                p_cfg->fastreauth = 1;
+                p_cfg->retrans_to = 30;
+                p_cfg->retrans_tries = 0;
+                p_cfg->retrans_base = 1;
+                p_cfg->dns_max_count = 1;
+                p_cfg->dns_cache = 0;
+                p_cfg->abort_mode = 1;
+            }
+            else if(streq(mcc, "202")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-aes192-aes128-sha1-md5-sha1_160-md5_128-sha256-sha512-prfsha1-prfmd5-prfsha256-prfsha512-modp1024-modp1536-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-aes192-aes256-sha256-sha1-sha384!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,7200','1040-1041,30,60,120,300,900','1081-1111,30,30,7200','8192-11011,30,30,7200'");
+                p_cfg->dpd_timer=60;
+                p_cfg->ike_rekey_timer=3600;
+                p_cfg->esp_rekey_timer=3600;
+                p_cfg->rekey_margin = 180;
+                p_cfg->mtu=1280;
+                p_cfg->retrans_to=30;
+                p_cfg->retrans_tries=0;
+                p_cfg->retrans_base=1;
+                p_cfg->dns_max_count=1;
+                p_cfg->oos=30;
+                p_cfg->mobike = 1;
+                p_cfg->abort_mode = 1;
+                p_cfg->dns_cache = 0;
+                p_cfg->cert_used = 0;
+            }
+            else {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-sha1-modp1024");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes256-sha1-modp1024-noesn-esn");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,7200','1040-1041,30,60,120,300,900','1081-1111,30,30,7200','8192-11011,30,30,7200'");
+                p_cfg->keep_timer = 20;
+                p_cfg->ike_rekey_timer = 81000;
+                p_cfg->esp_rekey_timer = 81000;
+                p_cfg->rekey_margin = 32400;
+                p_cfg->mtu=1300;
+                p_cfg->fastreauth = 1;
+                p_cfg->retrans_to = 30;
+                p_cfg->retrans_tries = 0;
+                p_cfg->retrans_base = 1;
+                p_cfg->dns_max_count = 1;
+                p_cfg->dns_cache = 0;
+                p_cfg->abort_mode = 1;
+            }
+            break;
+        }
+        case 6: /* Vodafone */
+        {
+            if (streq(mcc, "230")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-sha256-prfsha256-modp1536");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes256-sha256-sha512");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->keep_timer = 30;
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->dpd_timer = 600;
+                p_cfg->mtu = 1500;
+                p_cfg->cert_used = 0;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "234")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-sha256-modp1024,aes128-aes256-3des-md5-sha1-aesxcbc-modp1024-modp1536-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes256-sha1,aes128-aes256-3des-md5-sha1-aesxcbc!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->keep_timer = 30;
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->dpd_timer = 600;
+                p_cfg->cust_pcscf_6 = 16390;
+                p_cfg->cert_used = 0;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "262")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-aes128-sha1-sha256-sha384-sha512-aesxcbc-prfsha1-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes256-aes128-sha1-aesxcbc!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->keep_timer = 30;
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 14400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->dpd_timer = 600;
+                p_cfg->cust_pcscf_4 = 0;
+                p_cfg->cust_pcscf_6 = 16390;
+                p_cfg->cert_used = 0;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "204")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-aes128-sha1-sha256-sha384-sha512-aesxcbc-prfsha1-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes256-aes128-sha1-aesxcbc!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->keep_timer = 30;
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->dpd_timer = 600;
+                p_cfg->cert_used = 0;
+                p_cfg->urlcert = 1;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "655")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-md5-modp1024!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-sha1!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->keep_timer = 30;
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "286")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-sha1-modp1024");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-sha1-modp1024");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->IDi = IDI_RFC822_ADDR;
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->keep_timer = 20;
+                p_cfg->ike_rekey_timer = 28800;
+                p_cfg->esp_rekey_timer = 28800;
+                p_cfg->rekey_margin = 180;
+                p_cfg->dpd_timer = 600;
+                p_cfg->cust_pcscf_4 = 16389;
+                p_cfg->cust_pcscf_6 = 16390;
+                p_cfg->oos = 30;
+                p_cfg->urlcert = 1;
+                p_cfg->mobike = 1;
+                p_cfg->abort_mode = 1;
+            }
+            else {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-aes128-sha1-sha256-sha384-sha512-aesxcbc-prfsha1-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes256-aes128-sha1-aesxcbc!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->keep_timer = 30;
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->dpd_timer = 600;
+                p_cfg->cert_used = 0;
+                p_cfg->abort_mode = 1;
+            }
+            break;
+        }
+        case 7: /* AT&T */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-sha256-modp2048!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-sha256!");
+            kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                         "epdg.epc.att.net");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'8192,-1','36,20,40,80,160,320'");
+            p_cfg->keep_timer = 20;
+            p_cfg->cust_pcscf_4 = 16384;
+            p_cfg->cust_pcscf_6 = 16386;
+            p_cfg->oos = 30;
+            p_cfg->mobike = 1;
+            p_cfg->fragment = 1;
+            break;
+        }
+        case 8: /* TMO_US */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-sha1-modp1024");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-sha1");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'10500,3600','10000,900','11001,-1','11000,-3'");
+            p_cfg->cust_pcscf_4 = 16384;
+            p_cfg->cust_pcscf_6 = 16386;
+            p_cfg->oos = 30;
+            p_cfg->urlcert = 1;
+            p_cfg->mobike = 1;
+            break;
+        }
+        case 9: /* CT */
+        {
+            break;
+        }
+        case 11: /* H3G */
+        {
+            /* MCC 234 live and 235 lab */
+            
+            if (streq(mcc, "234")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-sha1-prfsha1-modp2048");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-sha1");
+                p_cfg->mtu = 1500;
+                p_cfg->keep_timer = 20;
+                p_cfg->cust_pcscf_4 = 16389;
+                p_cfg->cust_pcscf_6 = 16386;
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "235")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-sha1-prfsha1-modp2048");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-sha1");
+                p_cfg->mtu = 1500;
+                p_cfg->keep_timer = 20;
+                p_cfg->cust_pcscf_4 = 16389;
+                p_cfg->cust_pcscf_6 = 16386;
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->abort_mode = 1;
+            }            
+            else if (streq(mcc, "240")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-aes128-sha1-sha256-aesxcbc-prfsha1-prfsha256-prfmd5-modp1024-modp1536-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-aes256-3des-sha1-sha256-aesxcbc!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->keep_timer = 60;
+                p_cfg->dpd_timer = 3600;
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->mtu = 1280;
+                p_cfg->fastreauth = 1;
+                p_cfg->oos = 30;
+                p_cfg->retrans_to = 1;
+                p_cfg->retrans_base = 2;
+                p_cfg->cert_used = 0;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "238")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-aes128-sha1-sha256-aesxcbc-prfsha1-prfsha256-prfmd5-modp1024-modp1536-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-aes256-3des-sha1-sha256-aesxcbc!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->keep_timer = 60;
+                p_cfg->dpd_timer = 3600;
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->mtu = 1280;
+                p_cfg->fastreauth = 1;
+                p_cfg->oos = 30;
+                p_cfg->retrans_to = 1;
+                p_cfg->retrans_base = 2;
+                p_cfg->cert_used = 0;
+                p_cfg->abort_mode = 1;
+            }
+            else {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-sha1-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-sha1!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->mtu = 1500;
+                p_cfg->cust_pcscf_4 = 16389;
+                p_cfg->cust_pcscf_6 = 16386;
+                p_cfg->abort_mode = 1;
+            }
+            break;
+        }
+        case 12: /* VzW */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes256-sha1-modp1024-modp1536-modp2048");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-aes256-sha1");
+            kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                         "wo.vzwwo.com");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,0,0,-1','1001-1080,-2','1082-3000,-2','9000-9050,0,0,-1','10500-10550,3600','11000-11050,0,0,-1','1-11050,0,0,60+15,120,480,900'");
+            p_cfg->cust_pcscf_4 = 16389;
+            p_cfg->cust_pcscf_6 = 16390;
+            p_cfg->cust_imei_cp = 16391;
+            p_cfg->IDi = IDI_RFC822_ADDR_MAC_EAP_NO_MAC;
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->keep_timer = 50;
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->dns_timer = 480;
+            p_cfg->retrans_to = 1;
+            p_cfg->retrans_tries = 4;
+            p_cfg->retrans_base = 2;
+            p_cfg->esp_setup_time = 20;
+            break;
+        }
+        case 15: /* Telefonica (O2) */
+        {
+            if (streq(mcc, "234")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-aes128ctr-aes192-aes192ctr-aes256-aes256ctr-sha1-sha256-sha384-sha512-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes256-sha1-sha256-sha384-sha512-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                             "epdg.epc.mnc010.mcc234.pub.3gppnetwork.org");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->ike_rekey_timer = 43200;
+                p_cfg->esp_rekey_timer = 43200;
+                p_cfg->rekey_margin = 180;
+                p_cfg->keep_timer = 30;
+                p_cfg->dpd_timer = 1800;
+                p_cfg->retrans_tries = 3;
+                p_cfg->mtu = 1280;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "262")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-sha256-prfsha1-modp2048");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes256-sha256");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->cust_pcscf_4 = 16389;
+                p_cfg->cust_pcscf_6 = 16390;
+                p_cfg->cust_imei_cp = 16385;
+                p_cfg->keep_timer = 30;
+                p_cfg->abort_mode = 1;
+            }
+            else {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-aes128ctr-aes192-aes192ctr-aes256-aes256ctr-sha1-sha256-sha384-sha512-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes256-sha1-sha256-sha384-sha512-modp2048!");
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->ike_rekey_timer = 43200;
+                p_cfg->esp_rekey_timer = 43200;
+                p_cfg->rekey_margin = 180;
+                p_cfg->dpd_timer = 1800;
+                p_cfg->retrans_tries = 3;
+                p_cfg->mtu = 1280;
+            }
+            break;
+        }
+        case 16: /* EE */
+        {
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,10,30,60,120,300','1040-1041,30,60,120,300,900','1081-1111,10,30,60,120,300','8192-11011,10,30,60,120,300'");
+            p_cfg->esp_setup_time = 30;
+            p_cfg->dpd_timer = 60;
+            p_cfg->mtu = 1280;
+            p_cfg->ike_rekey_timer = 1200;
+            p_cfg->dns_type = 2;
+            p_cfg->use_cfg_vip = 1;
+            p_cfg->abort_mode = 1;
+            break;
+        }
+        case 17: /* DoCoMo */
+        {
+            break;
+        }
+        case 18: /* RJIL */
+        {
+            kal_snprintf((kal_char *)p_cfg->select_info, sizeof(p_cfg->select_info), "%s",
+                         "'405840,0','405854,0','405855,0','405856,0','405857,0','405858,0','405859,0','405860,0','405861,0','405862,0','405863,0','405864,0','405865,0','405866,0','405867,0','405868,0','405869,0','405870,0','405871,0','405872,0','405873,0','405874,0'");
+            kal_snprintf((kal_char *)p_cfg->epdg_identifier, sizeof(p_cfg->epdg_identifier), "%s",
+                         "'internationalvowifi.jio.com,1','vowifi.jio.com,0'");
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->keep_timer = 20;
+            //p_cfg->pre_post_ping = 1;
+            break;
+        }
+        case 19: /* Telstra */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes256-sha256-prfsha256-modp2048");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes256-sha256");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'mrc=288','1000-2000ri,60,120,240,480,960,1920'");
+            p_cfg->dpd_timer = 1740;
+            p_cfg->mtu = 1400;
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->keep_timer = 20;
+            p_cfg->retrans_to = 1;
+            p_cfg->retrans_tries = 3;
+            p_cfg->retrans_base = 2;
+            p_cfg->fragment = 1;
+            p_cfg->device_identity = 1;
+            break;
+        }
+        case 20: /* SPRINT */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-aes256-des-3des-sha1-sha256-sha512-aesxcbc-md5-prfaesxcbc-prfmd5-prfsha1-modp1024-modp1536-modp2048!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-sha1-noesn");
+            kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                         "epdg.imcns.spcsdns.net");
+            kal_snprintf((kal_char *)p_cfg->select_info, sizeof(p_cfg->select_info), "%s",
+                         "'312530,0','310120,0'");
+            p_cfg->keep_timer = 20;
+            p_cfg->retrans_to = 3;
+            p_cfg->retrans_tries = 2;
+            p_cfg->retrans_base = 1;
+            p_cfg->dpd_timer = 600;
+            p_cfg->mtu = 1500;
+            break;
+        }
+        case 100: /* CSL */
+        {
+            break;
+        }
+        case 101: /* PCCW */
+        {
+            break;
+        }
+        case 102: /* SMT */
+        {
+            break;
+        }
+        case 103: /* SingTel */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-aes128ctr-aes192-aes192ctr-aes256-aes256ctr-des-3des-aesxcbc-md5-sha1-sha256-sha384-sha512-prfaesxcbc-prfmd5-prfsha1-prfsha256-prfsha384-prfsha512-modp2048-modp1536-modp1024-modp768!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-aes128ctr-aes192-aes192ctr-aes256-aes256ctr-des-3des-aesxcbc-md5-sha1-sha256-sha384-sha512");
+            p_cfg->ike_rekey_timer = 3600;
+            p_cfg->esp_rekey_timer = 43200;
+            p_cfg->dpd_timer = 600;
+            p_cfg->retrans_to = 5;
+            p_cfg->retrans_base = 1;
+            p_cfg->retrans_tries = 3;
+            p_cfg->cust_pcscf_4 = 16384;
+            p_cfg->cust_pcscf_6 = 16386;
+            break;
+        }
+        case 104: /* StarHub */
+        {
+            break;
+        }
+        case 106: /* 3HK */
+        {
+            break;
+        }
+        case 107: /* SFR */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-sha256-modp2048-modp1024");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-sha256-modp2048-modp1024");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->keep_timer = 20;
+            p_cfg->dpd_timer = 1800;
+            p_cfg->oos = 30;
+            p_cfg->mobike = 1;
+            p_cfg->abort_mode = 1;
+            p_cfg->ike_dscp = 46;
+            break;
+        }
+        case 109: /* CHT */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-aes128ctr-aes192-aes192ctr-aes256-aes256ctr-des-3des-aesxcbc-md5-sha1-sha256-sha384-sha512-prfaesxcbc-prfmd5-prfsha1-prfsha256-prfsha384-prfsha512-modp2048-modp1536-modp1024-modp768");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-aes128ctr-aes192-aes192ctr-aes256-aes256ctr-des-3des-null-aesxcbc-md5-sha1-sha256-sha384-sha512");
+            p_cfg->keep_timer = 20;
+            p_cfg->dpd_timer = 600;
+            p_cfg->ike_rekey_timer = 3600;
+            p_cfg->esp_rekey_timer = 7200;
+            p_cfg->rekey_margin = 180;
+            p_cfg->retrans_to = 5;
+            p_cfg->retrans_tries = 3;
+            p_cfg->retrans_base = 1;
+            p_cfg->mtu = 1500;
+            p_cfg->oos = 30;
+            p_cfg->mobike = 1;
+            p_cfg->cert_used = 0;
+            break;
+        }
+        case 110: /* FET */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes256-sha256-modp2048");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes256-sha256-modp2048");
+            p_cfg->IDi = IDI_RFC822_ADDR_MAC;
+            p_cfg->keep_timer = 60;
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->retrans_to = 1;
+            p_cfg->retrans_tries = 3;
+            p_cfg->retrans_base = 2;
+            p_cfg->cust_pcscf_4 = 16384;
+            p_cfg->cust_pcscf_6 = 16386;
+            break;
+        }
+        case 112: /* Telcel */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-sha1-modp1024!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-sha1-modp1024!");
+            kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                         "epdg.ims.mnc020.mcc334.pub.3gppnetwork.org");
+            p_cfg->ike_rekey_timer = 87000;
+            p_cfg->esp_rekey_timer = 87000;
+            p_cfg->rekey_margin = 600;
+            p_cfg->retrans_to = 1;
+            p_cfg->retrans_tries = 3;
+            p_cfg->retrans_base = 2;
+            p_cfg->dpd_timer = 10;
+            p_cfg->IDi = IDI_RFC822_ADDR_MAC;
+            p_cfg->cust_pcscf_4 = 16389;
+            p_cfg->cust_pcscf_6 = 16390;
+            p_cfg->cust_imei_cp = 16385;
+            p_cfg->fastreauth = 1;
+            p_cfg->redirect = 1;
+            break;
+        }
+        case 113: /* Beeline_RU */
+        {
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->retrans_tries = 3;
+            p_cfg->cert_used = 0;
+            break;
+        }
+        case 117: /* Smartfren */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-aes192-aes256-3des-sha1-sha256-sha384-sha512-md5-aesxcbc-prfsha1-prfmd5-prfaesxcbc-modp768-modp1024-modp1536-modp2048");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-aes192-aes256-3des-sha1-sha256-sha384-sha512-md5-aesxcbc-modp768-modp1024-modp1536-modp2048");
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->retrans_to = 1;
+            p_cfg->retrans_tries = 4;
+            p_cfg->retrans_base = 2;
+            p_cfg->cust_pcscf_4 = 16389;
+            p_cfg->cust_pcscf_6 = 16390;
+            p_cfg->cust_imei_cp = 16385;
+            p_cfg->mtu = 1400;
+            p_cfg->oos = 30;
+            p_cfg->fastreauth = 1;
+            p_cfg->mobike = 1;
+            break;
+        }
+        case 118: /* YTL */
+        {
+            break;
+        }
+        case 119: /* Natcom */
+        {
+            break;
+        }
+        case 120: /* Claro */
+        {
+             if (streq(mcc, "716")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-sha1-prfsha1-modp1024!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-sha1-modp1024");
+                kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                             "epdg.ims.mnc010.mcc716.pub.3gppnetwork.org");
+                p_cfg->ike_rekey_timer = 87000;
+                p_cfg->esp_rekey_timer = 87000;
+                p_cfg->rekey_margin = 600;
+                p_cfg->dpd_timer = 10;
+                p_cfg->fastreauth = 1;
+                p_cfg->cust_pcscf_4 = 16389;
+                p_cfg->cust_pcscf_6 = 16390;
+                p_cfg->cust_imei_cp = 16385;
+                p_cfg->retrans_tries = 3;
+                p_cfg->retrans_base = 2;
+                p_cfg->mtu = 1500;
+                p_cfg->cert_used = 0;
+            }
+            else if (streq(mcc, "722")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-sha1-prfsha1-modp1024!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-sha1-modp1024");
+                kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                             "epdg.epc.mnc310.mcc722.pub.3gppnetwork.org");
+                p_cfg->ike_rekey_timer = 87000;
+                p_cfg->esp_rekey_timer = 87000;
+                p_cfg->rekey_margin = 600;
+                p_cfg->retrans_tries = 3;
+                p_cfg->dpd_timer = 10;
+                p_cfg->IDi = IDI_RFC822_ADDR_MAC;
+                p_cfg->cust_pcscf_4 = 16384;
+                p_cfg->cust_pcscf_6 = 16390;
+                p_cfg->fastreauth = 1;
+                p_cfg->oos = 30;
+                p_cfg->mtu = 1280;
+            }
+            else if (streq(mcc, "724")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-sha1-modp1024!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-sha1!");
+                kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                             "epdg.ims.mnc005.mcc724.pub.3gppnetwork.org");
+                p_cfg->ike_rekey_timer = 87000;
+                p_cfg->esp_rekey_timer = 87000;
+                p_cfg->rekey_margin = 600;
+                p_cfg->cust_pcscf_4 = 16384;
+                p_cfg->cust_pcscf_6 = 16390;
+                p_cfg->keep_timer = 60;
+                p_cfg->dpd_timer = 10;
+                p_cfg->fastreauth = 1;
+                p_cfg->oos = 30;
+                p_cfg->mtu = 1280;
+            }
+            else if (streq(mcc, "732")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-aes192-aes256-3des-sha1-modp1024");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-aes192-aes256-3des-md5-sha1-sha256");
+                kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                             "epdg.ims.mnc101.mcc732.pub.3gppnetwork.org");
+                p_cfg->ike_rekey_timer = 87000;
+                p_cfg->esp_rekey_timer = 87000;
+                p_cfg->rekey_margin = 600;
+                p_cfg->dpd_timer = 10;
+                p_cfg->mtu = 1500;
+                p_cfg->retrans_to = 1;
+                p_cfg->retrans_base = 2;
+                p_cfg->retrans_tries = 3;
+                p_cfg->oos = 30;
+                p_cfg->fastreauth = 1;
+                p_cfg->cert_used = 0;
+            }
+            else {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-sha1-modp1024");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-sha1");
+                p_cfg->ike_rekey_timer = 87000;
+                p_cfg->esp_rekey_timer = 87000;
+                p_cfg->rekey_margin = 600;
+                p_cfg->dpd_timer = 10;
+            }
+            break;
+        }
+        case 122: /* AIS */
+        {
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'24,45,90,180,360,720,-1','1040-1041,30,60,120,300,900','1081-1111,45,90,180,360,720,-1','8192-11011,45,90,180,360,720,-1'");
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->keep_timer = 30;
+            p_cfg->dpd_timer = 60;
+            p_cfg->mtu = 1700;
+            break;
+        }
+        case 124: /* APTG */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "des-3des-aes128-aes256-sha1-sha256-sha384-sha512-md5-aesxcbc-modp1024-modp1536-modp2048!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "null-des-3des-aes128-aes256-sha1-md5-aesxcbc-sha256-sha384-sha512!");
+            kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                         "epdg.epc.aptg.com.tw");
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->rekey_margin = 1000;
+            p_cfg->dpd_timer = 120;
+            p_cfg->keep_timer = 600;
+            p_cfg->retrans_tries = 3;
+            p_cfg->IDi = IDI_RFC822_ADDR;
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->cust_pcscf_4 = 16384;
+            p_cfg->cust_pcscf_6 = 16386;
+            p_cfg->oos = 15;
+            p_cfg->detach_hard_timer = 3;
+            p_cfg->cert_used = 0;
+            p_cfg->mobike = 1;
+            break;
+        }
+        case 125: /* DTAC */
+        {
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->keep_timer = 0;
+            p_cfg->retrans_to = 5;
+            p_cfg->retrans_tries = 3;
+            p_cfg->retrans_base = 1;
+            p_cfg->dpd_timer = 300;
+            p_cfg->cust_pcscf_4 = 16384;
+            p_cfg->cust_pcscf_6 = 16386;
+            p_cfg->mtu = 1500;
+            p_cfg->oos = 300;
+            p_cfg->mobike = 1;
+            break;
+        }
+        case 126: /* Turkey Avea */
+        {
+            break;
+        }
+        case 127: /* MEGAFON */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-aes256-sha1-sha256-prfsha1-modp768-modp1024");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-aes256-sha1-sha256-modp1024");
+            kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                         "epdg.megafon.ru");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 28000;
+            p_cfg->rekey_margin = 180;
+            p_cfg->retrans_to = 1;
+            p_cfg->retrans_tries = 3;
+            p_cfg->retrans_base = 2;
+            p_cfg->cust_pcscf_4 = 16384;
+            p_cfg->cust_pcscf_6 = 16390;
+            p_cfg->cust_imei_cp = 16385;
+            p_cfg->mtu = 1500;
+            p_cfg->oos = 30;
+            p_cfg->mobike = 1;
+            p_cfg->abort_mode = 1;
+            break;
+        }
+        case 128: /* DNA Finland */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes256-sha1-prfsha1-modp2048");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes256-sha1");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->cust_pcscf_6 = 16386;
+            p_cfg->mobike = 1;
+            p_cfg->abort_mode = 1;
+            break;
+        }
+        case 129: /* KDDI */
+        {
+             break;
+        }
+        case 130: /* TIM Italy */
+        {
+            if (streq(mcc, "724")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "3des-aes128-md5-sha1-prfsha1-modp1024!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "3des-aes128-md5-sha1!");
+                kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                             "189.40.173.77");
+                p_cfg->ike_rekey_timer = 3300;
+                p_cfg->esp_rekey_timer = 1800;
+                p_cfg->rekey_margin = 300;
+                p_cfg->retrans_tries = 3;
+                p_cfg->dpd_timer = 120;
+                p_cfg->cust_pcscf_4 = 16389;
+                p_cfg->cust_pcscf_6 = 16390;
+                p_cfg->cert_used = 0;
+            }
+            break;
+        }
+        case 131: /* TrueMove */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-sha1-prfsha1-modp1024");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-sha1");
+            kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                         "epdg.epc.mnc004.mcc520.pub.3gppnetwork.org");
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->retrans_to = 1;
+            p_cfg->retrans_tries = 3;
+            p_cfg->retrans_base = 2;
+            p_cfg->dpd_timer = 900;
+            p_cfg->cust_pcscf_4 = 16389;
+            p_cfg->cust_pcscf_6 = 16390;
+            p_cfg->mtu = 1300;
+            p_cfg->oos = 30;
+            p_cfg->mobike = 1;
+            break;
+        }
+        case 132: /* VIVO */
+        {
+            if (streq(mcc, "722")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-aes256-3des-md5-sha1-prfsha1-modp1024-modp1536-modp2048");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-aes256-3des-md5-sha1");
+                p_cfg->ike_rekey_timer = 3001;
+                p_cfg->esp_rekey_timer = 43000;
+                p_cfg->rekey_margin = 180;
+                p_cfg->cust_pcscf_4 = 16389;
+                p_cfg->cust_pcscf_6 = 16390;
+                p_cfg->cert_used = 0;
+            }
+            else if (streq(mcc, "724")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-md5-prfsha1-modp1024");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes256-md5");
+                kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                             "wifi.bra.tu.com");
+                p_cfg->IDi = IDI_RFC822_ADDR_MAC_EAP_NO_MAC;
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->keep_timer = 180;
+                p_cfg->ike_rekey_timer = 82800;
+                p_cfg->esp_rekey_timer = 28800;
+                p_cfg->rekey_margin = 180;
+                p_cfg->retrans_to = 1;
+                p_cfg->retrans_tries = 3;
+                p_cfg->retrans_base = 2;
+                p_cfg->cert_used = 0;
+            }
+            else if (streq(mcc, "732")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-aes192-aes256-3des-md5-sha1-sha256-prfsha1-modp1024");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-aes192-aes256-3des-md5-sha1-sha256");
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->ike_rekey_timer = 3001;
+                p_cfg->esp_rekey_timer = 1500;
+                p_cfg->rekey_margin = 180;
+                p_cfg->dpd_timer = 60;
+                p_cfg->cert_used = 0;
+            }
+            else if (streq(mcc, "716")) {
+                p_cfg->ike_rekey_timer = 3600;
+                p_cfg->esp_rekey_timer = 1800;
+                p_cfg->rekey_margin = 300;
+                p_cfg->retrans_tries = 3;
+                p_cfg->dpd_timer = 10;
+                p_cfg->cust_pcscf_4 = 16389;
+                p_cfg->cust_pcscf_6 = 16390;
+                p_cfg->esp_setup_time = 300;
+                p_cfg->fastreauth = 1;
+                p_cfg->cert_used = 0;
+                p_cfg->urlcert = 1;
+            }
+            else if (streq(mcc, "730")) {
+                kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                             "epdg.epc.mnc002.mcc730.pub.3gppnetwork.org");
+                p_cfg->ike_rekey_timer = 43380;
+                p_cfg->esp_rekey_timer = 43380;
+                p_cfg->rekey_margin = 180;
+                p_cfg->retrans_tries = 3;
+                p_cfg->keep_timer = 20;
+                p_cfg->dpd_timer = 120;
+                p_cfg->mtu = 1280;
+            }
+            break;
+        }
+        case 133: /* DU */
+        {
+            break;
+        }
+        case 134: /* Elisa */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-aes192-aes256-aes256ctr-sha1-prfaesxcbc-prfmd5-prfsha1-modp2048!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-sha1!");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+            p_cfg->cert_used = 0;
+            p_cfg->abort_mode = 1;
+            break;
+        }
+        case 135: /* MTS */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes256-aes128-sha256-sha1-prfsha256-prfsha1-modp2048!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes256-aes128-sha256-aesxcbc-modp2048!");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 14400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->dpd_timer = 10;
+            p_cfg->retrans_to = 10;
+            p_cfg->retrans_tries = 1;
+            p_cfg->retrans_base = 1;
+            p_cfg->cust_pcscf_4 = 16384;
+            p_cfg->cust_pcscf_6 = 16390;
+            p_cfg->mtu = 1500;
+            p_cfg->cert_used = 0;
+            p_cfg->abort_mode = 1;
+            break;
+        }
+        case 136: /* ENTEL */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-3des-aesxcbc-sha1-prfsha1-modp1024");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-3des-aesxcbc-sha1");
+            p_cfg->keep_timer = 60;
+            p_cfg->retrans_to = 2;
+            p_cfg->retrans_tries = 3;
+            p_cfg->retrans_base = 1;
+            p_cfg->mtu = 1280;
+            p_cfg->fastreauth = 1;
+            p_cfg->cert_used = 0;
+            break;
+        }
+        case 137: /* Tele2 */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-aes256-sha1-sha256-prfsha1-prfsha256-modp1024-modp2048");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-aes256-sha1-sha256-modp1024-modp2048");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 28800;
+            p_cfg->rekey_margin = 180;
+            p_cfg->keep_timer = 30;
+            p_cfg->cust_pcscf_4 = 16389;
+            p_cfg->cust_pcscf_6 = 16390;
+            p_cfg->cert_used = 0;
+            p_cfg->abort_mode = 1;
+            break;
+        }
+        case 140: /* MTN_ZAIN */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-aes256-3des-md5-sha1-aesxcbc-modp2048-modp1024-modp1536");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-sha1-noesn-esn");
+            p_cfg->cust_pcscf_4=16384;
+            p_cfg->cust_pcscf_6=16386;
+            p_cfg->keep_timer=180;
+            p_cfg->dpd_timer=600;
+            p_cfg->mtu=1500;
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->urlcert = 1;
+            p_cfg->abort_mode = 1;
+            break;
+        }
+        case 141: /* CELLC */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-3des-aes192-aes256-sha1-modp1024");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "3des-aes128-aes192-aes256-sha1-md5-aesxcbc");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+            p_cfg->cust_pcscf_4 = 16384;
+            p_cfg->cust_pcscf_6 = 16386;
+            p_cfg->mtu = 1440;
+            p_cfg->fastreauth = 1;
+            p_cfg->oos = 30;
+            p_cfg->cert_used = 0;
+            p_cfg->mobike = 1;
+            p_cfg->abort_mode = 1;
+            break;
+        }
+        case 143: /* Turkcell */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-aes256-3des-md5-sha1-prfsha1-prfmd5-modp2048-modp1536-modp1024-modp768!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "3des-aes128-aes256-md5-sha1!");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->keep_timer = 0;
+            p_cfg->dpd_timer = 120;
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 28800;
+            p_cfg->rekey_margin = 180;
+            p_cfg->cust_pcscf_4 = 16384;
+            p_cfg->cust_pcscf_6 = 16390;
+            p_cfg->fastreauth = 1;
+            p_cfg->oos = 30;
+            p_cfg->mobike = 1;
+            p_cfg->abort_mode = 1;
+            p_cfg->cert_used = 0;
+            break;
+        }
+        case 145: /* Cricket */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-sha256-modp2048!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-sha256!");
+            kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                         "epdg.epc.att.net");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'8192,-1','36,20,40,80,160,320'");
+            p_cfg->keep_timer = 20;
+            p_cfg->cust_pcscf_4 = 16384;
+            p_cfg->cust_pcscf_6 = 16386;
+            p_cfg->oos = 30;
+            p_cfg->mobike = 1;
+            p_cfg->fragment = 1;
+            break;
+        }
+        case 146: /* Etisalat */
+        {
+            if (streq(mcc, "424")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes256-sha1-modp1024");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes256-sha1");
+                kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                             "epdg.epc.mnc002.mcc424.etisalat.ae");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->dpd_timer = 180;
+                p_cfg->keep_timer = 20;
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->cust_pcscf_4 = 16384;
+                p_cfg->cust_pcscf_6 = 16390;
+                p_cfg->mtu = 1500;
+                p_cfg->fastreauth = 1;
+                p_cfg->oos = 30;
+                p_cfg->mobike = 1;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "602")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-aes128ctr-aes192-aes192ctr-aes256-aes256ctr-des-3des-aesxcbc-md5-sha1-sha256-sha384-sha512-modp1024");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-aes128ctr-aes192-aes192ctr-aes256-aes256ctr-des-3des-aesxcbc-md5-sha1-sha256-sha384-sha512");
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->cust_pcscf_4 = 16389;
+                p_cfg->cust_pcscf_6 = 16390;
+                p_cfg->fastreauth = 1;
+                p_cfg->oos = 30;
+                p_cfg->mobike = 1;
+            }
+            else {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-aes128ctr-aes192-aes192ctr-aes256-aes256ctr-des-3des-aesxcbc-md5-sha256-sha1-sha384-sha512-modp768-modp1024-modp1536-modp2048-modp3072-modp4096-modp6144-modp8192");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-aes128ctr-aes192-aes192ctr-aes256-aes256ctr-des-3des-aesxcbc-md5-sha256-sha1-sha384-sha512");
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->cust_pcscf_4 = 16389;
+                p_cfg->cust_pcscf_6 = 16390;
+                p_cfg->fastreauth = 1;
+                p_cfg->oos = 30;
+                p_cfg->mobike = 1;
+            }
+            break;
+        }
+        case 149: /* CMHK */
+        {
+            p_cfg->cust_pcscf_4 = 16384;
+            p_cfg->cust_pcscf_6 = 16386;
+            break;
+        }
+        case 150: /* Swisscom Switzerland (228/01) / Liechtenstein (295/01) */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-aes256-aesxcbc-sha1-prfaesxcbc-prfsha1-modp1024-modp2048!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-aes256-aesxcbc-sha1-modp1024-modp2048!");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->ike_rekey_timer = 82800;
+            p_cfg->esp_rekey_timer = 14400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->keep_timer = 20;
+            p_cfg->mtu = 1280;
+            p_cfg->oos = 30;
+            p_cfg->mobike = 1;
+            p_cfg->abort_mode = 1;
+            break;
+        }
+        case 152: /* Optus/Australia */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes256-sha256-prfsha256-modp2048!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes256-aesxcbc-sha256!");
+            p_cfg->retrans_to = 1;
+            p_cfg->retrans_tries = 3;
+            p_cfg->retrans_base = 2;
+            p_cfg->mtu = 1500;
+            p_cfg->oos = 30;
+            p_cfg->mobike = 1;
+            p_cfg->ike_dscp = 46;
+            p_cfg->cert_used = 0;
+            p_cfg->ike_rekey_timer = 3001;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->dpd_timer=3600;
+            break;
+        }
+        case 153: /* VHA/Australia */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes256-sha512-prfsha256-modp2048!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes256-sha512-modp2048!");
+            p_cfg->ike_rekey_timer = 64800;
+            p_cfg->esp_rekey_timer = 64800;
+            p_cfg->dpd_timer=90;
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->mtu = 1280;
+            p_cfg->fastreauth = 1;
+            p_cfg->oos = 30;
+            p_cfg->cert_used = 0;
+            p_cfg->mobike = 1;
+            break;
+        }
+        case 154: /* Telia */
+        {
+            if (streq(mcc, "244")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                            "aes128-sha1-prfsha1-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                            "aes128-sha1-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->keep_timer = 30;
+                p_cfg->dpd_timer = 300;
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->mtu = 1300;
+                p_cfg->cert_used = 0;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "242")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                            "aes128-sha256-prfsha256-modp2048");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                            "aes128-sha256-modp2048");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->keep_timer=90;
+                p_cfg->dpd_timer=300;
+                p_cfg->ike_rekey_timer=86400;
+                p_cfg->esp_rekey_timer=86000;
+                p_cfg->rekey_margin = 180;
+                p_cfg->mtu=1300;
+                p_cfg->retrans_to=1;
+                p_cfg->retrans_base=2;
+                p_cfg->oos=30;
+                p_cfg->mobike = 1;
+                p_cfg->abort_mode = 1;
+                p_cfg->cert_used = 0;
+            }
+            else {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                            "aes128-aes192-aes256-sha1-sha256-sha384-prfsha1-prfaesxcbc-prfsha256-prfsha384-modp2048-modp1536-modp1024!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                            "aes128-aes192-aes256-3des-sha1-sha256-sha384!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->keep_timer = 90;
+                p_cfg->dpd_timer = 300;
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->mtu = 1300;
+                p_cfg->cert_used = 0;
+                p_cfg->abort_mode = 1;
+            }
+            break;
+        }
+        case 155: /* Digi Malaysia */
+        {
+            if (streq(mcc, "226")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                            "aes128-aes192-aes256-sha1-sha256-sha384-prfsha1-prfsha256-prfsha384-modp1024-modp1536-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-aes192-aes256-sha1-sha256-sha384!");
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->retrans_to = 1;
+                p_cfg->retrans_base = 2;
+                p_cfg->oos = 30;
+                p_cfg->cert_used = 0;
+                p_cfg->mobike = 1;
+            }
+            else if (streq(mcc, "216")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                            "aes256ctr-aes128-aes128ctr-aes192-aes192ctr-aes256-3des-sha1-sha256-sha384-sha512-aesxcbc-md5-prfsha1-prfsha256-prfsha384-prfsha512-prfaesxcbc-prfmd5-modp2048-modp3072-modp4096-modp6144-modp8192-modp1024-modp1536-modp768!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128ctr-aes128-aes192-aes192ctr-aes256-aes256ctr-3des-sha256-sha384-sha512-sha1-aesxcbc-md5!");
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->dpd_timer = 60;
+                p_cfg->cust_pcscf_4 = 16384;
+                p_cfg->cust_pcscf_6 = 16390;
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->retrans_to = 1;
+                p_cfg->retrans_base = 2;
+                p_cfg->fastreauth = 1;
+                p_cfg->oos = 30;
+                p_cfg->mtu = 1400;
+                p_cfg->cert_used = 1;
+                p_cfg->nocert = 0;
+            }
+            else {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                            "aes128-aes256-sha1-prfaesxcbc-modp1024");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-aes256-3des-sha1");
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->retrans_to = 1;
+                p_cfg->retrans_tries = 3;
+                p_cfg->retrans_base = 2;
+                p_cfg->cust_pcscf_4 = 16384;
+                p_cfg->cust_pcscf_6 = 16386;
+                p_cfg->fastreauth = 1;
+                p_cfg->oos = 15;
+                p_cfg->keep_timer = 180;
+                p_cfg->cust_imei_cp = 41101;
+                p_cfg->dpd_timer = 60;
+                p_cfg->cert_used = 0;
+                p_cfg->mobike = 1;
+            }
+            break;
+        }
+        case 156: /* Telenor */
+        {
+            if (streq(mcc, "240")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-aes256-aes256ctr-3des-aesxcbc-md5-sha1-sha256-prfaesxcbc-prfmd5-prfsha1-prfsha256-modp2048-modp1024-modp768!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-aes256-aes128ctr-aes256ctr-3des-aesxcbc-sha1-sha256-modp2048-modp1024-modp768!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 86400;
+                p_cfg->rekey_margin = 180;
+                p_cfg->cust_pcscf_4 = 0;
+                p_cfg->keep_timer = 30;
+                p_cfg->cert_used = 0;
+                p_cfg->abort_mode = 1;
+            }
+            else if (streq(mcc, "242")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                            "aes128-aes256-sha1-prfsha1-modp1024-modp768-modp1536-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-sha1!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->keep_timer=30;
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 1800;
+                p_cfg->rekey_margin = 180;
+                p_cfg->mtu = 1300;
+                p_cfg->fastreauth = 1;
+                p_cfg->cert_used = 0;
+                p_cfg->abort_mode = 1;
+            }
+            else {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                            "aes256-aes128-sha256-prfsha256-prfsha1-modp1024-modp1536-modp2048!");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                            "aes256-aes128-sha1-sha256!");
+                kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->keep_timer = 30;
+                p_cfg->ike_rekey_timer = 86400;
+                p_cfg->esp_rekey_timer = 3600;
+                p_cfg->rekey_margin = 180;
+                p_cfg->mtu = 1280;
+                p_cfg->abort_mode = 1;
+            }
+            break;
+        }
+        case 158: /* Zain */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                        "aes128-sha1-prfsha1-modp1024!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                        "aes128-sha1-modp1024!");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+            p_cfg->keep_timer=0;
+            p_cfg->ike_rekey_timer=900;
+            p_cfg->esp_rekey_timer=86400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->cust_pcscf_4=16384;
+            p_cfg->cust_pcscf_6=16386;
+            p_cfg->fastreauth=1;
+            p_cfg->dpd_timer=300;
+            p_cfg->mtu=1280;
+            p_cfg->oos=30;
+            p_cfg->mobike = 1;
+            p_cfg->abort_mode = 1;
+            p_cfg->cert_used = 0;
+            break;
+        }
+        case 159: /* STC */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                        "aes128-sha1_160-sha1-modp1024!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                        "aes128-sha1-modp1024!");
+            p_cfg->fastreauth=1;
+            p_cfg->mtu=1600;
+            p_cfg->cert_used = 0;
+            break;
+        }
+        case 161: /* Play */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes256-sha1-prfsha1-modp2048");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes256-sha1");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+            p_cfg->IDi = IDI_RFC822_ADDR_MAC_EAP_NO_MAC;
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->keep_timer = 0;
+            p_cfg->ike_rekey_timer = 3600;
+            p_cfg->esp_rekey_timer = 1800;
+            p_cfg->rekey_margin = 180;
+            p_cfg->retrans_tries = 3;
+            p_cfg->dpd_timer = 60;
+            p_cfg->cpa_dns4 = 2;
+            p_cfg->cpa_dns6 = 2;
+            p_cfg->cpa_nm = 1;
+            p_cfg->cert_used = 0;
+            p_cfg->abort_mode = 1;
+            break;
+        }
+        case 162: /* Freedom */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes256-aes128-3des-des-sha1-aesxcbc-md5-prfsha1-prfaesxcbc-modp1536-modp2048-modp1024!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes256-aes128-3des-des-sha1-aesxcbc-md5!");
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->keep_timer = 50;
+            p_cfg->ike_rekey_timer = 3600;
+            p_cfg->esp_rekey_timer = 1200;
+            p_cfg->rekey_margin = 300;
+            p_cfg->cust_pcscf_4 = 16389;
+            p_cfg->cust_pcscf_6 = 16390;
+            p_cfg->mtu = 1300;
+            p_cfg->oos = 30;
+            p_cfg->cert_used = 0;
+            p_cfg->mobike = 1;
+            break;
+        }
+        case 163: /* Dialog */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-aes256-3des-sha1-sha256-prfsha1-prfmd5--modp768--modp1024-modp1536-modp2048!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-aes256-3des-sha1-sha256!");
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->keep_timer = 900;
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->mtu = 1400;
+            break;
+        }
+        case 165: /* Sunrise */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-aes256-3des-prfsha1-sha1-sha1_160-md5_128-modp1024-modp2048");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-aes192-aes256-3des-sha1-sha256-sha384-sha512");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 1500;
+            p_cfg->rekey_margin = 180;
+            p_cfg->cust_pcscf_4 = 16389;
+            p_cfg->cust_pcscf_6 = 16390;
+            p_cfg->keep_timer = 30;
+            p_cfg->retrans_to = 5;
+            p_cfg->retrans_tries = 3;
+            p_cfg->mtu = 1280;
+            p_cfg->cert_used = 0;
+            p_cfg->abort_mode = 1;
+            break;
+        }
+        case 179: /* Newroz */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes256-aes128-3des-sha1-sha256-aesxcbc-prfsha1-prfmd5-modp1024-modp1536-modp2048-modp768!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes256-aes128-3des-sha1-sha256-aesxcbc!");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+            kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                         "130.193.192.154");
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->fastreauth = 1;
+            p_cfg->retrans_tries = 3;
+            p_cfg->cert_used = 0;
+            p_cfg->abort_mode = 1;
+            break;
+        }
+        case 183: /* Argentina Personal*/
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-aes256-3des-md5-sha1-aesxcbc-prfsha1-prfaesxcbc-modp1024-modp1536-modp2048");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-aes256-3des-md5-sha1-aesxcbc");
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->ike_rekey_timer = 3001;
+            p_cfg->esp_rekey_timer = 1500;
+            p_cfg->rekey_margin = 180;
+            p_cfg->mtu = 1300;
+            p_cfg->cert_used = 0;
+            break;
+        }
+        case 185: /* 2degrees*/
+        {
+            kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                         "epdg.ims.2degrees.net.nz");
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-aes256-3des-sha1-sha1_160-sha256-sha384-sha512-md5-md5_128-prfsha256-prfsha512-prfmd5-modp1024!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-aes256-3des-sha1-sha1_160-sha256-sha384-sha512-md5-md5_128!");
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->mtu = 1500;
+            p_cfg->retrans_to = 1;
+            p_cfg->retrans_tries = 3;
+            p_cfg->retrans_base = 2;
+            p_cfg->cust_pcscf_4 = 16384;
+            p_cfg->cust_pcscf_6 = 16390;
+            p_cfg->oos = 30;
+            p_cfg->cert_used = 0;
+            break;
+        }
+        case 188: /* A1 */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-sha1-prfsha1-modp1024");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-md5-sha1");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->cust_pcscf_4 = 16384;
+            p_cfg->cust_pcscf_6 = 16390;
+            p_cfg->retrans_to = 1;
+            p_cfg->retrans_base = 2;
+            p_cfg->cert_used = 0;
+            p_cfg->abort_mode = 1;
+            break;
+        }
+        case 189: /* UMOBILE Malaysia*/
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-md5-prfmd5-modp1024!");
+            p_cfg->retrans_to = 3;
+            p_cfg->retrans_tries = 3;
+            p_cfg->mtu = 1500;
+            p_cfg->cert_used = 0;
+            p_cfg->mobike = 1;
+            break;
+        }
+        case 196: /* FirstNet */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-sha256-modp2048!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-sha256!");
+            kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                         "epdg.epc.att.net");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'8192,-1','36,20,40,80,160,320'");
+            p_cfg->keep_timer = 20;
+            p_cfg->cust_pcscf_4 = 16384;
+            p_cfg->cust_pcscf_6 = 16386;
+            p_cfg->oos = 30;
+            p_cfg->mobike = 1;
+            p_cfg->fragment = 1;
+            break;
+        }
+        case 198: /* Sberbank */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "3des-sha512-prfsha512-modp4096!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-sha256!");
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 28800;
+            p_cfg->IDi = IDI_RFC822_ADDR;
+            p_cfg->mtu = 1300;
+            p_cfg->cust_pcscf_6 = 0;
+            p_cfg->cert_used = 0;
+            break;
+        }
+        case 203: /* NOS */
+        {
+            kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                         "aes128-aes256-sha1-sha256-prfsha1-prfsha256-modp1024-modp2048!");
+            kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                         "aes128-aes256-sha1-sha256!");
+            kal_snprintf((kal_char *)p_cfg->retry_vector, sizeof(p_cfg->retry_vector), "%s",
+                         "'ssidchgrst','24,30,30,43200','1040-1041,30,60,120,300,900','1081-1111,30,30,43200','8192-11011,30,30,43200'");
+            p_cfg->ike_rekey_timer = 86400;
+            p_cfg->esp_rekey_timer = 86400;
+            p_cfg->rekey_margin = 180;
+            p_cfg->keep_timer = 20;
+            p_cfg->ike_dscp = 48;
+            p_cfg->cert_used = 0;
+            p_cfg->abort_mode = 1;
+            break;
+        }
+        
+        case 1001: /* Ericsson IMS IWLAN */
+        {
+            break;
+        }
+        case 1002: /* Nokia Finland */
+        {
+            break;
+        }
+        case 1003: /* HQLAB_ERICSSON */
+        {
+            if (streq(mcc, "240")) {
+                kal_snprintf((kal_char *)p_cfg->ike_algo, sizeof(p_cfg->ike_algo), "%s",
+                             "aes128-md5-modp1024");
+                kal_snprintf((kal_char *)p_cfg->esp_algo, sizeof(p_cfg->esp_algo), "%s",
+                             "aes128-3des-des-md5-sha1-aesxcbc");
+                kal_snprintf((kal_char *)p_cfg->epdg_fqdn, sizeof(p_cfg->epdg_fqdn), "%s",
+                             "10.164.3.251");
+                p_cfg->IDr = IDR_KEY_ID;
+                p_cfg->ike_rekey_timer = 3600;
+                p_cfg->esp_rekey_timer = 3600;
+                p_cfg->rekey_margin = 300;
+                p_cfg->mtu = 1500;
+            }
+            break;
+        }
+        case 1004: /* Huawei IMS */
+        {
+            break;
+        }
+        case 24576: /* ID24576 */
+        {
+            p_cfg->IDr = IDR_KEY_ID;
+            p_cfg->ike_rekey_timer = 3300;
+            p_cfg->esp_rekey_timer = 1800;
+            p_cfg->rekey_margin = 300;
+            p_cfg->dpd_timer = 120;
+            break;
+        }
+        default:
+            break;
+    }
+
+    return KAL_TRUE;
+}
+
diff --git a/mcu/custom/protocol/common/ps/custom_wo_config.h b/mcu/custom/protocol/common/ps/custom_wo_config.h
new file mode 100644
index 0000000..1f5ff69
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_wo_config.h
@@ -0,0 +1,93 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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 __CUSTOM_WO_CONFIG_H__
+#define __CUSTOM_WO_CONFIG_H__
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "kal_public_api.h"
+#include "ps_public_enum.h"
+#include "l4_ps_api.h"
+#include "sim_ps_api.h"
+
+#include "nvram_editor_data_item.h"
+#include "nvram_interface.h"
+#include "iwlan_nvram_def.h"
+
+typedef enum {
+    IDI_RFC822_ADDR = 0,
+    IDI_RFC822_ADDR_MAC,
+    IDI_RFC822_ADDR_MAC_EAP_NO_MAC,
+} idi_format_t;
+
+typedef enum {
+    IDR_FQDN = 0,
+    IDR_KEY_ID,
+} idr_format_t;
+
+typedef enum {
+    AUTH_EAP = 0,
+    AUTH_PSK,
+    AUTH_PUBKEY,
+} auth_t;
+
+typedef enum {
+    EAP_AKA = 0,
+    EAP_SIM,
+    EAP_AKAP,
+} eap_auth_t;
+
+typedef enum {
+    DNS_ADDR_V4 = 0,
+    DNS_ADDR_V6,
+    DNS_ADDR_V4V6,
+    DNS_ADDR_V6V4,
+} dns_addr_type_t;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint8 trans_id;
+    kal_uint32 sbp_id;
+    kal_char mcc[MAX_MCC_STR_LEN];
+    kal_char mnc[MAX_MNC_STR_LEN];
+    wo_cfg_t cfg;
+} wo_dsbp_reconfigure_ind_struct;
+
+kal_bool custom_wo_cfg_get(wo_cfg_t *cfg, kal_uint8 sim_id, kal_uint32 sbp_id,
+                           const kal_char *mcc, const kal_char *mnc);
+
+#endif // __CUSTOM_WO_CONFIG_H__
+
diff --git a/mcu/custom/protocol/common/ps/custom_xcap_config.c b/mcu/custom/protocol/common/ps/custom_xcap_config.c
new file mode 100644
index 0000000..9492e6f
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_xcap_config.c
@@ -0,0 +1,2303 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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).
+*
+*****************************************************************************/
+#ifdef __XCAP_SUPPORT__
+#include "custom_xcap_config.h"
+#include "kal_trace.h"
+#include "rmmi_common_enum.h"
+#include "custom_usir_config.h"
+
+#if defined(__SENSITIVE_DATA_MOSAIC__) && defined(__MTK_TARGET__)
+kal_int8 xcap_sensitive_buffer[XCAP_SENSITIVE_BUFFER_SIZE]={0};
+kal_int8 *get_xcap_sensetive_bufffer() { return xcap_sensitive_buffer; }
+#endif
+
+#define streq(s, t) (strcmp(s, t) == 0)
+#define update_str(s, t) { \
+    kal_int32 n; \
+    kal_mem_set(s, 0, sizeof(s)); \
+    n = kal_snprintf((kal_char *)s, sizeof(s), "%s", t); \
+    if (n < 0 || n > sizeof(s)) { \
+        strcpy(s, "err"); \
+    } \
+}
+
+kal_bool xcap_cfg_reset_to_default(xcap_cfg_t *cfg)
+{
+
+    xcap_info_t *xcap_default_info;
+    gba_info_t  *gba_default_info;
+    cm_info_t   *cm_default_info;
+    http_info_t *http_default_info;
+    sim_info_t  *sim_default_info;
+    kal_uint8   i;
+
+    if (!cfg) {
+        return KAL_FALSE;
+    }
+
+    kal_mem_set(cfg, 0, sizeof(xcap_cfg_t));
+
+    /* XCAP default configuration */
+    xcap_default_info = &(cfg->xcap_info);
+    update_str(xcap_default_info->xcap_url, XCAP_INFO_DEFAULT_XCAP_URL);
+    update_str(xcap_default_info->xcap_protocol, XCAP_INFO_DEFAULT_XCAP_PROTOCOL);
+    xcap_default_info->xcap_port = XCAP_INFO_DEFAULT_XCAP_PORT;
+    update_str(xcap_default_info->auid, XCAP_INFO_DEFAULT_AUID);
+    xcap_default_info->url_encoding = XCAP_INFO_DEFAULT_URL_ENCODING;
+    xcap_default_info->media_type = XCAP_INFO_DEFAULT_MEDIA_TYPE;
+    update_str(xcap_default_info->phone_context, XCAP_INFO_DEFAULT_PHONE_CONTEXT);
+    update_str(xcap_default_info->digest_id, XCAP_INFO_DEFAULT_DIGEST_ID);
+    update_str(xcap_default_info->digest_pwd, XCAP_INFO_DEFAULT_DIGEST_PWD);
+    xcap_default_info->xcap_retry_times = XCAP_INFO_DEFAULT_XCAP_RETRY_TIMES;
+    xcap_default_info->xcap_connection_timeout = XCAP_INFO_DEFAULT_XCAP_CONNECTION_TIMEOUT;
+    xcap_default_info->support_media_tag = XCAP_INFO_DEFAULT_SUPPORT_MEDIA_TAG;
+    xcap_default_info->support_cfnl = XCAP_INFO_DEFAULT_SUPPORT_CFNL;
+    xcap_default_info->cache_level = XCAP_INFO_DEFAULT_CACHE_LEVEL;
+    xcap_default_info->support_put_cf_root = XCAP_INFO_DEFAULT_SUPPORT_PUT_CF_ROOT;
+    xcap_default_info->timer_inside_cfnry = XCAP_INFO_DEFAULT_TIMER_INSIDE_CFNRY;
+    xcap_default_info->support_clir_root = XCAP_INFO_DEFAULT_SUPPORT_PUT_CLIR_ROOT;
+    xcap_default_info->attribute_need_quotation_mark = XCAP_INFO_DEFAULT_ATTRIBUTE_NEED_QUOTATION_MARK;
+    xcap_default_info->set_cfnrc_with_cfnl= XCAP_INFO_DEFAULT_SET_CFNRC_WITH_CFNL;
+    xcap_default_info->forwarding_number_use_sip_uri = XCAP_INFO_DEFAULT_FORWARDING_NUMBER_USE_SIP_URI;
+    xcap_default_info->support_cb_no_action_allow = XCAP_INFO_DEFAULT_SUPPORT_CB_NO_ACTION_ALLOW;
+    xcap_default_info->use_first_xui_element = XCAP_INFO_DEFAULT_USE_FIRST_XUI_ELEMENT;
+    xcap_default_info->use_saved_xui = XCAP_INFO_DEFAULT_USE_SAVED_XUI;
+    update_str(xcap_default_info->ruleid_cfu, XCAP_INFO_DEFAULT_RULEID_CFU);
+    update_str(xcap_default_info->ruleid_cfb, XCAP_INFO_DEFAULT_RULEID_CFB);
+    update_str(xcap_default_info->ruleid_cfnry, XCAP_INFO_DEFAULT_RULEID_CFNRY);
+    update_str(xcap_default_info->ruleid_cfnrc, XCAP_INFO_DEFAULT_RULEID_CFNRC);
+    update_str(xcap_default_info->ruleid_cfnl, XCAP_INFO_DEFAULT_RULEID_CFNL);
+    update_str(xcap_default_info->ruleid_baoc, XCAP_INFO_DEFAULT_RULEID_BAOC);
+    update_str(xcap_default_info->ruleid_baoic, XCAP_INFO_DEFAULT_RULEID_BAOIC);
+    update_str(xcap_default_info->ruleid_baoicxh, XCAP_INFO_DEFAULT_RULEID_BAOICXH);
+    update_str(xcap_default_info->ruleid_baic, XCAP_INFO_DEFAULT_RULEID_BAIC);
+    update_str(xcap_default_info->ruleid_baicr, XCAP_INFO_DEFAULT_RULEID_BAICR);
+	update_str(xcap_default_info->ruleid_baica, XCAP_INFO_DEFAULT_RULEID_BAICA);
+    xcap_default_info->remove_invalid_actions = XCAP_INFO_DEFAULT_REMOVE_INVALID_ACTIONS;
+    xcap_default_info->support_adding_no_reply_timer = XCAP_INFO_DEFAULT_SUPPORT_ADDING_NO_REPLY_TIMER;
+    xcap_default_info->support_adding_unprovisioned_rule = XCAP_INFO_DEFAULT_SUPPORT_ADDING_UNPROVISIONED_RULE;
+    xcap_default_info->exclusive_cb = XCAP_INFO_DEFAULT_EXCLUSIVE_CB;
+    xcap_default_info->support_put_cw_root = XCAP_INFO_DEFAULT_SUPPORT_PUT_CW_ROOT;
+    xcap_default_info->enable_custom_user_agent_string = XCAP_INFO_DEFAULT_ENABLE_CUSTOM_UA_STR;
+    update_str(xcap_default_info->user_agent_prefix, XCAP_INFO_DEFAULT_USER_AGENT_PREFIX);
+    update_str(xcap_default_info->user_agent_model, XCAP_INFO_DEFAULT_USER_AGENT_MODEL);
+    update_str(xcap_default_info->user_agent_default, XCAP_INFO_DEFAULT_USER_AGENT_DEFAULT);
+    xcap_default_info->support_xcap_enhance = XCAP_INFO_DEFAULT_SUPPORT_XCAP_ENHANCE;
+	xcap_default_info->total_exe_time = XCAP_INFO_DEFAULT_TOTAL_EXE_TIME;
+	xcap_default_info->need_check_isim_info = XCAP_INFO_DEFAULT_NEED_CHECK_ISIM_INFO;
+	xcap_default_info->support_adding_namespace = XCAP_INFO_DEFAULT_SUPPORT_ADDING_NAMESPACE;
+	xcap_default_info->support_baica = XCAP_INFO_DEFAULT_SUPPORT_BAICA;
+	xcap_default_info->support_send_dereg_after_put = XCAP_INFO_DEFAULT_SUPPORT_SEND_DEREG_AFTER_PUT;
+	xcap_default_info->support_rule_level_setting = XCAP_INFO_DEFAULT_SUPPORT_RULE_LEVEL_SETTING;
+	xcap_default_info->support_query_simservs = XCAP_INFO_DEFAULT_SUPPORT_QUERY_SIMSERVS;
+	xcap_default_info->support_enable_by_cond = XCAP_INFO_DEFAULT_SUPPORT_ENABLE_BY_COND;
+	xcap_default_info->support_disable_by_cond = XCAP_INFO_DEFAULT_SUPPORT_DISABLE_BY_COND;
+    xcap_default_info->support_isim = XCAP_INFO_DEFAULT_SUPPORT_ISIM;
+    xcap_default_info->remove_media_when_not_support_media = XCAP_INFO_DEFAULT_REMOVE_MEDIA_WHEN_NOT_SUPPORT_MEDIA;
+	xcap_default_info->support_xcap_diff = XCAP_INFO_DEFAULT_SUPPORT_XCAP_DIFF;
+	xcap_default_info->remove_url_simservs_prefix = XCAP_INFO_DEFAULT_REMOVE_URL_SIMSERVS_PREFIX;
+	xcap_default_info->empty_condition_tag_format = XCAP_INFO_DEFAULT_EMPTY_CONTIDION_TAG_FORMAT;
+    xcap_default_info->ccfc_service_class = XCAP_INFO_DEFAULT_CCFC_SERVICE_CLASS;
+    xcap_default_info->remove_node_namespace = XCAP_INFO_DEFAULT_REMOVE_NODE_NAMESPACE;
+    xcap_default_info->support_if_match_header = XCAP_INFO_DEFAULT_SUPPORT_IF_MATCH_HEADER;
+    xcap_default_info->support_put_cf_root_rules = XCAP_SUPPORT_PUT_CF_ROOT_RULES_ALL_CF_CONDITIONAL_CF;
+
+    /* GBA default configuration */
+    gba_default_info = &(cfg->gba_info);
+    update_str(gba_default_info->gba_url, GBA_INFO_DEFAULT_GBA_URL);
+    update_str(gba_default_info->gba_protocol, GBA_INFO_DEFAULT_GBA_PROTOCOL);
+    gba_default_info->gba_port = GBA_INFO_DEFAULT_GBA_PORT;
+    update_str(gba_default_info->gba_type, GBA_INFO_DEFAULT_GBA_TYPE);
+    update_str(gba_default_info->imei_header, GBA_INFO_DEFAULT_IMEI_HEADER);
+    update_str(gba_default_info->gba_url_path, GBA_INFO_DEFAULT_GBA_URL_PATH);
+    update_str(gba_default_info->gba_realm, GBA_INFO_DEFAULT_GBA_REALM);
+	update_str(gba_default_info->gba_user_agent, GBA_INFO_DEFAULT_GBA_USER_AGENT);
+    gba_default_info->gba_retry_times = GBA_INFO_DEFAULT_GBA_RETRY_TIMES;
+    gba_default_info->gba_connection_timeout = GBA_INFO_DEFAULT_GBA_CONNECTION_TIMEOUT;
+    gba_default_info->enable_tmpi_header = GBA_INFO_DEFAULT_ENABLE_TMPI_HEADER;
+    gba_default_info->supportTMPIasUserName = GBA_INFO_DEFAULT_SUPPORT_TMPI_AS_USERNAME;
+    gba_default_info->gba_delay_ua_send_packet = GBA_INFO_DEFAULT_GBA_DELAY_UA_SEND_PACKET;
+
+    /* CM default configuration */
+    cm_default_info = &(cfg->cm_info);
+    cm_default_info->apn_selection_rule = CM_INFO_DEFAULT_APN_SELECTION_RULE;
+    cm_default_info->pdn_releasing_timer = CM_INFO_DEFAULT_PDN_RELEASING_TIMER;   // seconds
+    cm_default_info->pdn_wait_ps_reg_time = CM_INFO_DEFAULT_PDN_WAIT_PS_REG_TIME;  // seconds
+    cm_default_info->accept_network_act_pdn = CM_INFO_DEFAULT_ACCEPT_NW_ACT_PDN;
+    cm_default_info->accept_public_wifi = CM_INFO_DEFAULT_ACCEPT_PUBLIC_WIFI;
+    cm_default_info->pdn_retry_times =  CM_INFO_DEFAULT_PDN_RETRY_TIMES;
+    cm_default_info->support_empty_pdn_establishment = CM_INFO_DEFAULT_SUPPORT_EMPTY_PDN_ESTABLISHMENT;
+    for (i = 0; i < PDN_REJECT_CODE_SIZE; i++)
+        cm_default_info->pdn_reject_code[i] = CM_INFO_DEFAULT_PDN_REJECT_CODE;
+
+    /* HTTP default configuration */
+    http_default_info = &(cfg->http_info);
+    http_default_info->support_gzip = HTTP_INFO_DEFAULT_SUPPROT_GZIP;
+    http_default_info->support_always_trust_ssl = HTTP_INFO_DEFAULT_SUPPORT_ALWAYS_TRUST_SSL;
+    http_default_info->dns_server_ipv4v6_priority = HTTP_INFO_DEFAULT_DNS_SERVER_IPV4V6_PRIORITY;
+    http_default_info->tcp_session_keep_alive = HTTP_INFO_DEFAULT_TCP_SESSION_KEEP_ALIVE;
+    http_default_info->naptr_srv_level = HTTP_INFO_DEFAULT_NAPTR_SRV_LEVEL;
+    http_default_info->hide_port_number = HTTP_INFO_DEFAULT_HIDE_PORT_NUMBER;
+    http_default_info->dns_failover = HTTP_INFO_DEFAULT_DNS_FAILOVER;
+	http_default_info->xcap_dns_default_ttl = HTTP_INFO_DEFAULT_XCAP_DNS_DEFAULT_TTL;
+
+    /* SIM default configuration */
+    sim_default_info = &(cfg->sim_info);
+    update_str(sim_default_info->saved_imsi, SIM_INFO_DEFAULT_SAVED_IMSI);
+    update_str(sim_default_info->saved_xui, SIM_INFO_DEFAULT_SAVED_XUI);
+    update_str(sim_default_info->saved_impi, SIM_INFO_DEFAULT_SAVED_IMPI);
+    update_str(sim_default_info->saved_tmpi, SIM_INFO_DEFAULT_SAVED_TMPI);
+
+    return KAL_TRUE;
+}
+
+kal_bool custom_xcap_cfg_get(xcap_cfg_t *cfg, kal_uint32 sbp_id,const kal_char *mcc, const kal_char *mnc)
+{
+    if (!cfg) {
+        return KAL_FALSE;
+    }
+
+    switch (sbp_id)
+    {
+        case 0: /* Default values */
+        {
+            break;
+        }
+        case 1: /* CMCC China */
+        {
+            update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc000.mcc460.pub.3gppnetwork.org");
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            cfg->gba_info.gba_port = 8080;
+			cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+			cfg->xcap_info.remove_media_when_not_support_media = XCAP_ENABLED;
+            break;
+        }
+        case 2: /* CU  China */
+        {
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            cfg->gba_info.gba_port = 8080;			
+			cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+			cfg->xcap_info.remove_media_when_not_support_media = XCAP_ENABLED;
+            cfg->http_info.dns_server_ipv4v6_priority = DNS_SERVER_IPV4_FIRST;
+            cfg->cm_info.pdn_releasing_timer = 20;  //to fix ALPS05265643
+            break;
+        }
+        case 3: /* Orange*/
+        {
+            if (streq(mcc, "604")){/*Morocco*/
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+                cfg->gba_info.gba_port = 8080;
+                update_str(cfg->gba_info.gba_url,"bsf.ims.mnc000.mcc604.pub.3gppnetwork.org");
+                update_str(cfg->xcap_info.auid, "mtasxdms/simservs.ngn.etsi.org");
+            }
+            else if (streq(mcc, "208")){/* France */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+                cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                cfg->xcap_info.support_disable_by_cond = XCAP_ENABLED;
+                cfg->cm_info.pdn_releasing_timer = 15;
+                cfg->cm_info.apn_selection_rule = XCAP_CM_APN_SELECTION_RULE_PREFER_CELLULAR_XCAP;
+            }
+            else if (streq(mcc, "605")){/*Tunisia*/
+                cfg->xcap_info.xcap_port = 8090;
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            }
+            break;
+        }
+        case 5: /* TMOEU */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+
+            if (streq(mcc, "232")){ /* DTAG - Austria */
+                cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+            }
+            else {
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+                cfg->xcap_info.enable_custom_user_agent_string = XCAP_ENABLED;
+                cfg->cm_info.apn_selection_rule = XCAP_CM_APN_SELECTION_RULE_XCAP_ONLY;
+                if (streq(mcc, "204")){ /* DTAG - NL */
+                    cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                } else if (streq(mcc, "230")){ /* DTAG - CZ */
+                    cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                    cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                } else if (streq(mcc, "262")){ /* DTAG - DE */
+                    cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                    cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                    cfg->xcap_info.xcap_connection_timeout = 40;
+                } else if (streq(mcc, "216")){ /* DTAG - HU */
+                    cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                    cfg->http_info.tcp_session_keep_alive = XCAP_DISABLED;
+                } else if (streq(mcc, "260")){ /* DTAG - PL */
+                    cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                    cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+                    cfg->cm_info.pdn_releasing_timer = 10;
+                } else if (streq(mcc, "276")){ /* DTAG - Albania */
+                    cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+                    cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                    cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                }
+            }
+            break;
+        }
+        case 6: /* Vodafone */
+        {
+            cfg->cm_info.accept_public_wifi = XCAP_ENABLED;
+            if (streq(mcc, "262")){ /* VDF-DE */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+            } else if (streq(mcc, "234")){ /* VDF-UK */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.set_cfnrc_with_cfnl = XCAP_ENABLED;
+                cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+                cfg->cm_info.apn_selection_rule = XCAP_CM_APN_SELECTION_RULE_XCAP_ONLY;
+            } else if (streq(mcc, "214")){ /* VDF-ES */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            } else if (streq(mcc, "268")){ /* VDF-PT */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+            } else if (streq(mcc, "230")){ /* VDF-CZ */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+                cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+                cfg->xcap_info.support_cb_no_action_allow = XCAP_ENABLED;
+            } else if (streq(mcc, "530")){ /* VDF-NZ */
+                update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc001.mcc530.pub.3gppnetwork.org");
+                update_str(cfg->gba_info.gba_url,   "bsf.mnc001.mcc530.pub.3gppnetwork.org");
+                cfg->xcap_info.xcap_port = 443;
+                cfg->gba_info.gba_port = 443;
+                update_str(cfg->xcap_info.xcap_protocol, "https");
+                update_str(cfg->gba_info.gba_protocol, "https");
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+                cfg->xcap_info.media_type = MEDIA_TYPE_ONLY_AUDIO;
+            } else if (streq(mcc, "216")){ /* VDF-Hungary */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.set_cfnrc_with_cfnl = XCAP_ENABLED;
+                cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            } else if (streq(mcc, "602")){ /* VDF-Egypt */
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc002.mcc602.pub.3gppnetwork.org");
+                cfg->xcap_info.remove_invalid_actions = XCAP_ENABLED;
+                cfg->xcap_info.set_cfnrc_with_cfnl = XCAP_ENABLED;
+            } else if (streq(mcc, "226")){ /* VDF-Romania */
+                cfg->xcap_info.media_type = MEDIA_TYPE_SEPERATE;
+                cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+                cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                cfg->xcap_info.use_saved_xui = XCAP_ENABLED;
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+                cfg->gba_info.gba_retry_times = 3;
+            } else if (streq(mcc, "276")){ /* VDF-Albania */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+            }
+            else if (streq(mcc, "222")){ /* VDF-IT */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.set_cfnrc_with_cfnl = XCAP_ENABLED;
+                cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+            } else if (streq(mcc, "202")){ /* VDF -Greece */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.set_cfnrc_with_cfnl = XCAP_ENABLED;
+                cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc005.mcc202.pub.3gppnetwork.org");
+            } else if (streq(mcc, "204")){ /* VDF-NL */
+                cfg->xcap_info.support_clir_root = XCAP_DISABLED;
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.xcap_port = 8080;
+                cfg->gba_info.gba_port = 10080;
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+                cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                cfg->gba_info.gba_delay_ua_send_packet = 200; /* 200 ms */
+            } else if (streq(mcc, "286")){ /* VDF-Turkey */
+                update_str(cfg->xcap_info.xcap_protocol, "https");
+                cfg->xcap_info.xcap_port = 443;
+            } else if (streq(mcc, "655")){ /* VDF-ZA */
+                cfg->xcap_info.xcap_port = 8090;
+                update_str(cfg->xcap_info.auid, "MyService/simservs.ngn.etsi.org");
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NONE;
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            } else if (streq(mcc, "272")){ /* VDF-Ireland */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                update_str(cfg->xcap_info.xcap_protocol, "https");
+                update_str(cfg->gba_info.gba_protocol, "https");
+            } else if (streq(mcc, "280")){ /* VDF-Cyprus */
+                update_str(cfg->gba_info.gba_url,   "bsf.ims.mnc001.mcc280.pub.3gppnetwork.org");
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+            } else if (streq(mcc, "422")){ /* VDF-Oman */
+                update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc006.mcc422.pub.3gppnetwork.org");
+                update_str(cfg->gba_info.gba_url, "bsf.mnc006.mcc422.pub.3gppnetwork.org");
+            }
+            /* The following countries may not support UT interface and not in DSBP list yet, keep it just for sync with Gen93 and legacy platform */
+            else if (streq(mcc, "274") || /* VDF-Iceland */
+                     streq(mcc, "278")){  /* VDF-Malta  */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.set_cfnrc_with_cfnl = XCAP_ENABLED;
+                cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+            } else if (streq(mcc, "427")){ /* VDF-Qatar */
+                update_str(cfg->gba_info.gba_url,"bsf.ims.mnc002.mcc427.pub.3gppnetwork.org");
+                update_str(cfg->xcap_info.auid, "MyService/simservs.ngn.etsi.org");
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+            }else if (streq(mcc, "640")){ /*VDF-Tanzania*/
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc004.mcc640.pub.3gppnetwork.org");
+                cfg->xcap_info.support_isim = XCAP_DISABLED;
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NONE;
+            }
+            break;
+        }
+        case 7: /* AT&T */
+        case 145: /* AT&T US Cricket */
+        case 196: /* AT&T US FirstNet */
+        {
+            /* Default US */
+            if (streq(mcc, "334")){ /* AT&T Mexico */
+                update_str(cfg->xcap_info.xcap_url, "xcap.ims.attmex.mx");
+                update_str(cfg->xcap_info.xcap_protocol, "https");
+                update_str(cfg->gba_info.gba_url, "bsf.ims.attmex.mx");
+                update_str(cfg->gba_info.gba_protocol, "https");
+                cfg->gba_info.gba_port = 8443;
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+            } else { /* US */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.set_cfnrc_with_cfnl = XCAP_ENABLED;
+                cfg->xcap_info.use_first_xui_element = XCAP_ENABLED;
+                cfg->xcap_info.use_saved_xui = XCAP_ENABLED;
+				cfg->xcap_info.support_disable_by_cond = XCAP_ENABLED;
+            }
+            break;
+        }
+        case 8: /* TMO US */
+        {
+            cfg->xcap_info.enable_custom_user_agent_string = XCAP_ENABLED;
+            update_str(cfg->xcap_info.user_agent_prefix, "T-Mobile VoLTE-RCS-ePDG-IR94-RTT-ussd");
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            cfg->cm_info.apn_selection_rule = XCAP_CM_APN_SELECTION_RULE_DEFAULT_ONLY;
+            cfg->cm_info.accept_public_wifi = XCAP_ENABLED;
+            cfg->cm_info.support_empty_pdn_establishment = XCAP_DISABLED;
+            if (streq(mnc, "210")) {
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                update_str(cfg->gba_info.imei_header, "X-TMUS-IMEI");
+                update_str(cfg->xcap_info.xcap_url, "xcap.msg.lab.t-mobile.com");
+                update_str(cfg->gba_info.gba_url, "bsf.msg.lab.t-mobile.com");
+                cfg->gba_info.gba_port = 8080;
+            } else if (streq(mnc, "332")) {
+                update_str(cfg->xcap_info.xcap_url, "xcap.ims1.iot-dallas.nsn-rdnet.net");
+                cfg->xcap_info.xcap_port = 8090;
+            } else {
+                if (streq(mnc, "260")) {
+                    cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_ENABLED;
+                    cfg->cm_info.apn_selection_rule = XCAP_CM_APN_SELECTION_RULE_DEFAULT_THEN_XCAP;
+                }
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                update_str(cfg->gba_info.imei_header, "X-TMUS-IMEI");
+                update_str(cfg->xcap_info.xcap_protocol, "https");
+                update_str(cfg->gba_info.gba_protocol, "https");
+                cfg->http_info.support_gzip = XCAP_ENABLED;
+            }
+            break;
+        }
+        case 9: /* CT  China */
+        {
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            cfg->gba_info.gba_port = 8080;
+			cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.remove_media_when_not_support_media = XCAP_ENABLED;
+            break;
+        }
+        case 11: /* H3G */
+        {
+            if (streq(mcc, "234")||
+                streq(mcc, "235")){ /* UK */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->cm_info.apn_selection_rule = XCAP_CM_APN_SELECTION_RULE_PREFER_CELLULAR_XCAP;
+            }
+            else if (streq(mcc,"238")) { /* Denmark */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            }
+            else if (streq(mcc,"240")) { /* Sweden */
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+                cfg->xcap_info.support_adding_no_reply_timer = XCAP_ENABLED;
+            }
+            else if (streq(mcc,"232")) { /* Austria */
+                cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                update_str(cfg->xcap_info.ruleid_cfu, "cfu");
+                update_str(cfg->xcap_info.ruleid_cfb, "cfb");
+                update_str(cfg->xcap_info.ruleid_cfnrc, "cfnrc");
+                update_str(cfg->xcap_info.ruleid_cfnry, "cfnr");
+                update_str(cfg->xcap_info.ruleid_cfnl, "cfnl");
+                if (streq(mnc,"05")) {
+                    update_str(cfg->gba_info.gba_url, "bsf.ims.mnc005.mcc232.pub.3gppnetwork.org");
+                }
+                else if (streq(mnc,"10")) {
+                    update_str(cfg->gba_info.gba_url, "bsf.ims.mnc010.mcc232.pub.3gppnetwork.org");
+                }
+                else if (streq(mnc,"14")) {
+                    update_str(cfg->gba_info.gba_url, "bsf.ims.mnc014.mcc232.pub.3gppnetwork.org");
+                }
+            }
+            else if (streq(mcc, "272")){ /* Ireland */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                update_str(cfg->xcap_info.xcap_protocol, "https");
+                update_str(cfg->gba_info.gba_protocol, "https");
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc005.mcc272.pub.3gppnetwork.org");
+            }
+            break;
+        }
+        case 15: /* Telefonica */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            if (streq(mcc, "234")){ /* UK */
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->cm_info.pdn_releasing_timer = 10;
+                cfg->gba_info.gba_retry_times = 3;
+            } else if (streq(mcc, "262")){ /* O2 Germany */
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_ENABLED;
+            } else if (streq(mcc, "214")){ /* Spain */
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+                cfg->xcap_info.xcap_port = 8089;
+                cfg->gba_info.gba_port = 8088;
+                cfg->xcap_info.support_adding_no_reply_timer = XCAP_ENABLED;
+                cfg->xcap_info.support_media_tag = XCAP_ENABLED;
+                cfg->xcap_info.media_type = MEDIA_TYPE_SEPERATE;
+                if (streq(mnc, "05")) {
+                    cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+                } else if (streq(mnc, "07")) {
+                    cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+                }
+            }
+            break;
+        }
+        case 16: /* EE UK */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_adding_no_reply_timer = XCAP_ENABLED;
+            cfg->cm_info.pdn_releasing_timer = 240;
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            cfg->xcap_info.need_check_isim_info = XCAP_ENABLED;
+            cfg->xcap_info.ccfc_service_class = XCAP_CCFC_SERVICE_CLASS_VOICE;
+            break;
+        }
+        case 18: /* RJIO India */
+        {
+            cfg->xcap_info.media_type =  MEDIA_TYPE_SEPERATE;
+            cfg->xcap_info.xcap_port = 7077;
+            cfg->gba_info.gba_port = 7080;
+            cfg->xcap_info.use_saved_xui = XCAP_ENABLED;
+			cfg->xcap_info.support_adding_no_reply_timer = XCAP_ENABLED;
+            cfg->http_info.tcp_session_keep_alive = XCAP_DISABLED;
+            cfg->xcap_info.support_put_cw_root = XCAP_ENABLED;
+			cfg->xcap_info.enable_custom_user_agent_string = XCAP_ENABLED;
+			update_str(cfg->xcap_info.user_agent_default, "");
+            if (streq(mnc, "872") && streq(mcc, "405"))
+            {
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc872.mcc405.pub.3gppnetwork.org");
+            }
+            cfg->http_info.naptr_srv_level =  XCAP_NAPTR_SRV_LEVEL_NAPTR;
+            break;
+        }
+        case 19: /* Telstra */
+        {
+            cfg->xcap_info.support_media_tag =  XCAP_DISABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+			cfg->cm_info.pdn_reject_code[0] = ESM_REQ_SERVICE_NOT_SUBSCRIBED;
+            cfg->gba_info.enable_tmpi_header = XCAP_ENABLED;
+            cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+            cfg->cm_info.apn_selection_rule = XCAP_CM_APN_SELECTION_RULE_XCAP_ONLY;
+            break;
+        }
+		case 20: /* Sprint US*/
+        {
+            cfg->xcap_info.support_query_simservs = XCAP_ENABLED;
+			cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+			update_str(cfg->gba_info.gba_type, "GBA_ME");
+			update_str(cfg->xcap_info.xcap_url, "xcap.imcns.spcsdns.net");
+			cfg->xcap_info.xcap_port = 443;
+            update_str(cfg->gba_info.gba_url, "bsf.imcns.spcsdns.net");
+			cfg->gba_info.gba_port = 443;
+			update_str(cfg->xcap_info.ruleid_cfu, "cfu");
+			update_str(cfg->xcap_info.ruleid_cfb, "cfb");
+			update_str(cfg->xcap_info.ruleid_cfnrc, "cfnrc");
+			update_str(cfg->xcap_info.ruleid_cfnry, "cfnr");
+			update_str(cfg->xcap_info.xcap_protocol, "https");
+			update_str(cfg->gba_info.gba_protocol, "https");
+            break;
+        }
+        case 21: /* DISH US*/
+        {
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc340.mcc313.pub.3gppnetwork.org");
+			update_str(cfg->gba_info.gba_type, "GBA_ME");
+            update_str(cfg->xcap_info.ruleid_cfu, "call-diversion-unconditional");
+			break;
+        }
+        case 50: /* Softbank */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            update_str(cfg->xcap_info.ruleid_cfu,     "call-diversion-unconditional");
+            update_str(cfg->xcap_info.ruleid_cfb,     "call-diversion-busy");
+            update_str(cfg->xcap_info.ruleid_cfnry,   "call-diversion-no-reply");
+            update_str(cfg->xcap_info.ruleid_cfnrc,   "call-diversion-not-reachable");
+            update_str(cfg->xcap_info.ruleid_cfnl,    "call-diversion-not-logged-in");
+            update_str(cfg->xcap_info.ruleid_baoc,    "call-barring-all-outgoing");
+            update_str(cfg->xcap_info.ruleid_baoic,   "call-barring-outgoing-international");
+            update_str(cfg->xcap_info.ruleid_baoicxh, "call-barring-outgoing-internationalExHC");
+            update_str(cfg->xcap_info.ruleid_baic,    "call-barring-all-incoming");
+            update_str(cfg->xcap_info.ruleid_baicr,   "call-barring-incoming-in-roaming");
+            update_str(cfg->xcap_info.xcap_protocol, "https");
+            cfg->gba_info.gba_port = 8088;
+            cfg->xcap_info.exclusive_cb = XCAP_ENABLED;
+            cfg->xcap_info.support_put_cw_root = XCAP_ENABLED;
+            cfg->xcap_info.support_query_simservs = XCAP_ENABLED;
+            cfg->xcap_info.support_rule_level_setting= XCAP_ENABLED;
+            cfg->xcap_info.support_disable_by_cond = XCAP_ENABLED;
+            cfg->xcap_info.support_enable_by_cond= XCAP_ENABLED;
+            cfg->gba_info.enable_tmpi_header = XCAP_ENABLED;
+            cfg->xcap_info.remove_url_simservs_prefix = XCAP_ENABLED;
+            cfg->xcap_info.empty_condition_tag_format = XCAP_DISABLED;
+            cfg->xcap_info.support_adding_namespace = XCAP_DISABLED;
+			cfg->xcap_info.remove_node_namespace = XCAP_ENABLED;
+            update_str(cfg->xcap_info.user_agent_default, "XCAP Client;");
+			update_str(cfg->gba_info.gba_user_agent, "Bootstrapping Client Agent;");
+			cfg->http_info.xcap_dns_default_ttl = 0;
+			cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+            break;
+        }
+        case 100: /* CSL - Hongkong */
+        {
+            cfg->xcap_info.xcap_port = 8080;
+            break;
+        }
+        case 102: /* SMT - Hongkong */
+        {
+            cfg->xcap_info.xcap_port = 8090;
+            cfg->xcap_info.support_disable_by_cond = XCAP_ENABLED;
+            cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            update_str(cfg->xcap_info.auid, "mtasxdms/simservs.ngn.etsi.org");
+            break;
+        }
+        case 103: /* SingTel Singapore */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.timer_inside_cfnry = XCAP_ENABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.attribute_need_quotation_mark = XCAP_ENABLED;
+            cfg->xcap_info.xcap_port = 8080;	
+            if (streq(mnc, "01")) {
+                update_str(cfg->xcap_info.phone_context, "ims.mnc001.mcc525.3gppnetwork.org");		
+				update_str(cfg->gba_info.gba_url, "bsf.ims.mnc001.mcc525.pub.3gppnetwork.org");				
+				update_str(cfg->gba_info.gba_type, "GBA_ME");
+				cfg->gba_info.gba_port = 8081;
+            } else if (streq(mnc, "02")) {         
+			    update_str(cfg->xcap_info.digest_pwd, "0000");
+                update_str(cfg->xcap_info.phone_context, "ims.mnc002.mcc525.3gppnetwork.org");
+            } else if (streq(mnc, "07")) {           
+			    update_str(cfg->xcap_info.digest_pwd, "0000");
+                update_str(cfg->xcap_info.phone_context, "ims.mnc007.mcc525.3gppnetwork.org");
+            }
+            break;
+        }
+        case 104: /* SingTel Starhub */
+        {
+            cfg->xcap_info.xcap_port = 8090;
+            break;
+        }
+        case 106: /* 3HK - Hongkong */
+        {
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc003.mcc454.pub.3gppnetwork.org");
+            break;
+        }
+		case 107: /* SFR France */
+		{
+			cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+			break;
+		}
+        case 108: /* TWN Taiwan */
+        {
+            cfg->xcap_info.xcap_port = 8090;
+            break;
+        }
+        case 109: /* CHT Taiwan */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.remove_invalid_actions = XCAP_ENABLED;
+            cfg->xcap_info.attribute_need_quotation_mark = XCAP_ENABLED;
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc092.mcc466.pub.3gppnetwork.org");
+            cfg->gba_info.gba_port = 8088;
+            cfg->cm_info.apn_selection_rule = XCAP_CM_APN_SELECTION_RULE_XCAP_ONLY;
+            break;
+        }
+        case 112: /* TelCel  */
+        {
+            if (streq(mcc, "334")){ /* Mexico */
+                update_str(cfg->xcap_info.ruleid_cfu, "cfu");
+                update_str(cfg->xcap_info.ruleid_cfb, "cfb");
+                update_str(cfg->xcap_info.ruleid_cfnrc, "cfnrc");
+                update_str(cfg->xcap_info.ruleid_cfnry, "cfnr");
+                update_str(cfg->xcap_info.ruleid_cfnl, "cfnl");
+                update_str(cfg->xcap_info.ruleid_baoc, "baoc");
+                update_str(cfg->xcap_info.ruleid_baoic, "boic");
+                update_str(cfg->xcap_info.ruleid_baoicxh, "boic-exHC");
+                update_str(cfg->xcap_info.ruleid_baic, "baic");
+                update_str(cfg->xcap_info.ruleid_baicr, "bicro");
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc020.mcc334.pub.3gppnetwork.org");
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+                cfg->xcap_info.media_type = MEDIA_TYPE_ONLY_AUDIO;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            }
+            break;
+        }
+        case 113: /* Beeline */
+        {
+            if (streq(mcc, "250")){/* Russia */
+                cfg->xcap_info.xcap_port = 81;
+                cfg->xcap_info.media_type = MEDIA_TYPE_ONLY_AUDIO;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+                if (streq(mnc, "28")) {
+                    update_str(cfg->gba_info.gba_url, "bsf.mnc028.mcc250.pub.3gppnetwork.org");
+                } else if (streq(mnc, "99")) {
+                    update_str(cfg->gba_info.gba_url, "bsf.mnc099.mcc250.pub.3gppnetwork.org");
+                }
+            }
+            else if (streq(mcc, "401")) {/* Kazakhstan */
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+            }
+            break;
+        }
+        case 117: /* SmartFren Indonesia */
+        {
+            cfg->xcap_info.xcap_port = 7077;
+            update_str(cfg->xcap_info.xcap_url, "nafxjktm001.ims.mnc009.mcc510.pub.3gppnetwork.org");
+            cfg->gba_info.gba_port = 7080;
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc009.mcc510.pub.3gppnetwork.org");
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+            break;
+        }
+        case 118: /* YTL Malaysia */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.set_cfnrc_with_cfnl = XCAP_ENABLED;
+            break;
+        }
+        case 120: /* Claro */
+        {
+            if (streq(mcc, "722")) { //Argentina
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc310.mcc722.pub.3gppnetwork.org");
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+            }else if(streq(mcc, "724")){ //Brazil
+                cfg->gba_info.gba_port = 8080;
+                cfg->xcap_info.xcap_port = 8090;
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+            }else if(streq(mcc, "730")){
+                cfg->gba_info.gba_port = 8080;
+                cfg->xcap_info.xcap_port = 8090;
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+            }else if((streq(mcc, "704")) || //Guatemala
+                     (streq(mcc, "706")) || //Salvador
+                     (streq(mcc, "708")) || //Honduras
+                     (streq(mcc, "710")) || //Nicaragua
+                     (streq(mcc, "712")) || //Costa Rica
+                     (streq(mcc, "714")) )  //Panama
+            {
+               /* 704,706,708,710,712,714 is in same group of Claro, 
+                * if one region is changed, please check whether need sync the changes to other regions
+                */
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+                cfg->xcap_info.xcap_port = 8080;
+                cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            }else if(streq(mcc, "370")){  //Dominican
+                cfg->xcap_info.xcap_port = 8080;
+                cfg->gba_info.gba_port = 8080;
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+                cfg->xcap_info.support_clir_root = XCAP_DISABLED;
+            }else if(streq(mcc, "740")){  //Ecuador
+                cfg->xcap_info.xcap_port = 8080;
+                cfg->gba_info.gba_port = 8080;
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+            }
+            break;
+        }
+        case 121: /* Canada Bell */
+        {
+            update_str(cfg->xcap_info.xcap_protocol, "https");
+            update_str(cfg->xcap_info.xcap_url, "naf.ims.bell.ca");
+            cfg->xcap_info.xcap_port = 443;
+            update_str(cfg->gba_info.gba_protocol, "https");
+            update_str(cfg->gba_info.gba_url, "bsf.ims.bell.ca");
+            cfg->gba_info.gba_port = 443;
+            update_str(cfg->gba_info.gba_realm, "ims.bell.ca");
+            update_str(cfg->xcap_info.auid, "MyService/simservs.ngn.etsi.org");
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+			cfg->xcap_info.support_send_dereg_after_put = XCAP_ENABLED;
+            cfg->gba_info.enable_tmpi_header = XCAP_ENABLED;
+            update_str(cfg->xcap_info.user_agent_default, "");
+            break;
+        }
+        case 122: /* Thailand AIS */
+        {
+            update_str(cfg->xcap_info.xcap_protocol, "https");
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+            break;
+        }
+        case 124: /* APTG Taiwan */
+        {
+            cfg->xcap_info.support_media_tag =  XCAP_DISABLED;
+            break;
+        }
+        case 125: /* Thailand DTAC */
+        {
+            update_str(cfg->xcap_info.xcap_protocol, "https");
+            update_str(cfg->gba_info.gba_protocol, "https");
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc005.mcc520.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+            cfg->xcap_info.media_type = MEDIA_TYPE_ONLY_AUDIO;
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            break;
+        }
+        case 128: /* DNA Finland */
+        {
+            cfg->xcap_info.support_media_tag =  XCAP_DISABLED;
+            cfg->cm_info.pdn_releasing_timer = 15;            
+            break;
+        }
+        case 129: /* KDDI */
+        {
+            cfg->xcap_info.support_baica =  XCAP_ENABLED;
+            cfg->xcap_info.xcap_port = 8090;
+            update_str(cfg->xcap_info.auid, "mtasxdms/simservs.ngn.etsi.org");
+            cfg->xcap_info.set_cfnrc_with_cfnl = XCAP_ENABLED;
+            cfg->xcap_info.support_put_cw_root = XCAP_ENABLED;
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->cm_info.pdn_releasing_timer = 300;
+            cfg->cm_info.apn_selection_rule = XCAP_CM_APN_SELECTION_RULE_XCAP_ONLY;
+            break;
+        }
+        case 130: /* TIM */
+        {
+            if (streq(mcc, "222")){ /*Italy */
+                cfg->xcap_info.support_media_tag =  XCAP_DISABLED;
+                cfg->xcap_info.support_adding_no_reply_timer = XCAP_ENABLED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                update_str(cfg->xcap_info.auid, "mtasxdms/simservs.ngn.etsi.org");
+                cfg->xcap_info.xcap_port = 8080;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+                cfg->xcap_info.support_if_match_header = XCAP_IF_MATCH_LEVEL_SIMSERVS;
+            } else if (streq(mcc, "724")){ /* Tim - BZ */
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+                cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+                update_str(cfg->xcap_info.ruleid_cfu, "CFU");
+                update_str(cfg->xcap_info.ruleid_cfb, "CFB");
+                update_str(cfg->xcap_info.ruleid_cfnry, "CFNR");
+                update_str(cfg->xcap_info.ruleid_cfnrc, "CFNRc");
+                if (streq(mnc, "02")){
+                    update_str(cfg->gba_info.gba_url, "bsf.ims.mnc002.mcc724.pub.3gppnetwork.org");
+                } else if (streq(mnc, "03")){
+                    update_str(cfg->gba_info.gba_url, "bsf.ims.mnc003.mcc724.pub.3gppnetwork.org");
+                } else if (streq(mnc, "04")){
+                    update_str(cfg->gba_info.gba_url, "bsf.ims.mnc004.mcc724.pub.3gppnetwork.org");
+                }
+            }
+            break;
+        }
+        case 131: /* TrueMove */
+        {
+            cfg->xcap_info.media_type = MEDIA_TYPE_VIDEO_WITH_AUDIO;
+            cfg->gba_info.gba_port = 80;
+            cfg->xcap_info.xcap_port = 80;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc004.mcc520.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc004.mcc520.pub.3gppnetwork.org");
+            break;
+        }
+        case 132: /* Movistar */
+        {
+            cfg->xcap_info.xcap_port = 8090;
+            cfg->gba_info.gba_port = 8080;
+            if (streq(mcc, "716")){ /* Movistar - Peru */
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc006.mcc716.pub.3gppnetwork.org");
+				update_str(cfg->xcap_info.ruleid_cfu, "call-diversion-unconditional");
+            } else if (streq(mcc, "724")){ /* Vivo BZ */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.attribute_need_quotation_mark = XCAP_DISABLED;
+                cfg->xcap_info.use_saved_xui = XCAP_ENABLED;
+                if (streq(mnc, "06")){
+                    update_str(cfg->gba_info.gba_url, "bsf.mnc006.mcc724.pub.3gppnetwork.org");
+                } else if (streq(mnc, "10")){
+                    update_str(cfg->gba_info.gba_url, "bsf.mnc010.mcc724.pub.3gppnetwork.org");
+                } else if (streq(mnc, "11")){
+                    update_str(cfg->gba_info.gba_url, "bsf.mnc011.mcc724.pub.3gppnetwork.org");
+                } else if (streq(mnc, "23")){
+                    update_str(cfg->gba_info.gba_url, "bsf.mnc023.mcc724.pub.3gppnetwork.org");
+                }
+            } else if (streq(mcc, "730")){ /* Chile */
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc002.mcc730.pub.3gppnetwork.org");
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                if (streq(mnc, "07")){
+                    update_str(cfg->gba_info.gba_url, "bsf.ims.mnc007.mcc730.pub.3gppnetwork.org");
+                    cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                }
+            } else if (streq(mcc, "732")){ /* Colombia */
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+				update_str(cfg->xcap_info.ruleid_cfu, "cfu");
+                update_str(cfg->xcap_info.ruleid_cfb, "cfb");
+                update_str(cfg->xcap_info.ruleid_cfnry, "cfnr");
+                update_str(cfg->xcap_info.ruleid_cfnrc, "cfnrc");
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            } else if (streq(mcc, "334")){ /* Movistar - Mexico */
+                update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc030.mcc334.pub.3gppnetwork.org");
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc030.mcc334.pub.3gppnetwork.org");
+                cfg->cm_info.apn_selection_rule = XCAP_CM_APN_SELECTION_RULE_DEFAULT_ONLY;
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+				update_str(cfg->xcap_info.ruleid_cfu, "cfu");
+                update_str(cfg->xcap_info.ruleid_cfb, "cfb");
+                update_str(cfg->xcap_info.ruleid_cfnrc, "cfnrc");
+                update_str(cfg->xcap_info.ruleid_cfnry, "cfnr");
+                cfg->xcap_info.total_exe_time = 40;
+            } else if (streq(mcc, "722")){ /* Movistar - Argentina */
+                cfg->cm_info.apn_selection_rule = XCAP_CM_APN_SELECTION_RULE_DEFAULT_ONLY;
+				update_str(cfg->xcap_info.xcap_protocol, "https");
+            }
+            break;
+        }
+        case 134: /* Elisa */
+        {
+            if(streq(mcc, "244")){ /* Finland */
+                update_str(cfg->xcap_info.xcap_url, "ap.ims.mnc005.mcc244.pub.3gppnetwork.org");
+                cfg->xcap_info.xcap_port = 9002;
+                cfg->gba_info.gba_port = 9001;
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            } else if (streq(mcc, "248")){ /* Estonia */
+                cfg->xcap_info.xcap_port = 9002;
+                cfg->gba_info.gba_port = 9001;
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc002.mcc248.pub.3gppnetwork.org");
+            }
+            break;
+        }
+        case 135: /* MTS */
+        {
+            if(streq(mcc, "257")){ /* Belarus */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            }
+            break;
+        }
+        case 136: /* Entel */
+        {
+			if(streq(mcc, "716")){ /* Peru */
+				cfg->gba_info.gba_port = 80;
+				update_str(cfg->gba_info.gba_url, "bsf.mnc017.mcc716.pub.3gppnetwork.org");
+				cfg->cm_info.apn_selection_rule = XCAP_CM_APN_SELECTION_RULE_DEFAULT_ONLY;
+				update_str(cfg->xcap_info.xcap_url, "xcap.mnc017.mcc716.pub.3gppnetwork.org");
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+                cfg->xcap_info.support_adding_namespace = XCAP_DISABLED;
+                cfg->xcap_info.media_type = MEDIA_TYPE_ONLY_AUDIO;
+			}else if (streq(mcc, "730")){ /* Chile */
+				cfg->xcap_info.xcap_port = 8080;
+                cfg->gba_info.gba_port = 10080;
+				update_str(cfg->gba_info.gba_url, "bsf.ims.mnc001.mcc730.pub.3gppnetwork.org");
+            }else if (streq(mcc, "736")){ /* Bolivia */
+                cfg->gba_info.gba_port = 10080;
+				update_str(cfg->xcap_info.auid, "mmtel-service/simservs.ngn.etsi.org");
+			}
+            break;
+        }
+        case 137: /* Tele2 */
+        {
+            if (streq(mcc, "250")){ /* Tele2 */
+                cfg->xcap_info.xcap_port = 8085;
+                cfg->gba_info.gba_port = 8080;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.media_type = MEDIA_TYPE_ONLY_AUDIO;
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc020.mcc250.pub.3gppnetwork.org");
+                update_str(cfg->gba_info.gba_url_path, "/bsf-auth/");
+            } else if (streq(mcc, "204")){/* Tele2 NL*/
+                cfg->xcap_info.media_type = MEDIA_TYPE_ONLY_AUDIO;
+                cfg->xcap_info.support_clir_root = XCAP_DISABLED;
+            } else if (streq(mcc, "246")){/* Lithuania */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+            } else if (streq(mcc, "248")){/* Estonia */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+            }
+            break;
+        }
+        case 139: /* Bouygues */
+        {
+            cfg->xcap_info.xcap_port = 4000;
+            cfg->gba_info.gba_port = 4001;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            break;
+        }
+        case 140: /* MTN South Africa */
+        {
+            if (streq(mcc, "655")){
+                cfg->xcap_info.xcap_port = 8080;
+                cfg->gba_info.gba_port = 8090;
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;  
+            }
+            else if (streq(mcc, "621")){ /* Nigeria */
+                cfg->xcap_info.xcap_port = 8080;
+                cfg->gba_info.gba_port = 8090;  
+                update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc030.mcc621.pub.3gppnetwork.org");
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc030.mcc621.pub.3gppnetwork.org");            
+            }
+			else if (streq(mcc, "620")){ /* Ghana */
+				update_str(cfg->xcap_info.xcap_url, "xcap.mnc001.mcc620.pub.3gppnetwork.org");  
+                update_str(cfg->gba_info.gba_url,"bsf.mnc001.mcc620.pub.3gppnetwork.org"); 
+				cfg->xcap_info.support_media_tag 				 = XCAP_DISABLED; 
+				cfg->xcap_info.forwarding_number_use_sip_uri     = XCAP_ENABLED; 
+                cfg->xcap_info.support_cfnl 					 = XCAP_DISABLED; 
+            }
+            break;
+        }
+        case 146: /* Etisalat */
+        {
+            if (streq(mcc, "424")){ /* Etisalat UAE */
+                cfg->xcap_info.xcap_port = 8080;
+                cfg->gba_info.gba_port = 8088;
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc002.mcc424.pub.3gppnetwork.org");
+                cfg->xcap_info.support_put_cw_root = XCAP_ENABLED;
+            }
+            break;
+        }
+        case 148: /* Seatel - Cambodia */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->gba_info.gba_port = 8080;
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc011.mcc456.pub.3gppnetwork.org");
+            break;
+        }
+        case 149: /* CMHK  */
+        {
+            cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+            cfg->xcap_info.support_adding_no_reply_timer = XCAP_ENABLED;
+            cfg->xcap_info.support_put_cf_root_rules = XCAP_SUPPORT_PUT_CF_ROOT_RULES_ALL;
+            break;
+        }
+        case 150 :/* Swisscom Switzerland */
+        {
+            cfg->xcap_info.xcap_port = 8080;
+            cfg->gba_info.gba_port = 8081;
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            break;
+        }
+        case 151: /* M1 Singapore  */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.xcap_port = 8090;
+            cfg->gba_info.gba_port = 8090;
+            break;
+        }
+        case 152: /* Optus  */
+        {
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            cfg->xcap_info.attribute_need_quotation_mark = XCAP_ENABLED;
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc002.mcc505.pub.3gppnetwork.org");
+            break;
+        }
+        case 153: /* VHA  */
+        {
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            if (streq(mcc, "505") && streq(mnc, "03")) {
+                cfg->cm_info.pdn_releasing_timer = 60;
+            }
+            update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc003.mcc505.pub.3gppnetwork.org");
+            cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+            break;
+        }
+        case 154: /* Telia  */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            if (streq(mcc, "240")){ /* Telia-Sweden */
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->cm_info.apn_selection_rule = XCAP_CM_APN_SELECTION_RULE_XCAP_ONLY;
+                cfg->cm_info.pdn_reject_code[0] = ESM_MULTIPLE_PDN_APN_NOT_ALLOWED;                
+            } else if (streq(mcc, "248")) { /* Telia-Estonia (EMT) */
+                cfg->xcap_info.set_cfnrc_with_cfnl= XCAP_ENABLED;
+                cfg->xcap_info.support_media_tag = XCAP_ENABLED;
+                cfg->xcap_info.support_clir_root = XCAP_DISABLED;                
+            } else if (streq(mcc, "238")) { /* Telia-Denmark */
+                cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+            } else if (streq(mcc, "246")) { /* Telia-Lithuania */
+                cfg->cm_info.apn_selection_rule = XCAP_CM_APN_SELECTION_RULE_XCAP_ONLY;
+                cfg->cm_info.pdn_reject_code[0] = ESM_MULTIPLE_PDN_APN_NOT_ALLOWED;
+                cfg->cm_info.pdn_reject_code[1] = RMMI_ERR_SERV_OPTION_NOT_SUPPORTED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            } else if (streq(mcc, "242")) { /* Telia-Norway */
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            } else if (streq(mcc, "244")) { /* Telia-Finland */
+                cfg->gba_info.gba_delay_ua_send_packet = 200; /* 200 ms */
+            }
+            break;
+        }
+        case 155: /* Digi Malaysia */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.xcap_port = 8090;
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc003.mcc216.pub.3gppnetwork.org");
+            cfg->gba_info.gba_port = 8080;
+            break;
+        }
+        case 156: /* TELENOR */
+        {
+            if (streq(mcc, "238") && streq(mnc, "02")){ /* Telenor-Denmark */
+                cfg->xcap_info.media_type = MEDIA_TYPE_ONLY_AUDIO;
+            } else if (streq(mcc, "238") && streq(mnc, "77")) { /* Telenor-Denmark */
+                cfg->xcap_info.media_type = MEDIA_TYPE_SEPERATE;
+            } else if (streq(mcc, "414")) { /* Telenor/Myammar */
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc006.mcc414.pub.3gppnetwork.org");
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+                cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                cfg->xcap_info.support_put_cw_root = XCAP_ENABLED;
+                cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+            } else if (streq(mcc, "216")) { /* Telenor/Hungary */
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc001.mcc216.pub.3gppnetwork.org");
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            } else if (streq(mcc, "220")) { /* Telenor/Serbia */
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+            } else if (streq(mcc, "297")) { /* Telenor/Montenegro */
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+            } else if (streq(mcc, "240")) { /* Telenor/Sweden */
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+                cfg->xcap_info.support_adding_namespace = XCAP_DISABLED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+                if (streq(mnc, "06")){
+                    update_str(cfg->gba_info.gba_url, "bsf.ims.mnc006.mcc240.pub.3gppnetwork.org");
+                }
+                else if (streq(mnc, "08")){
+                    update_str(cfg->gba_info.gba_url, "bsf.ims.mnc008.mcc240.pub.3gppnetwork.org");
+                }
+            }
+            break;
+        }
+        case 157: /* Telus Canada */
+        {
+            cfg->xcap_info.xcap_port = 8090;
+            cfg->gba_info.gba_port = 8080;
+            update_str(cfg->xcap_info.ruleid_cfu, "cfu");
+            update_str(cfg->xcap_info.ruleid_cfb, "cfb");
+            update_str(cfg->xcap_info.ruleid_cfnrc, "cfnrc");
+            update_str(cfg->xcap_info.ruleid_cfnry, "cfnry");
+            cfg->http_info.support_gzip = XCAP_ENABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->cm_info.apn_selection_rule = XCAP_CM_APN_SELECTION_RULE_XCAP_ONLY;
+			cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            cfg->http_info.naptr_srv_level = XCAP_NAPTR_SRV_LEVEL_NAPTR;
+            cfg->http_info.hide_port_number = XCAP_ENABLED;
+            cfg->http_info.dns_failover = XCAP_ENABLED;
+            break;
+        }
+        case 158: /* Zain  */
+        {
+            if (streq(mcc, "420") ){ /* Saudi Arabia */
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+            }else if (streq(mcc, "426")){ /* Bahrain */
+                cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+                cfg->xcap_info.xcap_port = 8090;
+                cfg->gba_info.gba_port = 8091;
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc002.mcc426.pub.3gppnetwork.org");
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+				cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            }else if (streq(mcc, "419")) { /* Kuwait */
+                cfg->gba_info.gba_port = 8080;
+            }
+            break;
+        }
+        case 159: /* STC Saudi Arabia */
+        {
+            cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NONE;
+            break;
+        }
+        case 160: /* Webe Malaysia */
+        {
+            cfg->xcap_info.media_type = MEDIA_TYPE_ONLY_AUDIO;
+            cfg->xcap_info.set_cfnrc_with_cfnl = XCAP_ENABLED;
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc153.mcc502.pub.3gppnetwork.org");
+            break;
+        }
+        case 161: /* Poland Play */
+        {
+            update_str(cfg->xcap_info.xcap_protocol, "https");
+            update_str(cfg->gba_info.gba_protocol, "https");
+            cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            break;
+        }
+        case 162: /* Freedom Canada */
+        {
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.media_type = MEDIA_TYPE_ONLY_AUDIO;
+            update_str(cfg->xcap_info.auid, "MYSERVICE/simservs.ngn.etsi.org");
+            break;
+        }
+        case 164: /* Telenet Belgium */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            break;
+        }
+        case 165: /* Sunrise Switzerland */
+        {
+            cfg->gba_info.enable_tmpi_header = XCAP_ENABLED;
+            cfg->xcap_info.support_clir_root = XCAP_DISABLED;
+            cfg->xcap_info.media_type = MEDIA_TYPE_SEPERATE;
+            cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+            break;
+        }
+		case 170: /* Partner Israel */
+        {
+			update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc001.mcc425.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_url, "bsf.mnc001.mcc425.pub.3gppnetwork.org"); 
+			cfg->xcap_info.xcap_port = 8080;
+            cfg->gba_info.gba_port 	 = 8080;   
+            break;
+        }
+        case 171: /* WOM Colombia */
+		{
+			update_str(cfg->gba_info.gba_type, "GBA_ME");
+			update_str(cfg->xcap_info.xcap_url, "xcap.mnc360.mcc732.pub.3gppnetwork.org");
+			update_str(cfg->gba_info.gba_url, "bsf.mnc360.mcc732.pub.3gppnetwork.org");
+            break;
+		}
+        case 172: /* Altice Dominican */
+        {
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            break;
+        }
+        case 175: /* Denmark TDC */
+        {
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            break;
+        }
+        case 177:/* Telecom Egypt */
+        {
+            cfg->gba_info.gba_port = 8091;
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc004.mcc602.pub.3gppnetwork.org");
+            break;
+        }
+        case 178: /* Smart */
+        {
+            if (streq(mcc, "456")){ /* Cambodia Smart */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.xcap_connection_timeout = 15;
+                cfg->xcap_info.xcap_retry_times = 0;
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc006.mcc456.pub.3gppnetwork.org");
+            } else if (streq(mcc, "515")) { /* Philipine Smart */
+                cfg->xcap_info.xcap_port = 8080;
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            }
+            break;
+        }
+        case 181: /* TelKom - South Africa */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc002.mcc655.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc002.mcc655.pub.3gppnetwork.org");
+            cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+            break;
+        }
+        case 182: /* Proximus Belgium  */
+        {
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc001.mcc206.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            break;
+        }
+        case 184: /* Vietel - Vietnam  */
+        {
+            cfg->xcap_info.media_type = MEDIA_TYPE_VIDEO_WITH_AUDIO;
+            cfg->xcap_info.xcap_port = 8080;
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc004.mcc452.3gppnetwork.org");
+            cfg->gba_info.gba_port = 8080;
+            break;
+        }
+        case 185: /* 2degrees NZ */
+        {
+            cfg->xcap_info.xcap_port = 8080;
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc024.mcc530.pub.3gppnetwork.org");
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            break;
+        }
+        case 186: /* IDEA  */
+        {
+            cfg->xcap_info.url_encoding =  XCAP_URL_ENCODING_NODE_SELECTOR;
+            cfg->xcap_info.media_type =  MEDIA_TYPE_SEPERATE;
+            break;
+        }        
+        case 188: /* A1 */
+        {
+            if (streq(mcc, "257")){ /* Belarus */
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc001.mcc257.pub.3gppnetwork.org");
+                cfg->gba_info.gba_port = 8080;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            }
+            else if (streq(mcc, "219")){ /* Croatia */
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            }
+            else if (streq(mcc, "232")){ /* Austria */
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            }
+            else if (streq(mcc, "284")){ /* Bulgaria */
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            }
+            else if (streq(mcc, "293")){ /* Slovenia */
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            }
+            break;
+        }
+        case 189: /* UMOBILE Malaysia */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->gba_info.gba_port = 8080;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            break;
+        }
+        case 194: /* Banglalink Bangladesh */
+        {
+            cfg->gba_info.gba_port = 8080;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            break;
+        }
+        case 195: /* O2 */
+        {
+            if (streq(mcc, "230")){      /* CZ  */
+                cfg->xcap_info.media_type = MEDIA_TYPE_ONLY_AUDIO;
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc002.mcc230.pub.3gppnetwork.org");
+                update_str(cfg->gba_info.gba_realm, "ims.mnc002.mcc230.3gppnetwork.org");
+            }
+            else if (streq(mcc, "231")){  /* Slovakia */
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc006.mcc231.pub.3gppnetwork.org");
+                update_str(cfg->gba_info.gba_realm, "ims.mnc006.mcc231.3gppnetwork.org");
+            }
+            break;
+        }
+        case 199: /* Vivacom - Bulgaria  */
+        {
+            cfg->xcap_info.xcap_port = 8090;
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->gba_info.gba_port = 8080;
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc003.mcc284.pub.3gppnetwork.org");
+            cfg->xcap_info.support_adding_namespace = XCAP_DISABLED;
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            break;
+        }
+        case 201: /* KPN NL */
+        {
+            update_str(cfg->xcap_info.xcap_protocol, "https");
+            update_str(cfg->gba_info.gba_protocol, "https");
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            break;
+        }
+        case 202: /* Spark Newzealand */
+        {
+            if (streq(mnc, "005")){
+                update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc005.mcc530.pub.3gppnetwork.spark.co.nz");
+                cfg->xcap_info.xcap_port = 8443;
+                update_str(cfg->xcap_info.xcap_protocol, "https");
+                update_str(cfg->gba_info.gba_protocol, "https");
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc005.mcc530.pub.3gppnetwork.spark.co.nz");
+                cfg->gba_info.gba_port = 8444;
+            }
+            else if (streq(mnc, "099")){
+                update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc099.mcc530.pub.3gppnetwork.spark.co.nz");
+                cfg->xcap_info.xcap_port = 8080;
+                update_str(cfg->gba_info.gba_url, "xcap.ims.mnc099.mcc530.pub.3gppnetwork.spark.co.nz");
+                cfg->gba_info.gba_port = 8090;
+            }
+            break;
+        }
+        case 203: /* NOS Portugal */
+        {
+            update_str(cfg->xcap_info.auid, "mtasxdms/simservs.ngn.etsi.org");
+            cfg->xcap_info.xcap_port = 8080;
+            cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            break;
+        }
+        case 204: /* Rogers Canada */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            if (streq(mnc, "370")){
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc370.mcc302.pub.3gppnetwork.org");
+            } else if (streq(mnc, "720")){
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc720.mcc302.pub.3gppnetwork.org");
+            }
+            break;
+        }
+        case 206: /* Sky UK */
+        {
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+            cfg->xcap_info.media_type = MEDIA_TYPE_ONLY_AUDIO;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc057.mcc234.pub.3gppnetwork.org");
+            update_str(cfg->xcap_info.phone_context, "ims.mnc057.mcc234.3gppnetwork.org");
+            break;
+        }
+        case 209: /* Avantel */
+        {
+            update_str(cfg->xcap_info.auid, "MYSERVICE/simservs.ngn.etsi.org");
+            cfg->xcap_info.xcap_port = 8090;
+            break;
+        }
+        case 213: /* Motiv Russia  */
+        {
+            update_str(cfg->xcap_info.xcap_url, "xcap.mnc035.mcc250.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc035.mcc250.pub.3gppnetwork.org");
+            break;
+        }
+        case 217: /* TelKom Slovenia */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            break;
+        }
+        case 219: /* Mytel Mynmar */
+        {
+            update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc009.mcc414.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc009.mcc414.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->cm_info.apn_selection_rule = XCAP_CM_APN_SELECTION_RULE_XCAP_ONLY;
+            break;
+        }
+        case 220: /* Tigo*/
+        {
+			if (streq(mcc,"704")){   /* Guatemala */
+            update_str(cfg->gba_info.gba_url, "bsf.ims.MNC002.mcc704.pub.3gppnetwork.org");
+			}
+			else if (streq(mcc, "732")){  /* Colombia */
+				update_str(cfg->xcap_info.xcap_url,"xcap.ims.mnc111.mcc732.pub.3gppnetwork.org");
+				update_str(cfg->gba_info.gba_url, "bsf.mnc111.mcc732.pub.3gppnetwork.org");
+				update_str(cfg->gba_info.gba_type, "GBA_ME");
+			}
+            break;
+        }
+		case 221: /* TPG Singapore */
+        {
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+	        cfg->xcap_info.support_clir_root = XCAP_DISABLED;
+            cfg->xcap_info.media_type =  MEDIA_TYPE_SEPERATE;
+            cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            break;
+        }
+        case 223: /* Indosat Indonesia */
+        {
+            cfg->xcap_info.url_encoding =  XCAP_URL_ENCODING_NODE_SELECTOR;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            break;
+        }
+		case 225: /* XL Indonesia */
+        {
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            break;
+        }
+        case 227: /* Wind */
+        {
+            if (streq(mcc, "202")){    /* Greece */
+                if (streq(mnc, "10")){
+                    update_str(cfg->gba_info.gba_url, "bsf.ims.mnc010.mcc202.pub.3gppnetwork.org");
+                }else if(streq(mnc, "09")){
+                    update_str(cfg->gba_info.gba_url, "bsf.ims.mnc009.mcc202.pub.3gppnetwork.org");
+                }
+                update_str(cfg->xcap_info.auid, "mtasxdms/simservs.ngn.etsi.org");
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+                cfg->xcap_info.xcap_port = 8090;
+            }
+            else if (streq(mcc, "222")){    /* Italy */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            }
+            break;
+        }
+        case 231: /* Maxis Malaysia */
+        {
+            update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc012.mcc502.pub.3gppnetwork.org");
+            cfg->xcap_info.xcap_port = 8090;
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc012.mcc502.pub.3gppnetwork.org");
+            cfg->gba_info.gba_port = 8091;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->xcap_info.support_put_cw_root = XCAP_ENABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            break;
+        }
+        case 232: /* Mobitel Srilanka */
+        {
+            cfg->xcap_info.url_encoding =  XCAP_URL_ENCODING_NODE_SELECTOR;
+            cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            cfg->xcap_info.media_type =  MEDIA_TYPE_SEPERATE;
+            break;
+        }
+        case 234: /* Plus Poland */
+        {
+            update_str(cfg->xcap_info.xcap_protocol, "https");
+            update_str(cfg->gba_info.gba_protocol, "https");
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            break;
+        }
+        case 235: /* VIP  */
+        {
+            if (streq(mcc, "220")){  /* Serbia */
+                cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+                cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+                cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+                cfg->xcap_info.attribute_need_quotation_mark = XCAP_ENABLED;
+            }
+            else if (streq(mcc, "294")){ /* Macedonia */
+                cfg->gba_info.gba_port = 8080;
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+            }
+            break;
+        }
+        case 238: /* Videotron Canada */
+        {
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+			update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc500.mcc302.pub.3gppnetwork.org");
+			update_str(cfg->gba_info.gba_url, "bsf.ims.mnc500.mcc302.pub.3gppnetwork.org");
+			cfg->xcap_info.xcap_port = 8090;
+			cfg->gba_info.gba_port = 8080;
+			cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+			cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            break;
+        }
+        case 240: /*Xplore - Canada */
+        {
+            update_str(cfg->xcap_info.auid, "rem/sentinel/xcap/simservs.ngn.etsi.org");
+            cfg->xcap_info.xcap_port = 8080;
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc130.mcc302.pub.3gppnetwork.org");
+			cfg->gba_info.gba_port   = 8001;
+            cfg->xcap_info.support_disable_by_cond = XCAP_ENABLED;
+            break;
+        }
+		case 241: /*Claro - Puerto Rico*/
+        {
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->xcap_info.xcap_port = 8080;
+			cfg->gba_info.gba_port   = 8080;
+            break;
+        }
+        case 243: /* Globe Philippene */
+        {
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc002.mcc515.pub.3gppnetwork.org");
+            update_str(cfg->xcap_info.xcap_protocol, "https");
+            update_str(cfg->gba_info.gba_protocol, "https");
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+            break;
+        }        
+        case 279: /* DITO Philippene */
+        {
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc066.mcc515.pub.3gppnetwork.org");
+            cfg->xcap_info.xcap_port = 8080;
+            cfg->gba_info.gba_port = 8080;
+            break;
+        }
+        case 244: /* Metfone Cambodia */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.xcap_port = 8080;
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc008.mcc456.pub.3gppnetwork.org");
+            cfg->gba_info.gba_port = 8080;
+            break;
+        }
+        case 255: /* Cellular-One NA */
+        {
+            update_str(cfg->xcap_info.xcap_url, "epc.mnc320.mcc310.pub.3gppnetwork.org");
+            update_str(cfg->xcap_info.xcap_protocol, "https");
+            break;
+        }
+		case 273: /* OptimERA */
+        {
+			update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc380.mcc313.3gppnetwork.org");
+			update_str(cfg->gba_info.gba_url, "bsf.ims.mnc380.mcc313.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+			break;
+        }
+        case 274: /* Yoigo Spain */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc004.mcc214.pub.3gppnetwork.org");
+            cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+            break;
+        } 
+        case 276: /* Altice US */
+        {            
+            update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc390.mcc313.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_url, "ap.ims.mnc390.mcc313.3gppnetwork.org");
+            cfg->gba_info.gba_port = 81;
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+            break;
+        }
+        case 277: /* Telemach Slovenia */
+        {
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+            break;
+        }
+        case 280: /* OTZ US */
+        {            
+            update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc560.mcc311.pub.3gppnetwork.org");
+            break;
+        }
+        case 281: /* Kyivstar / Ukraine */
+        {
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->gba_info.gba_port = 8080;
+            update_str(cfg->xcap_info.xcap_protocol, "https");
+            update_str(cfg->gba_info.gba_protocol, "https");
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            break;
+        }
+        case 282: /* Mobily Saudi */
+        {
+            update_str(cfg->gba_info.gba_type, "GBA_ME"); 
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+            cfg->gba_info.gba_port = 443;
+            break;
+        }
+        case 283: /* MEO / Portugal */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->xcap_info.xcap_port = 443;
+            cfg->gba_info.gba_port = 443;            
+            update_str(cfg->xcap_info.xcap_protocol, "https");
+            update_str(cfg->gba_info.gba_protocol, "https");
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            update_str(cfg->gba_info.gba_url, "bsf.mnc006.mcc268.pub.3gppnetwork.org");
+            break;
+        }
+        case 284: /* MTS / Serbia */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            break;
+        }
+        case 285: /* Vinafhone / Vietnam */
+        {
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc002.mcc452.pub.3gppnetwork.org");
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->gba_info.gba_port = 8090;
+            cfg->xcap_info.xcap_port = 8080;
+            break;
+        }
+        case 286: /* MNShubs US */
+        {
+            update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc070.mcc313.pub.3gppnetwork.org");			
+            break;
+        }
+        case 289: /* Batelco Bahrain */
+        {
+            /* Bahrain mcc=426 */
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc001.mcc426.pub.3gppnetwork.org");
+            update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc001.mcc426.pub.3gppnetwork.org");
+            break;
+        }
+        case 291: /* LMT Latvia */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_ENABLED;
+            cfg->xcap_info.url_encoding = XCAP_URL_ENCODING_NODE_SELECTOR;
+            cfg->xcap_info.set_cfnrc_with_cfnl = XCAP_ENABLED;
+            break;
+        }
+        case 295: /* NTC Nepal */
+        {
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            break;
+        }
+		case 296: /* CWW US */
+		{
+			cfg->xcap_info.media_type =  MEDIA_TYPE_ONLY_AUDIO;
+			break;
+		}
+        case 297: /* Fastweb/Italy */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            break;
+        }
+		case 298: /* Umniah Jordan */
+		{
+			update_str(cfg->gba_info.gba_type, "GBA_ME");
+			update_str(cfg->gba_info.gba_url, "bsf.ims.mnc003.mcc416.pub.3gppnetwork.org");
+			cfg->gba_info.gba_port = 80;
+			update_str(cfg->xcap_info.xcap_protocol, "https");
+			break;
+		}
+        case 299: /* NRJ/France */
+        {
+            cfg->gba_info.gba_port = 8080;
+            break;
+        }
+        case 300: /*Nedaa*/
+        {
+            if (streq(mcc, "424")){  /* UAE */
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc011.mcc424.pub.3gppnetwork.org");
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+            }
+            break;
+        }
+        case 304: /* CTMO Macao */
+        {
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc007.mcc455.pub.3gppnetwork.org");
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            cfg->xcap_info.remove_media_when_not_support_media = XCAP_ENABLED;
+            break;
+        }
+        case 306: /* CUHK HongKong */
+        {
+            cfg->xcap_info.xcap_port = 8080;
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            break;
+        }
+		case 307: /*Cellcom - Israel*/
+		{
+			update_str(cfg->gba_info.gba_type, "GBA_ME");
+			update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc002.mcc425.pub.3gppnetwork.org");
+			cfg->xcap_info.xcap_port 		 = 8090;
+			cfg->xcap_info.support_cfnl 	 = XCAP_DISABLED;
+			break;
+		}
+		case 310: /* Hotmobile Israel */
+        {
+			update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc007.mcc425.pub.3gppnetwork.org");
+			cfg->xcap_info.xcap_port 		  = 8090;  
+			break;
+        }
+        case 316: /* Nex-Tech US */
+        {
+			update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->gba_info.gba_port = 81;
+			break;
+        }
+        case 317: /* Commnet US */
+        {
+			update_str(cfg->gba_info.gba_url, "bsf.ims.mnc040.mcc311.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->gba_info.gba_port = 8090;
+			break;
+        }
+        case 318: /* Vianova/Italy */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            update_str(cfg->xcap_info.auid, "mtasxdms/simservs.ngn.etsi.org");
+            cfg->xcap_info.xcap_port = 8080;
+            break;
+        }
+        case 319: /*Monaco Telecom France/Epic Cyprus */
+        {
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            break;
+        }
+        case 321:  /* Viti French */
+        {
+            cfg->xcap_info.xcap_port = 9002;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->gba_info.gba_port = 9001;
+            break;
+        }
+        case 322: /* UPC/Switzerland  */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            cfg->xcap_info.xcap_port = 8080;
+            cfg->gba_info.gba_port = 8080;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc053.mcc228.pub.3gppnetwork.org");
+            break;
+        }
+        case 324: /* Moldcell/Moldova  */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc002.mcc259.3gppnetwork.org");
+            update_str(cfg->xcap_info.auid, "mtasxdms/simservs.ngn.etsi.org");
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc002.mcc259.3gppnetwork.org");
+            break;
+        }
+        case 327: /* Sasktel Canada */
+        {
+            update_str(cfg->xcap_info.xcap_url, "naf.ims.sasktel.com");
+			update_str(cfg->gba_info.gba_url, "bsf.ims.sasktel.com");
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            update_str(cfg->xcap_info.ruleid_cfnrc, "CFNR");
+            update_str(cfg->xcap_info.ruleid_cfnry, "CFNA");
+            if (streq(mnc, "990")) {
+                update_str(cfg->xcap_info.xcap_url, "naf.lab.ims.tsisd.ca");
+                update_str(cfg->gba_info.gba_url, "bsf.lab.ims.tsisd.ca");
+            }            
+			break;
+        }
+		case 332: /* Southern LINC */
+        {
+			update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc720.mcc312.3gppnetwork.org");
+			break;
+        }
+        case 335: /* NT-Thailand */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            break;
+        }
+        case 336: /* Mobifone-Vietnam */
+        {
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc001.mcc452.pub.3gppnetwork.org");
+            cfg->xcap_info.xcap_port = 8080;
+            cfg->gba_info.gba_port = 8090;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            break;
+        }
+        case 337: /* Antel - Urugay */
+        {
+            cfg->gba_info.gba_port = 8080;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc001.mcc748.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_url, "bsf.mnc001.mcc748.pub.3gppnetwork.org");
+            break;
+        }		
+        case 344: /* 4ka Slovakia */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            cfg->gba_info.gba_port = 8080;
+            break;
+        }
+        case 345: /* PrimeTel/Cyprus */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc020.mcc280.pub.3gppnetwork.org");
+            break;
+        }
+        case 349: /* MTS Armenia */
+        {
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->xcap_info.xcap_port = 443;
+            break;
+        }
+        case 350: /* Gibtelecom Gibraltar */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_adding_unprovisioned_rule = XCAP_DISABLED;
+            break;
+        }
+        case 351: /* Hutch Srilanka */
+        {
+            update_str(cfg->gba_info.gba_url,"bsf.ims.mnc008.mcc413.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            cfg->gba_info.gba_port = 8080;
+            break;
+        }
+		case 352: /* Egypt */
+        {
+            if (streq(mcc, "602")){ /* MOD-Egypt */
+                update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc010.mcc602.pub.3gppnetwork.org");
+				update_str(cfg->gba_info.gba_url,   "bsf.ims.mnc010.mcc602.pub.3gppnetwork.org");
+            }
+			break;
+        }
+		case 355:   /* Alfa-Lebanon */
+		{
+			if (streq(mcc, "415")) { /* Lebanon */
+				update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc001.mcc415.3gppnetwork.org");
+				update_str(cfg->gba_info.gba_url, "bsf.ims.mnc001.mcc415.3gppnetwork.org");
+			}
+			break;
+		}
+		case 356: /* Rain-South Africa */
+        {
+            if (streq(mcc, "655")) { /* South Africa */
+                update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc038.mcc655.pub.3gppnetwork.org");
+                update_str(cfg->gba_info.gba_url, "bsf.ims.mnc038.mcc655.pub.3gppnetwork.org");
+                cfg->xcap_info.xcap_port = 8080;
+            }            
+			break;
+        }
+		case 357: /* Ecuador/CNT */
+        {
+            update_str(cfg->xcap_info.xcap_url, "xcap.mnc002.mcc740.pub.3gppnetwork.org");
+			update_str(cfg->gba_info.gba_url,   "bsf.mnc002.mcc740.pub.3gppnetwork.org");
+			update_str(cfg->gba_info.gba_type, "GBA_ME");
+			break;
+        }
+		case 358: /* Madagascar */
+        {
+            if (streq(mcc, "646")&& streq(mnc, "04")){ /* Madagascar/Telma */
+                update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc004.mcc646.pub.3gppnetwork.org");
+				update_str(cfg->gba_info.gba_url,   "bsf.ims.mnc004.mcc646.pub.3gppnetwork.org");
+				update_str(cfg->gba_info.gba_type, "GBA_ME");
+				cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            }
+			break;
+        }
+		case 359: /* Bahamas / Aliv */
+        {
+            cfg->gba_info.gba_port = 8080;
+            cfg->xcap_info.xcap_port = 8090;
+			break;
+        }
+        case 360: /* CTExcel HK */
+        {
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc031.mcc454.pub.3gppnetwork.org");
+            cfg->xcap_info.media_type = MEDIA_TYPE_ONLY_AUDIO;
+			break;
+        }
+        case 340: /* Vodafone - Papua New Guinea */
+        {
+            cfg->gba_info.gba_port = 8080;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+	    break;
+        }
+        case 341: /* UCell Uzbekistan */
+        {
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc005.mcc434.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_url,   "bsf.ims.mnc005.mcc434.pub.3gppnetwork.org");
+            cfg->xcap_info.xcap_port = 443;
+            cfg->gba_info.gba_port = 443;
+            update_str(cfg->xcap_info.xcap_protocol, "https");
+            update_str(cfg->gba_info.gba_protocol, "https");
+            break;
+        }
+        case 362: /* B-Mobile Bhutan */
+        {
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc011.mcc402.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+			break;
+        }
+		case 366: /* Appalachian Wireless */
+        {
+			cfg->xcap_info.xcap_port = 8090;
+            update_str(cfg->xcap_info.xcap_url, "xcap.ims.mnc130.mcc312.pub.3gppnetwork.org");
+            cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+            cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+			break;
+        }
+		case 367: /* James Valley Wireless */
+        {
+            update_str(cfg->gba_info.gba_url, "bsf.ims.mnc920.mcc310.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+			break;
+        }
+		case 370: /* STRATA */
+        {
+			update_str(cfg->gba_info.gba_url, "bsf.ims.mnc290.mcc312.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+			break;
+        }
+		case 371: /* Silver Star */
+        {
+			update_str(cfg->gba_info.gba_url, "bsf.ims.mnc430.mcc312.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+			break;
+        }
+		case 374: /* Copper Valley Wireless */
+        {
+			update_str(cfg->gba_info.gba_url, "bsf.ims.mnc380.mcc312.pub.3gppnetwork.org");
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+			break;
+        }
+        case 379: /* PTCI US */
+        {
+            update_str(cfg->xcap_info.xcap_protocol, "https");
+            cfg->xcap_info.xcap_port = 443;
+            update_str(cfg->xcap_info.xcap_url, "naf.pub.ic.ptci.mobi");
+            update_str(cfg->gba_info.gba_protocol, "https");
+            cfg->gba_info.gba_port = 443;
+            update_str(cfg->gba_info.gba_url, "bsf.pub.ic.ptci.mobi");
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+            cfg->xcap_info.forwarding_number_use_sip_uri = XCAP_ENABLED;
+            cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+            update_str(cfg->gba_info.gba_type, "GBA_ME");
+            break;
+        }
+		case 386: /* ENetworks */
+        {
+			cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+			cfg->xcap_info.support_cfnl = XCAP_DISABLED;
+			update_str(cfg->gba_info.gba_url, "bsf.ims.mnc000.mcc738.pub.3gppnetwork.org");
+			break;
+        }
+        case 1001: /* Ericsson IODT */
+        {
+            cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+            cfg->xcap_info.xcap_port = 8080;
+            update_str(cfg->xcap_info.xcap_url, "naf.tcs.ics.se");
+            update_str(cfg->gba_info.gba_url, "bsf.tcs.ics.se");
+            cfg->gba_info.gba_port = 10080;
+            break;
+        }
+        case 1003: /* MTK HQLAB-Ericsson */
+        {
+            update_str(cfg->xcap_info.auid, "mtasxdms/simservs.ngn.etsi.org");
+            cfg->xcap_info.xcap_port = 8080;
+            cfg->xcap_info.attribute_need_quotation_mark = XCAP_ENABLED;
+            cfg->gba_info.gba_port = 8088;
+            break;
+        }
+        default:
+            break;
+    }
+
+    return KAL_TRUE;
+}
+
+kal_bool custom_xcap_test_sim_cfg_get(xcap_cfg_t *cfg, kal_uint32 sbp_id,const kal_char *mcc, const kal_char *mnc)
+{
+    if (!cfg) {
+        return KAL_FALSE;
+    }
+
+	cfg->xcap_info.support_xcap_enhance = XCAP_DISABLED;
+
+    /* PCT special case */
+    if ((streq(mcc, "001") && streq(mnc, "01")) && (sbp_id != 8)){ /* PCT */
+        xcap_cfg_reset_to_default(cfg);
+        cfg->xcap_info.support_media_tag = XCAP_DISABLED;
+        cfg->gba_info.enable_tmpi_header = XCAP_ENABLED;
+        cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+        update_str(cfg->xcap_info.auid, "XCAP.3gpp.org/simservs.ngn.etsi.org");
+        cfg->cm_info.pdn_releasing_timer = 3600;
+    #ifdef __PUT_FIRST_RULE_WITH_SERV_NODE__
+        update_str(cfg->xcap_info.ruleid_cfnrc, "call-diversion-not-reachable");
+        update_str(cfg->xcap_info.ruleid_cfnl, "call-diversion-not-logged-in");
+        cfg->xcap_info.set_cfnrc_with_cfnl = XCAP_ENABLED;
+        cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+        cfg->xcap_info.support_adding_namespace = XCAP_DISABLED;
+    #endif /* __PUT_FIRST_RULE_WITH_SERV_NODE__ */
+        return KAL_TRUE;
+    }
+
+    /* Special Test Case for Test SIM Card */
+    cfg->cm_info.pdn_releasing_timer = 0;
+
+    switch (sbp_id)
+    {
+        case 0: /* Default values */
+        {
+            break;
+        }
+        case 1: /* CMCC China */
+        {
+            cfg->xcap_info.cache_level = XCAP_ALWAYS_USING_CACHE;
+            break;
+        }
+        case 2: /* CU  China */
+        {
+            cfg->xcap_info.cache_level = XCAP_ALWAYS_USING_CACHE;
+            break;
+        }
+        case 7: /* AT&T */
+        case 145: /* AT&T US Cricket */
+        case 196: /* AT&T US FirstNet */
+        {
+            /* Default US */
+            if (streq(mcc, "310") ||
+                streq(mcc, "311")) { /* US */
+                cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+            }
+            break;
+        }
+        case 8: /* TMO US */
+        {
+            if (streq(mcc, "001") && streq(mnc, "01")){ /* PCT */
+                cfg->xcap_info.cache_level = XCAP_ALWAYS_USING_CACHE;
+                cfg->http_info.support_always_trust_ssl =  XCAP_ENABLED;
+                cfg->cm_info.pdn_releasing_timer = CM_INFO_DEFAULT_PDN_RELEASING_TIMER;
+            } else if (streq(mnc, "210")) {
+                cfg->xcap_info.cache_level = XCAP_NO_CACHE;
+                cfg->xcap_info.support_put_cf_root = XCAP_DISABLED;
+                update_str(cfg->gba_info.gba_type, "GBA_ME");
+            } else {
+                    cfg->http_info.support_always_trust_ssl = XCAP_ENABLED;
+                    cfg->xcap_info.cache_level = XCAP_ALWAYS_USING_CACHE;
+            }
+            break;
+        }
+        case 9: /* CT  China */
+        {
+            cfg->xcap_info.cache_level = XCAP_ALWAYS_USING_CACHE;
+            break;
+        }
+        default:
+            break;
+    }
+
+    return KAL_TRUE;
+}
+
+void custom_xcap_mask_multi_char(kal_char * src, kal_uint32 len) {
+    kal_uint32 max_mask_len;
+    kal_uint32 idx;
+
+    if (custom_usir_full_mask()) {
+        max_mask_len = 20;
+        for (idx = 0; idx < max_mask_len && len >= idx; idx++ ) {
+            if ((src[idx] >= '0' && src[idx] <= '9') ||
+                (src[idx] >= 'a' && src[idx] <= 'z') ||
+                (src[idx] >= 'A' && src[idx] <= 'Z')) {
+                 src[idx] = '*';
+            }
+        }
+    }
+    else {
+        max_mask_len = 11;
+        for (idx = 6; idx < max_mask_len && len >= idx; idx++ ) {
+            if ((src[idx] >= '0' && src[idx] <= '9') ||
+                (src[idx] >= 'a' && src[idx] <= 'z') ||
+                (src[idx] >= 'A' && src[idx] <= 'Z')) {
+                 src[idx] = '*';
+            }
+            else
+                break;
+        }
+    }
+}
+
+void custom_xcap_mask_ip_addr(kal_char* src, kal_uint32 len) {
+    kal_uint32 idx = 0;
+
+    if (custom_usir_full_mask()) {
+        while (idx < len) {
+            if ((src[idx] >= '0' && src[idx] <= '9') ||
+                (src[idx] >= 'a' && src[idx] <= 'f') ||
+                (src[idx] >= 'A' && src[idx] <= 'F')) {
+                src[idx] = '*';
+            }
+            idx++;
+        }
+    }
+    else {
+        kal_uint32 mask_count = 0;
+        while (idx < len && mask_count < 3) {
+            if ((src[idx] >= '0' && src[idx] <= '9') ||
+                (src[idx] >= 'a' && src[idx] <= 'f') ||
+                (src[idx] >= 'A' && src[idx] <= 'F')) {
+                src[idx] = '*';
+            }
+            else if (src[idx] == '.' || src[idx] == ':'){
+                mask_count++;
+            }
+            else
+                break;
+
+            idx++;
+        }
+    }
+}
+
+void custom_xcap_mask_all_digit(kal_char* src, kal_uint32 len) {
+    kal_uint32 idx;
+
+    if (custom_usir_full_mask()) {
+        idx = 0;
+    }
+    else {
+        idx = 2;
+    }
+    while (src[idx] != '\0' && idx < len) {
+        if (src[idx] >= '0' && src[idx] <= '9') {
+            src[idx] = '*';
+        }
+        idx++;
+    }
+}
+
+void custom_xcap_mask_sensitive_data_by_pattern(kal_char* src, kal_uint32 len){
+    #define PATTERN_COUNT 6
+    const char* pattern_xml[PATTERN_COUNT] = {"sip:", "tel:", "sips:", "Authorization:", "X-3GPP-Intended-Identity:", "IMEI:"};
+    kal_char *head = NULL;
+    kal_uint8 idx;
+
+    for (idx = 0; idx < PATTERN_COUNT; idx++) {
+        head = src;
+        while (1) {
+            head = strstr(head, (const char*)pattern_xml[idx]);
+            if (head != NULL) {
+                head += strlen((const char*)pattern_xml[idx]);
+                custom_xcap_mask_multi_char(head, len);
+            }
+            else
+                break;
+        }
+    }
+}
+
+kal_char *custom_xcap_set_sensitive_data(kal_char *src, kal_uint32 src_len, SENSITIVE_LEVEL level) {
+#if defined(__SENSITIVE_DATA_MOSAIC__) && defined(__MTK_TARGET__)
+	kal_uint32 module_id = (kal_uint32) MOD_SENSITIVE_CTRL;
+	// TRACE_GROUP_1 of MOD_SENSITIVE_CTRL is off (this is USIR filter, then don't log sensitve message))
+    if(tst_trace_check_ps_filter_off(TRACE_GROUP_1, &module_id, 0x3)) {
+		kal_char *dest = (kal_char*)get_xcap_sensetive_bufffer();
+
+	    if (src_len == 0)
+			return src;
+
+		kal_mem_set(dest, 0, XCAP_SENSITIVE_BUFFER_SIZE);
+		kal_mem_cpy(dest, src, src_len);
+		// print mask result
+	    switch (level) {
+			case MASK_BY_PATTERN:
+				custom_xcap_mask_sensitive_data_by_pattern(dest, src_len);
+				break;
+			case MASK_IP_ADDRESS:
+				custom_xcap_mask_ip_addr(dest, src_len);
+				break;
+			case MASK_MULTI_CHAR:
+				custom_xcap_mask_multi_char(dest, src_len);
+				break;
+			case MASK_ALL_DIGIT:
+				custom_xcap_mask_all_digit(dest, src_len);
+				break;
+			default:
+				dest = src;
+	    }
+		return dest;
+    }
+	else
+#endif
+		// print original log
+		return src;
+}
+
+#endif
diff --git a/mcu/custom/protocol/common/ps/custom_xcap_config.h b/mcu/custom/protocol/common/ps/custom_xcap_config.h
new file mode 100644
index 0000000..038dc00
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/custom_xcap_config.h
@@ -0,0 +1,261 @@
+/*****************************************************************************
+*  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 PRINIPLES.  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 __CUSTOM_XCAP_CONFIG_H__
+#define __CUSTOM_XCAP_CONFIG_H__
+#ifdef __XCAP_SUPPORT__
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "kal_public_api.h"
+#include "ps_public_enum.h"
+#include "l4_ps_api.h"
+#include "sim_ps_api.h"
+
+#include "nvram_editor_data_item.h"
+#include "xcap_nvram_editor.h"
+#include "nvram_interface.h"
+#include "xcap_nvram_def.h"
+
+
+typedef enum {
+    /** [Standard]
+     *      SERVICE_CLASS_VOICE  : (audio), (audio & video)
+     *      SERVICE_CLASS_VIDEO  : (video), (audio & video)
+     *      SERVICE_CLASS_NONE   : (audio), (video), (audio & video)
+     *      illegal :
+     */
+    MEDIA_TYPE_STANDARD,
+    /** [Only Audio]
+     *      SERVICE_CLASS_VOICE  : (audio)
+     *      SERVICE_CLASS_VIDEO  :
+     *      SERVICE_CLASS_NONE   : (audio)
+     *      illegal : (video), (audio & video)
+     */
+    MEDIA_TYPE_ONLY_AUDIO,
+    /** [Seperate]
+     *      SERVICE_CLASS_VOICE  : (audio)
+     *      SERVICE_CLASS_VIDEO  : (video)
+     *      SERVICE_CLASS_NONE   : (audio), (video)
+     *      illegal : (audio & video)
+     */
+    MEDIA_TYPE_SEPERATE,
+    /** [Video with Audio]
+     *      SERVICE_CLASS_VOICE  : (audio)
+     *      SERVICE_CLASS_VIDEO  : (audio & video)
+     *      SERVICE_CLASS_NONE   : (audio), (audio & video)
+     *      illegal : (video)
+     */
+    MEDIA_TYPE_VIDEO_WITH_AUDIO,
+    MEDIA_TYPE_TOTAL
+}MediaType;
+
+typedef enum {
+    XCAP_CM_APN_SELECTION_RULE_NONE = 0,
+    XCAP_CM_APN_SELECTION_RULE_XCAP_ONLY,
+    XCAP_CM_APN_SELECTION_RULE_DEFAULT_ONLY,
+    XCAP_CM_APN_SELECTION_RULE_XCAP_THEN_DEFAULT,
+    XCAP_CM_APN_SELECTION_RULE_DEFAULT_THEN_XCAP,
+    XCAP_CM_APN_SELECTION_RULE_NO_NEED_PDN,
+    XCAP_CM_APN_SELECTION_RULE_PREFER_CELLULAR_XCAP,
+    XCAP_CM_APN_SELECTION_RULE_MAX,
+} XCAP_CM_APN_SELECTION_RULE_ENUM;
+
+typedef enum {
+    XCAP_CM_FAIL_ACT_NONE = 0,
+    XCAP_CM_FAIL_ACT_D2RM_REJ_RAT_WIFI_SEND_DIRECTLY,
+    XCAP_CM_FAIL_ACT_TRY_WIFI_DIRECTLY,
+} XCAP_CM_FAIL_ACT_ENUM;
+
+typedef enum {
+  XCAP_NO_CACHE = 0,
+  XCAP_CLEAR_CACHE_AFTER_PUT_MESSAGE,
+  XCAP_ALWAYS_USING_CACHE, 
+} CacheLevel;
+
+typedef enum {
+  XCAP_IF_MATCH_NOT_SUPPORTED = 0,
+  XCAP_IF_MATCH_LEVEL_SERVICE = 1,
+  XCAP_IF_MATCH_LEVEL_SIMSERVS = 2
+} XCAP_IF_MATCH_ENUM;
+
+#define XCAP_URL_ENCODING_NONE           0
+#define XCAP_URL_ENCODING_DOC_SELECTOR   1 << 0
+#define XCAP_URL_ENCODING_NODE_SELECTOR  1 << 1
+
+#define XCAP_NAPTR_SRV_LEVEL_NONE 0
+#define XCAP_NAPTR_SRV_LEVEL_SRV 1 << 0
+#define XCAP_NAPTR_SRV_LEVEL_NAPTR 1 << 1
+
+#define XCAP_SUPPORT_PUT_CF_ROOT_RULES_ALL        0x00
+#define XCAP_SUPPORT_PUT_CF_ROOT_RULES_ALL_CF_CONDITIONAL_CF    0x01
+/* Rest of the CF rules combinations can be defined here */
+
+#define XCAP_ENABLED 1
+#define XCAP_DISABLED 0
+
+typedef enum {
+    DNS_SERVER_IPV6_FIRST,
+    DNS_SERVER_IPV4_FIRST,
+} DNSIPv4v6Priority;
+
+typedef enum {
+    MASK_BY_PATTERN = 0,
+    MASK_IP_ADDRESS,
+    MASK_MULTI_CHAR,
+    MASK_ALL_DIGIT,
+} SENSITIVE_LEVEL;
+
+#define XCAP_CCFC_SERVICE_CLASS_NONE           0
+#define XCAP_CCFC_SERVICE_CLASS_VOICE          1 << 0
+#define XCAP_CCFC_SERVICE_CLASS_VIDEO          1 << 9
+
+// XCAP Info Default Values
+#define XCAP_INFO_DEFAULT_XCAP_URL ""
+#define XCAP_INFO_DEFAULT_XCAP_PROTOCOL "http"
+#define XCAP_INFO_DEFAULT_XCAP_PORT 80
+#define XCAP_INFO_DEFAULT_AUID "simservs.ngn.etsi.org"
+#define XCAP_INFO_DEFAULT_URL_ENCODING XCAP_URL_ENCODING_DOC_SELECTOR | XCAP_URL_ENCODING_NODE_SELECTOR
+#define XCAP_INFO_DEFAULT_MEDIA_TYPE   MEDIA_TYPE_STANDARD
+#define XCAP_INFO_DEFAULT_PHONE_CONTEXT ""
+#define XCAP_INFO_DEFAULT_DIGEST_ID ""
+#define XCAP_INFO_DEFAULT_DIGEST_PWD ""
+#define XCAP_INFO_DEFAULT_XCAP_RETRY_TIMES 1
+#define XCAP_INFO_DEFAULT_XCAP_CONNECTION_TIMEOUT 30
+#define XCAP_INFO_DEFAULT_SUPPORT_MEDIA_TAG XCAP_ENABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_CFNL XCAP_ENABLED
+#define XCAP_INFO_DEFAULT_CACHE_LEVEL XCAP_CLEAR_CACHE_AFTER_PUT_MESSAGE
+#define XCAP_INFO_DEFAULT_SUPPORT_PUT_CF_ROOT XCAP_ENABLED
+#define XCAP_INFO_DEFAULT_TIMER_INSIDE_CFNRY  XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_PUT_CLIR_ROOT XCAP_ENABLED
+#define XCAP_INFO_DEFAULT_ATTRIBUTE_NEED_QUOTATION_MARK XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_SET_CFNRC_WITH_CFNL XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_FORWARDING_NUMBER_USE_SIP_URI XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_CB_NO_ACTION_ALLOW XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_USE_FIRST_XUI_ELEMENT XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_USE_SAVED_XUI XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_RULEID_CFU ""
+#define XCAP_INFO_DEFAULT_RULEID_CFB ""
+#define XCAP_INFO_DEFAULT_RULEID_CFNRY ""
+#define XCAP_INFO_DEFAULT_RULEID_CFNRC ""
+#define XCAP_INFO_DEFAULT_RULEID_CFNL ""
+#define XCAP_INFO_DEFAULT_RULEID_BAOC ""
+#define XCAP_INFO_DEFAULT_RULEID_BAOIC ""
+#define XCAP_INFO_DEFAULT_RULEID_BAOICXH ""
+#define XCAP_INFO_DEFAULT_RULEID_BAIC ""
+#define XCAP_INFO_DEFAULT_RULEID_BAICR ""
+#define XCAP_INFO_DEFAULT_RULEID_BAICA ""
+#define XCAP_INFO_DEFAULT_REMOVE_INVALID_ACTIONS XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_ADDING_NO_REPLY_TIMER XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_ADDING_UNPROVISIONED_RULE XCAP_ENABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_XCAP_ENHANCE XCAP_ENABLED
+#define XCAP_INFO_DEFAULT_TOTAL_EXE_TIME 30
+#define XCAP_INFO_DEFAULT_NEED_CHECK_ISIM_INFO XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_ADDING_NAMESPACE XCAP_ENABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_BAICA XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_SEND_DEREG_AFTER_PUT XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_RULE_LEVEL_SETTING XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_QUERY_SIMSERVS XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_DISABLE_BY_COND XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_ENABLE_BY_COND XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_ISIM XCAP_ENABLED
+#define XCAP_INFO_DEFAULT_EXCLUSIVE_CB XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_PUT_CW_ROOT XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_ENABLE_CUSTOM_UA_STR XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_USER_AGENT_PREFIX ""
+#define XCAP_INFO_DEFAULT_USER_AGENT_MODEL "MTK/1.0.0"
+#define XCAP_INFO_DEFAULT_USER_AGENT_DEFAULT "XCAP Client"
+#define XCAP_INFO_DEFAULT_REMOVE_MEDIA_WHEN_NOT_SUPPORT_MEDIA XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_XCAP_DIFF XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_REMOVE_URL_SIMSERVS_PREFIX XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_EMPTY_CONTIDION_TAG_FORMAT XCAP_ENABLED
+#define XCAP_INFO_DEFAULT_CCFC_SERVICE_CLASS XCAP_CCFC_SERVICE_CLASS_VOICE | XCAP_CCFC_SERVICE_CLASS_VIDEO
+#define XCAP_INFO_DEFAULT_REMOVE_NODE_NAMESPACE XCAP_DISABLED
+#define XCAP_INFO_DEFAULT_SUPPORT_IF_MATCH_HEADER XCAP_IF_MATCH_NOT_SUPPORTED
+
+// GBA Info Default Values
+#define GBA_INFO_DEFAULT_GBA_URL ""
+#define GBA_INFO_DEFAULT_GBA_PROTOCOL "http"
+#define GBA_INFO_DEFAULT_GBA_PORT 80
+#define GBA_INFO_DEFAULT_GBA_TYPE ""
+#define GBA_INFO_DEFAULT_IMEI_HEADER ""
+#define GBA_INFO_DEFAULT_GBA_URL_PATH ""
+#define GBA_INFO_DEFAULT_GBA_REALM ""
+#define GBA_INFO_DEFAULT_GBA_USER_AGENT "Bootstrapping Client Agent"
+#define GBA_INFO_DEFAULT_GBA_RETRY_TIMES 0
+#define GBA_INFO_DEFAULT_GBA_CONNECTION_TIMEOUT 20
+#define GBA_INFO_DEFAULT_ENABLE_TMPI_HEADER XCAP_DISABLED
+#define GBA_INFO_DEFAULT_SUPPORT_TMPI_AS_USERNAME XCAP_DISABLED
+#define GBA_INFO_DEFAULT_GBA_DELAY_UA_SEND_PACKET 0
+
+// CM Info Default Values
+#if defined( __NOT_TRY_DEFAULT_APN_FOR_XCAP__ )
+    #define CM_INFO_DEFAULT_APN_SELECTION_RULE XCAP_CM_APN_SELECTION_RULE_XCAP_ONLY
+#else
+    #define CM_INFO_DEFAULT_APN_SELECTION_RULE XCAP_CM_APN_SELECTION_RULE_XCAP_THEN_DEFAULT
+#endif
+#define CM_INFO_DEFAULT_PDN_RELEASING_TIMER   2 // seconds
+#define CM_INFO_DEFAULT_PDN_WAIT_PS_REG_TIME  10 // seconds
+#define CM_INFO_DEFAULT_ACCEPT_NW_ACT_PDN XCAP_DISABLED
+#define CM_INFO_DEFAULT_ACCEPT_PUBLIC_WIFI XCAP_DISABLED
+#define CM_INFO_DEFAULT_PDN_RETRY_TIMES 2
+#define CM_INFO_DEFAULT_PDN_REJECT_CODE 0x0000
+#define CM_INFO_DEFAULT_SUPPORT_EMPTY_PDN_ESTABLISHMENT XCAP_ENABLED
+
+// HTTP Info Default Values
+#define HTTP_INFO_DEFAULT_SUPPROT_GZIP XCAP_DISABLED
+#define HTTP_INFO_DEFAULT_SUPPORT_ALWAYS_TRUST_SSL XCAP_DISABLED
+#define HTTP_INFO_DEFAULT_DNS_SERVER_IPV4V6_PRIORITY DNS_SERVER_IPV6_FIRST
+#define HTTP_INFO_DEFAULT_TCP_SESSION_KEEP_ALIVE XCAP_ENABLED
+#define HTTP_INFO_DEFAULT_NAPTR_SRV_LEVEL XCAP_NAPTR_SRV_LEVEL_NONE
+#define HTTP_INFO_DEFAULT_HIDE_PORT_NUMBER XCAP_DISABLED
+#define HTTP_INFO_DEFAULT_DNS_FAILOVER XCAP_DISABLED
+#define HTTP_INFO_DEFAULT_XCAP_DNS_DEFAULT_TTL 600
+
+// SIM Info Default Values
+#define SIM_INFO_DEFAULT_SAVED_IMSI ""
+#define SIM_INFO_DEFAULT_SAVED_XUI ""
+#define SIM_INFO_DEFAULT_SAVED_IMPI ""
+#define SIM_INFO_DEFAULT_SAVED_TMPI ""
+
+#if defined(__SENSITIVE_DATA_MOSAIC__) && defined(__MTK_TARGET__)
+#define XCAP_SENSITIVE_BUFFER_SIZE (16384)
+#endif
+kal_char *custom_xcap_set_sensitive_data(kal_char *src, kal_uint32 src_len, SENSITIVE_LEVEL level);
+kal_bool xcap_cfg_reset_to_default(xcap_cfg_t *cfg);
+kal_bool custom_xcap_cfg_get(xcap_cfg_t *cfg, kal_uint32 sbp_id,const kal_char *mcc, const kal_char *mnc);
+kal_bool custom_xcap_test_sim_cfg_get(xcap_cfg_t *cfg, kal_uint32 sbp_id,const kal_char *mcc, const kal_char *mnc);
+#endif
+#endif // __CUSTOM_XCAP_CONFIG_H__
+
diff --git a/mcu/custom/protocol/common/ps/customer_at_command.c b/mcu/custom/protocol/common/ps/customer_at_command.c
new file mode 100644
index 0000000..934122b
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_at_command.c
@@ -0,0 +1,880 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*****************************************************************************
+ * Filename:
+ * ---------
+ * Custom_at_command.c
+ *
+ * Description:
+ * ------------
+ *   This file is intends for Customer to implement and parse its own defined AT commands
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+*****************************************************************************/
+//#include "kal_release.h"
+//#include "kal_non_specific_general_types.h"
+#include "stdio.h"
+#include "string.h"
+//#include "stack_config.h"	
+
+#include "kal_general_types.h"
+#include "kal_trace.h"
+#if (defined(__COMPOSITE_WEBCAM__))
+#include "cal_api.h"
+#include "cal_comm_def.h"
+#endif
+#ifdef __TWOMICNR_SUPPORT__
+#include "two_mic_NR_custom_if.h" 
+#endif
+
+#include "gmss_public.h" //for gmss_is_tdscdma_mode_activated()
+
+#ifdef __TC10__
+#include "atp_public_defs.h"//for custom_atp_command_hdlr()
+#endif
+
+extern kal_bool gas_command_hdlr( kal_uint8* cmd_name, kal_uint8*full_cmd_string);
+
+extern void kal_monitor_buffer(kal_uint32 index);
+extern kal_bool twomicnr_command_hdlr(char *full_cmd_string);
+extern module_type l4c_current_mod_id;
+
+/*****************************************************************************
+* CUSTOM_SYMBOL:
+*	customer can modify this symbol.
+*     Every command begin with this symbol will be recognized as a customer-defined command
+*	and passed to custom_command_hdlr().
+*     For example: if CUSTOM_SYMBOL is set to '^', 
+*				then AT^AAAA, AT^BBBB will be customer-defined command.
+*   	NOTE:  '+'  and '/' and ' \ 'is not allowed since they might be standard command format
+*****************************************************************************/
+#define CUSTOM_SYMBOL  '^'	 // '+'  and '/' and ' \ 'is NOT allowed   
+
+/*****************************************************************************
+* MAX_UART_LEN = 128 bytes.
+*	when you write a lot of data to UART at the same time, 
+*	UART's buffer might be full and cannot handle.
+*     so the safer way is to seperate the long data, each time only write data length <= 128
+*****************************************************************************/
+#define MAX_UART_LEN	128  
+
+kal_uint8 custom_get_atcmd_symbol(void);
+kal_bool custom_command_hdlr(char *full_cmd_string);
+
+/*****************************************************************************
+* FUNCTION
+*  	rmmi_write_to_uart()
+* DESCRIPTION
+*   	This function extern L4C RMMI function,
+*     is to write data to UART
+* PARAMETERS
+*   	kal_uint8 * buffer 	- the data to be written
+*	kal_uint16 length 	- the length of data to be written
+*     kal_bool stuff 		- KAL_TRUE : <CR><LF> will be added at the beginning and end. (eg.<CR><LF>OK<CR><LF>)
+*					   KAL_FALSE: no <CR><LF> is added
+* RETURNS
+*	none
+*****************************************************************************/
+extern void rmmi_write_to_uart(kal_uint8 * buffer, kal_uint16 length, kal_bool stuff); 
+
+#ifdef __TC10__
+/*****************************************************************************
+* FUNCTION
+*   atp_io_send_cmd_rsp()
+* DESCRIPTION
+*    This function extern ATP function to send command response
+*
+* PARAMETERS
+*    kal_uint16              ref_num
+*    proxy_cmd_result_enum   result
+*    atp_err_id_enum         cause
+*    kal_bool                stuff
+*    peer_buff_struct        peer_buff_ptr
+* RETURNS
+*   none
+*****************************************************************************/
+extern void atp_io_send_cmd_rsp(kal_uint16 ref_num, proxy_cmd_result_enum result, atp_err_id_enum cause, kal_bool stuff, peer_buff_struct  *peer_buff_ptr);
+#endif
+
+typedef enum
+{
+    /* --- standard result codes, defined in V.25 Table1 --- */
+    CUSTOM_RCODE_OK = 0,
+    CUSTOM_RCODE_ERROR = 4,
+} custom_result_code_type_enum;
+
+/*****************************************************************************
+ * FUNCTION
+ *  rmmi_result_code_fmttr
+ * DESCRIPTION
+ *  Spec 127007 (07.07) Sec 9.2
+ * PARAMETERS
+ *  rsp_type       [IN]       custom_rsp_type_enum
+ *  cause           [IN]       kal_uint16 
+ * RETURNS
+ *  void
+ *****************************************************************************/
+extern void rmmi_result_code_fmttr(kal_uint8 rsp_type, kal_uint16 cause);
+
+#ifdef __GATI_ENABLE__
+extern kal_bool gati_command_hdlr(kal_uint8* cmd_string, kal_uint8* full_string);
+
+module_type gati_mod_table[] = 
+{
+    MOD_PHB,
+    MOD_L4C,
+    MOD_L4C,
+    MOD_L4C, 
+    MOD_NIL         /* Need to be the last one */
+};
+
+kal_char *gati_cmd_table[] = 
+{
+    "CPBBA",
+    "CPBBR",
+    "CPBBS",
+    "CPBB"
+};
+
+#endif
+
+
+#define COMMAND_LINE_SIZE    (180)
+#define NULL_TERMINATOR_LENGTH (1)
+
+ typedef struct 
+{
+  short  position;
+  short  length;
+  char   character[COMMAND_LINE_SIZE + NULL_TERMINATOR_LENGTH];
+} custom_cmdLine;
+
+typedef enum
+{
+    CUSTOM_WRONG_MODE,
+    CUSTOM_SET_OR_EXECUTE_MODE,
+    CUSTOM_READ_MODE,
+    CUSTOM_TEST_MODE,
+    CUSTOM_ACTIVE_MODE
+} custom_cmd_mode_enum;
+
+typedef enum
+{
+    CUSTOM_RSP_ERROR = -1,
+    CUSTOM_RSP_OK = 0
+} custom_rsp_type_enum;
+
+typedef struct
+{
+	char *commandString;
+	custom_rsp_type_enum (*commandFunc)(custom_cmdLine *commandBuffer_p);
+} custom_atcmd;
+
+custom_cmd_mode_enum custom_find_cmd_mode(custom_cmdLine *cmd_line);
+
+custom_rsp_type_enum custom_test_func(custom_cmdLine *commandBuffer_p)
+{
+    custom_cmd_mode_enum result;
+    custom_rsp_type_enum ret_value  = CUSTOM_RSP_ERROR;
+
+    result = custom_find_cmd_mode(commandBuffer_p);		
+    switch (result)
+    {
+        case CUSTOM_READ_MODE:
+            ret_value = CUSTOM_RSP_OK;
+            break;
+        case CUSTOM_ACTIVE_MODE:
+            ret_value = CUSTOM_RSP_OK;
+            break;
+        case CUSTOM_SET_OR_EXECUTE_MODE:
+            ret_value = CUSTOM_RSP_OK;
+            break;
+        case CUSTOM_TEST_MODE:
+            ret_value = CUSTOM_RSP_OK;
+            break;    
+        default:
+            ret_value = CUSTOM_RSP_ERROR;
+            break;
+	}
+    return ret_value;
+}
+
+
+/********************************
+* The following table is used for the customer
+* They can defined their own command and 
+* corresponding handler function here
+* Note that the last line {NULL, NULL} should not be removed
+* since it is the terminator indicator
+*********************************/
+const custom_atcmd custom_cmd_table[ ] =
+{    
+    {"AT%CUSTOM",custom_test_func},
+    {NULL, NULL}  // this lind should not be removed, it will be treat as 
+};
+
+/*****************************************************************************
+* FUNCTION
+*     custom_find_cmd_mode()
+* DESCRIPTION
+*     This function is used to parsing the command mode for the customer
+*     The input position of the cmd_line should stay at the character right after the command name
+* PARAMETERS
+*     cmd_line      the custom_cmdLine which contains the command string and its current parsing position
+* RETURNS
+*     custom_cmd_mode_enum
+*****************************************************************************/
+custom_cmd_mode_enum custom_find_cmd_mode(custom_cmdLine *cmd_line)
+{
+    custom_cmd_mode_enum result;
+
+    if (cmd_line->position < cmd_line->length - 1)
+    {
+        switch (cmd_line->character[cmd_line->position])
+        {
+            case '?':  /* AT+...? */
+            {
+                cmd_line->position++;
+                result = CUSTOM_READ_MODE;
+                break;
+            }
+            case '=':  /* AT+...= */
+            {
+                cmd_line->position++;
+                if ((cmd_line->position < cmd_line->length - 1 ) &&
+                    (cmd_line->character[cmd_line->position] == '?'))
+                {
+                    cmd_line->position++;
+                    result = CUSTOM_TEST_MODE;
+                }
+                else
+                {
+                    result = CUSTOM_SET_OR_EXECUTE_MODE;
+                }
+                break;
+            }
+            default:  /* AT+... */
+            {
+                result = CUSTOM_ACTIVE_MODE;
+                break;
+            }
+        }
+    }
+    else
+    {
+        result = CUSTOM_ACTIVE_MODE;
+    }
+    return (result);
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_command_hdlr()
+* DESCRIPTION
+*   	This function should parse the custom AT command and do correspondent action.
+*     Customer should maintain and modify the code.
+* PARAMETERS
+*   	kal_uint8 * cmd_string
+* RETURNS
+*    KAL_TRUE : the command is handled by the customer
+*    KAL_FALSE: the command is not handled by the customer
+*****************************************************************************/
+kal_bool custom_command_hdlr(char *full_cmd_string)
+{
+    char buffer[MAX_UART_LEN+1]; //MAUI_02377056
+    char *cmd_name, *cmdString;
+    kal_uint8 index = 0; 
+    kal_uint16 length;
+    kal_uint16 i;
+    custom_cmdLine command_line;
+
+    cmd_name = buffer;
+
+    length = strlen(full_cmd_string);
+    length = length > MAX_UART_LEN ? MAX_UART_LEN : length;    
+    while ((full_cmd_string[index] != '=' ) &&  //might be TEST command or EXE command
+        (full_cmd_string[index] != '?' ) && // might be READ command
+        (full_cmd_string[index] != 13 ) && //carriage return
+        index < length)  
+    {
+        cmd_name[index] = full_cmd_string[index] ;
+        index ++;
+    }
+    cmd_name[index] = '\0' ;    
+    
+    for (i = 0 ; custom_cmd_table[i].commandString != NULL; i++ )
+    {
+        cmdString = custom_cmd_table[i].commandString;
+        if (strcmp(cmd_name, cmdString) == 0 )
+        {
+            strncpy(command_line.character, full_cmd_string, COMMAND_LINE_SIZE + NULL_TERMINATOR_LENGTH);
+            command_line.character[COMMAND_LINE_SIZE] = '\0';
+            command_line.length = strlen(command_line.character);
+            command_line.position = index;
+            if (custom_cmd_table[i].commandFunc(&command_line) == CUSTOM_RSP_OK) 
+            {
+                rmmi_result_code_fmttr(CUSTOM_RCODE_OK, 0);
+            }
+            else
+            {
+                rmmi_result_code_fmttr(CUSTOM_RCODE_ERROR, 0xffff);
+            }
+            return KAL_TRUE;
+        }
+    }    
+
+    if (index <= 2)
+        return KAL_FALSE;
+	
+    /* just a very basic example : customer can implement their own */
+    cmd_name += 3;
+    if (strcmp(cmd_name, "EXAMPLE") == 0)
+    {		
+        /* BEGIN: do the following parsing and correspondent action */
+        /*  												    */
+        /*  												    */
+        /*  												    */
+        /* END: do the following parsing and correspondent action    */
+
+        /* generate final result code: "OK" or "ERROR" */
+        if(KAL_TRUE)    // if operation is success
+        {
+            rmmi_result_code_fmttr(CUSTOM_RCODE_OK, 0);
+        }
+        else if (KAL_FALSE) // if operation is fail
+        {
+            rmmi_result_code_fmttr(CUSTOM_RCODE_ERROR, 0xffff);
+        }
+        return KAL_TRUE;
+    }
+    #if defined(WISDOM_MMI)
+    else if (strcmp(cmd_name, "buffer") == 0)
+    {		
+        kal_sys_trace("Buffer Monitor enabled!");
+        kal_monitor_buffer(0xffffffff);		
+        rmmi_result_code_fmttr(CUSTOM_RCODE_OK, 0);
+
+        return KAL_TRUE;
+    }	
+    #endif	
+    #ifdef __TWOMICNR_SUPPORT__ 
+    else if (twomicnr_command_hdlr(full_cmd_string) == KAL_TRUE)
+    {
+	return KAL_TRUE;
+    }
+    #endif
+    #if (defined(__COMPOSITE_WEBCAM__)) 
+    else if (strcmp(cmd_name, "SENSOR") == 0)
+    {
+        CAL_FEATURE_CTRL_STRUCT CalInPara;
+        CalInPara.FeatureId = CAL_FEATURE_CAMERA_TUNING_SENSOR;
+        CalInPara.FeatureSetValue = (kal_uint32)(full_cmd_string);
+        CalCtrl(CAL_FEATURE_CTRL, (void*)&CalInPara, NULL, 0, NULL);
+        return KAL_TRUE;
+    }
+    #endif
+    else
+    { 
+#ifdef __GAS_SUPPORT__
+        if( gas_command_hdlr( (kal_uint8*)cmd_name, (kal_uint8*)full_cmd_string)==KAL_TRUE )
+        {
+            // it is a gas command and we will send the command to the appropriate module
+            return KAL_TRUE;
+        }
+           
+#endif
+    #ifdef __GATI_ENABLE__ 
+        /* Judge if the command string is a GATI command*/
+        if( gati_command_hdlr( (kal_uint8*)cmd_name, (kal_uint8*)full_cmd_string)==KAL_TRUE )
+        {
+            // it is a gati command and we will send the command to the appropriate module
+            return KAL_TRUE;
+        }		 	
+    #endif
+    }	
+		 
+    /* unrecognized command */
+    /* we should return KAL_FALSE to let ATCI judge if the it can handle the command */
+    return KAL_FALSE;
+	
+}
+
+#ifdef __TC10__
+/*****************************************************************************
+* FUNCTION
+*     custom_atp_command_hdlr()
+* DESCRIPTION
+*     This function should parse the custom AT command and do correspondent action.
+*     Customer should maintain and modify the code,
+*     For GEN93 and later solution,custom commands will be processed by ATP. 
+*     So we use custom_atp_command_hdlr instead of custom_command_hdler.
+* PARAMETERS
+*     kal_uint8 * cmd_string
+*     kal_uint16 ref
+* RETURNS
+*     KAL_TRUE : the command is handled by the customer
+*     KAL_FALSE: the command is not handled by the customer
+*****************************************************************************/
+kal_bool custom_atp_command_hdlr(char *full_cmd_string,kal_uint16 ref)
+{
+    char buffer[MAX_UART_LEN+1]; //MAUI_02377056
+    char *cmd_name, *cmdString;
+    kal_uint8 index = 0; 
+    kal_uint16 length;
+    kal_uint16 i;
+    custom_cmdLine command_line;
+
+    cmd_name = buffer;
+
+    length = strlen(full_cmd_string);
+    length = length > MAX_UART_LEN ? MAX_UART_LEN : length;    
+    while ((full_cmd_string[index] != '=' ) &&  //might be TEST command or EXE command
+        (full_cmd_string[index] != '?' ) && // might be READ command
+        (full_cmd_string[index] != 13 ) && //carriage return
+        index < length)  
+    {
+        cmd_name[index] = full_cmd_string[index] ;
+        index ++;
+    }
+    cmd_name[index] = '\0' ;    
+    
+    for (i = 0 ; custom_cmd_table[i].commandString != NULL; i++ )
+    {
+        cmdString = custom_cmd_table[i].commandString;
+        if (strcmp(cmd_name, cmdString) == 0 )
+        {
+            strncpy(command_line.character, full_cmd_string, COMMAND_LINE_SIZE + NULL_TERMINATOR_LENGTH);
+            command_line.character[COMMAND_LINE_SIZE] = '\0';
+            command_line.length = strlen(command_line.character);
+            command_line.position = index;
+            if (custom_cmd_table[i].commandFunc(&command_line) == CUSTOM_RSP_OK) 
+            {
+                atp_io_send_cmd_rsp(ref,PROXY_CMD_SUCCESS,0xffff,KAL_TRUE,NULL);
+            }
+            else
+            {
+                atp_io_send_cmd_rsp(ref,PROXY_CMD_FAIL,0xffff,KAL_TRUE,NULL);
+            }
+            return KAL_TRUE;
+        }
+    }    
+
+    if (index <= 2)
+        return KAL_FALSE;
+
+    /* just a very basic example : customer can implement their own */
+    cmd_name += 3;
+    if (strcmp(cmd_name, "EXAMPLE") == 0)
+    {
+        /* BEGIN: do the following parsing and correspondent action */
+        /*                                                      */
+        /*                                                      */
+        /*                                                      */
+        /* END: do the following parsing and correspondent action    */
+
+        /* generate final result code: "OK" or "ERROR" */
+        if(KAL_TRUE)    // if operation is success
+        {
+            atp_io_send_cmd_rsp(ref,PROXY_CMD_SUCCESS,0xffff,KAL_TRUE,NULL);
+        }
+        else if (KAL_FALSE) // if operation is fail
+        {
+            atp_io_send_cmd_rsp(ref,PROXY_CMD_FAIL,0xffff,KAL_TRUE,NULL);
+        }
+        return KAL_TRUE;
+    }
+
+    /* unrecognized command */
+    /* we should return KAL_FALSE to let ATP judge if the it can handle the command */
+    return KAL_FALSE;
+
+}
+#endif
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_get_atcmd_symbol()
+* DESCRIPTION
+*   	This function returns special symbol for customer-defined AT command, 
+*   	so AT parser can recognize its a custom command and forward the string to custom_command_handler().
+*
+*     CUSTOMER DOES NOT need to modify this function.
+* PARAMETERS
+*   	none
+* RETURNS
+*     kal_uint8 
+*****************************************************************************/
+kal_uint8 custom_get_atcmd_symbol(void)
+{
+   return (CUSTOM_SYMBOL);
+}
+
+/*****************************************************************************
+* USER DEFINE CONSTANT
+*  	RMMI_CUSTOM_DCD_VALUE_IN_DATA_STATE
+* DESCRIPTION
+* 	1. This value defines the control DCD value for data mode (CSD/GPRS dialup)
+*   2. CUSTOMER CAN modify this value accroding to its TE requirement
+*****************************************************************************/
+#define RMMI_CUSTOM_DCD_VALUE_IN_DATA_STATE (1)
+
+/*****************************************************************************
+* USER DEFINE CONSTANT
+*  	RMMI_CUSTOM_DCD_VALUE_IN_CMD_STATE
+* DESCRIPTION
+* 	1. This value defines the control DCD value for AT command mode (Normal/Escaped AT)
+*   2. CUSTOMER CAN modify this value accroding to its TE requirement
+*****************************************************************************/
+#define RMMI_CUSTOM_DCD_VALUE_IN_CMD_STATE (0)
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_get_dcd_value_for_data_state()
+* DESCRIPTION
+*   	This function returns the user-defined DCD value for data state
+*
+*     CUSTOMER DOES NOT need to modify this function.
+* PARAMETERS
+*   	none
+* RETURNS
+*     kal_uint8 
+*****************************************************************************/
+kal_uint8 custom_get_dcd_value_for_data_state(void)
+{
+    return (kal_uint8) RMMI_CUSTOM_DCD_VALUE_IN_DATA_STATE;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_get_dcd_value_for_cmd_state()
+* DESCRIPTION
+*   	This function returns the user-defined DCD value for command state
+*       It shall be inverted value of custom_get_dcd_value_for_data_state()
+*     CUSTOMER DOES NOT need to modify this function.
+* PARAMETERS
+*   	none
+* RETURNS
+*     kal_uint8 
+*****************************************************************************/
+kal_uint8 custom_get_dcd_value_for_cmd_state(void)
+{
+    return (kal_uint8)RMMI_CUSTOM_DCD_VALUE_IN_CMD_STATE;
+}
+
+#ifdef __MOD_TCM__
+/*****************************************************************************
+* FUNCTION
+*  	custom_get_gprs_dialup_connect_post_string()
+* DESCRIPTION
+*   This function returns the post string right after CONNECT in gprs dialup.
+*
+*   The return string length must be less than 64
+*
+*   If post_string is XXXXXX, 
+*   then MS sends "<cr><lf>CONNECT XXXXXX<cr><lf>" when GPRS dialup
+*   Ex.1 if post_string=" 230400", 
+*        then entire output string is "<cr><lf>CONNECT 230400<cr><lf>"
+*   Ex.2 if post_string=" 56000 V42bis", 
+*        then entire output string is "<cr><lf>CONNECT 56000 V42bis<cr><lf>"
+*    
+* PARAMETERS
+*   kal_uint8 act, ACcess Technology, 
+                   This field value can be referred to TS27.007
+                   0,   GSM
+                   1,   GSM Compact
+                   2,   UTRAN
+                   3,   GSM w/EGPRS
+                   4,   UTRAN w/HSDPA
+                   5,   UTRAN w/HSUPA
+                   6,   UTRAN w/HSDPA and HSUPA
+* RETURNS
+*     kal_uint8* post_string
+*****************************************************************************/
+const kal_uint8* custom_get_gprs_dialup_connect_post_string(kal_uint8 act)
+{
+    /* Note: The return string length must be less than 64!!! */
+#ifdef __TC01__
+    #ifdef __REL8__     // note: __R7_HSDPA_PLUS_SUPPORT__ not defined
+        static const kal_uint8 post_string[] = " 42000000";  //note: user has to prepare a space here
+    #elif defined(__HSDPA_SUPPORT__)
+        static const kal_uint8 post_string[] =  " 7200000";  //note: user has to prepare a space here
+	#elif defined(__EGPRS_MODE__)
+	    static const kal_uint8 post_string[] =   " 473600";  //note: user has to prepare a space here
+	#else
+	    static const kal_uint8 post_string[] =    " 80000"; 
+	#endif
+#elif defined(__PS_DIALUP_CONNECT_STRING_BY_ACT__)
+    static kal_uint8 temp_string[64];
+    const kal_uint8* post_string = temp_string;    
+    if ((act == 0) || (act == 1) || (act == 3))
+    {
+        strncpy((kal_char*)temp_string, " 236800", sizeof(temp_string));
+    }
+    else
+    {
+    //#if defined(__REL8__) && defined(__UMTS_FDD_MODE__)
+    #if defined(__REL8__)
+        if (gmss_is_wcdma_mode_activated(l4c_current_mod_id - MOD_L4C) == KAL_TRUE) 
+        {
+            strncpy((kal_char*)temp_string, " 42000000", sizeof(temp_string));
+        }
+        else
+    #endif
+        {
+            strncpy((kal_char*)temp_string,  " 7200000", sizeof(temp_string));
+        }
+    }    
+#else
+    //Note: user MUST prepare a space before the speed number
+    static kal_uint8 temp_string[64];
+    const kal_uint8* post_string = temp_string;
+    
+    #if defined(__REL8__)
+    if (gmss_is_wcdma_mode_activated(l4c_current_mod_id - MOD_L4C) == KAL_TRUE) 
+    {
+        //#if defined(__REL8__) && defined(__UMTS_FDD_MODE__)
+        strncpy((kal_char*)temp_string, " 42000000", sizeof(temp_string));   //42Mbps
+    }
+    #endif
+    #if defined(__HSDPA_SUPPORT__)
+    if (gmss_is_wcdma_mode_activated(l4c_current_mod_id - MOD_L4C) == KAL_TRUE) 
+    {
+        //#elif defined(__HSDPA_SUPPORT__) && defined(__UMTS_FDD_MODE__)
+        strncpy((kal_char*)temp_string,  " 7200000", sizeof(temp_string));   //7.2Mbps
+    }
+    else if (gmss_is_tdscdma_mode_activated(l4c_current_mod_id - MOD_L4C) == KAL_TRUE)
+    {
+        //#elif defined(__HSDPA_SUPPORT__) && defined(__UMTS_TDD128_MODE__)
+        strncpy((kal_char*)temp_string,  " 2624000", sizeof(temp_string));   //2.6Mbps
+    }
+    #endif
+    if ((gmss_is_wcdma_mode_activated(l4c_current_mod_id - MOD_L4C) == KAL_TRUE) ||
+        (gmss_is_tdscdma_mode_activated(l4c_current_mod_id - MOD_L4C) == KAL_TRUE) )
+    {
+        //#elif defined(__UMTS_FDD_MODE__) || defined(__UMTS_TDD128_MODE__)
+        strncpy((kal_char*)temp_string,   " 384000", sizeof(temp_string));   //384kbps
+    }
+    else
+    {
+    #if defined(__EGPRS_MODE__)
+        strncpy((kal_char*)temp_string,   " 473600", sizeof(temp_string));   //473.6kbps
+    #else
+        strncpy((kal_char*)temp_string,    " 80000", sizeof(temp_string));   //80kbps  
+    #endif
+    }
+#endif
+    return (const kal_uint8*) post_string;
+} // MAUI_02386357, mtk02285, MAUI_02825172
+#endif /* __MOD_TCM__ */
+
+/*****************************************************************************
+* FUNCTION
+*  	custom_is_edit_mode_command()
+* DESCRIPTION
+*   This function is used to let customer judge if the input command is needed to enter 
+* editor mode or not. If true, we will output "> " and wait for 
+*       ctrl+z character to execute the whole command string
+*       ESC character to cancel the command
+*    
+* PARAMETERS
+*   	data    [IN]    input command string header, maximum length : 10
+* RETURNS
+*     KAL_TRUE or KAL_FALSE
+*****************************************************************************/
+kal_bool custom_is_edit_mode_command(kal_uint8 *data)
+{
+    /*if (strncmp(data, "AT%EDIT", 7) == 0)
+        return KAL_TRUE;
+    else*/
+        return KAL_FALSE;
+}
+
+
diff --git a/mcu/custom/protocol/common/ps/customer_band_block_default_setting.c b/mcu/custom/protocol/common/ps/customer_band_block_default_setting.c
new file mode 100644
index 0000000..b856124
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_band_block_default_setting.c
@@ -0,0 +1,176 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*
+**   Includes
+*/
+
+#ifdef __BAND_BLOCK__
+
+#include "kal_public_api.h" //MSBB change #include "kal_release.h"
+#include "customer_band_block_default_setting.h"
+
+/* =============================================================================
+
+[Description]
+
+kal_uint8 rr_band_block_table[] = {
+      0xff, 0xff, 0xff, 0xff, 0xff ...
+      ----------------  ----  ----
+          MCC + MNC     Band  Emergency
+              |           |       |
+              |           |       --> 0x01 => TRUE
+              |           |           0x00 => FALSE
+              |           |
+              |           ----> 0x00 => GSM 850
+              |                 0x01 => GSM 900
+              |                 0x02 => GSM 1800
+              |                 0x03 => GSM 1900
+              |
+              -----> 0x00, 0x0f, 0xff => all country
+                     0x73, 0x2f, 0xff => all networks in MCC = 732
+                     0x73, 0x20, 0x1f => MCC = 732, MNC = 01f
+
+
+[For example]
+
+Do NOT apply:
+-------------------------------------
+kal_uint8 rr_band_block_table[] = {
+    0xff, 0xff, 0xff, 0xff, 0xff, //1st set
+    0xff, 0xff, 0xff, 0xff, 0xff, //2nd set
+              ...   
+    0xff, 0xff, 0xff, 0xff, 0xff  //10th set
+};
+
+Table for Chile Entel:
+-------------------------------------
+kal_uint8 rr_band_block_table[] = {
+      0x00, 0x0f, 0xff, 0x00, 0x01,        => Block GSM band 850 for all country
+      0xff, 0xff, 0xff, 0xff, 0xff,           (emergency call allowed)
+      0xff, 0xff, 0xff, 0xff, 0xff,
+      0xff, 0xff, 0xff, 0xff, 0xff,
+      0xff, 0xff, 0xff, 0xff, 0xff,
+      0xff, 0xff, 0xff, 0xff, 0xff, 
+      0xff, 0xff, 0xff, 0xff, 0xff, 
+      0xff, 0xff, 0xff, 0xff, 0xff, 
+      0xff, 0xff, 0xff, 0xff, 0xff, 
+      0xff, 0xff, 0xff, 0xff, 0xff  
+};
+
+Table for Colombia Tigo:
+-------------------------------------
+kal_uint8 rr_band_block_table[] = {
+      0x73, 0x2f, 0xff, 0x00, 0x01,        => Block GSM band 850 for MCC 732
+      0xff, 0xff, 0xff, 0xff, 0xff,           (emergency call allowed)
+      0xff, 0xff, 0xff, 0xff, 0xff,
+      0xff, 0xff, 0xff, 0xff, 0xff,
+      0xff, 0xff, 0xff, 0xff, 0xff,
+      0xff, 0xff, 0xff, 0xff, 0xff, 
+      0xff, 0xff, 0xff, 0xff, 0xff, 
+      0xff, 0xff, 0xff, 0xff, 0xff, 
+      0xff, 0xff, 0xff, 0xff, 0xff, 
+      0xff, 0xff, 0xff, 0xff, 0xff  
+};
+
+Table for GTM, ESV, HND Claro 850MHz band block:
+-------------------------------------
+kal_uint8 rr_band_block_table[] = {
+      0x70, 0x40, 0x3f, 0x03, 0x01,        => Block GSM band 1900 for MCC 704, MNC 03
+      0x70, 0x60, 0x4f, 0x03, 0x01,        => Block GSM band 1900 for MCC 706, MNC 04
+      0x70, 0x8f, 0xff, 0x00, 0x01,        => Block GSM band 850 for MCC 708, 706, 704
+      0x70, 0x6f, 0xff, 0x00, 0x01,           (emergency call all allowed)
+      0x70, 0x4f, 0xff, 0x00, 0x01,
+      0xff, 0xff, 0xff, 0x00, 0xff, 
+      0xff, 0xff, 0xff, 0xff, 0xff, 
+      0xff, 0xff, 0xff, 0xff, 0xff, 
+      0xff, 0xff, 0xff, 0xff, 0xff, 
+      0xff, 0xff, 0xff, 0xff, 0xff 
+};
+      
+============================================================================= */
+
+#define RR_MAX_BAND_BLOCK_LIST_SIZE 10 /* MAX for 10; DO NOT modify it! */
+
+kal_uint8 rr_band_block_table[] = 
+{
+    0xff, 0xff, 0xff, 0xff, 0xff, /* 1st set */
+    0xff, 0xff, 0xff, 0xff, 0xff, /* 2nd set */
+    0xff, 0xff, 0xff, 0xff, 0xff, /* 3rd set */
+    0xff, 0xff, 0xff, 0xff, 0xff, /* 4th set */
+    0xff, 0xff, 0xff, 0xff, 0xff, /* 5th set */
+    0xff, 0xff, 0xff, 0xff, 0xff, /* 6th set */
+    0xff, 0xff, 0xff, 0xff, 0xff, /* 7th set */
+    0xff, 0xff, 0xff, 0xff, 0xff, /* 8th set */
+    0xff, 0xff, 0xff, 0xff, 0xff, /* 9th set */
+    0xff, 0xff, 0xff, 0xff, 0xff  /* 10th set */
+};
+
+
+//void rr_init_default_band_block_value(kal_uint8 *data);
+
+/*****************************************************************************
+* FUNCTION
+*  rr_init_default_band_block_value
+*
+* DESCRIPTION
+*   This function is used to initialize the default band block settings at the
+*   first power-on of the MS.
+*   Then, we could modify the data by accessing NVRAM (NVRAM editor).
+*
+* PARAMETERS
+*   kal_uint8 *data - input NULL data pool
+*
+* RETURNS
+*
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+void rr_init_default_band_block_value(kal_uint8 *data)
+{
+    kal_uint8 i = 0;
+
+    /* write length */
+    data[i] = RR_MAX_BAND_BLOCK_LIST_SIZE;
+        
+    /* init all data */
+    for (i = 0; i < (RR_MAX_BAND_BLOCK_LIST_SIZE*5); i++)
+    {
+        /* write data */
+        data[i + 1] = rr_band_block_table[i];
+    }
+}
+
+#endif /* __BAND_BLOCK__ */
+
diff --git a/mcu/custom/protocol/common/ps/customer_band_block_default_setting.h b/mcu/custom/protocol/common/ps/customer_band_block_default_setting.h
new file mode 100644
index 0000000..2d6dafd
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_band_block_default_setting.h
@@ -0,0 +1,44 @@
+/*****************************************************************************
+*  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 _CUSTOMER_BAND_BLOCK_DEFAULT_SETTING_H
+#define _CUSTOMER_BAND_BLOCK_DEFAULT_SETTING_H
+
+#ifdef __BAND_BLOCK__
+
+void rr_init_default_band_block_value(kal_uint8 *data);
+
+#endif
+
+#endif
diff --git a/mcu/custom/protocol/common/ps/customer_cb_service_by_plmn.c b/mcu/custom/protocol/common/ps/customer_cb_service_by_plmn.c
new file mode 100644
index 0000000..5267be3
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_cb_service_by_plmn.c
@@ -0,0 +1,109 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*
+**   Includes
+*/
+#include "kal_general_types.h"
+#include "string.h"
+
+/* 
+** For customer to define which PLMN has 3G CB service 
+** 
+*/
+#define SMSAL_CB_SERVICE_PLMN_NUMBER  10
+
+char* cb_service_plmn_table[SMSAL_CB_SERVICE_PLMN_NUMBER] = {
+
+    "46601", "46697", "fffff", "fffff", "fffff", "fffff", "fffff", "fffff", "fffff", "fffff"
+    //FET,     TWN
+};
+
+
+kal_uint8 smsal_cb_get_service_plmn_num (void);
+void smsal_cb_get_service_plmn(kal_uint8 i, kal_uint8 * plmn);
+
+
+/*****************************************************************************
+* FUNCTION
+*  smsal_cb_get_service_plmn_num
+* DESCRIPTION
+*   This function is used to get the number of PLMN table entries.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 smsal_cb_get_service_plmn_num (void)
+{
+   return (SMSAL_CB_SERVICE_PLMN_NUMBER);
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  smsal_cb_get_service_plmn
+* DESCRIPTION
+*  This function gives the PLMN for the specified entry.
+*
+* PARAMETERS
+*  IN	i : specified the i-th entry
+*  OUT	plmn
+*  
+* RETURNS
+*  void
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+void smsal_cb_get_service_plmn(kal_uint8 i, kal_uint8 * plmn)
+{
+    plmn[0]='f';
+	
+	
+	if( i >= SMSAL_CB_SERVICE_PLMN_NUMBER)
+		return;
+	
+	if(strlen((char *)cb_service_plmn_table[i])>0)
+	{
+		strcpy((char *)plmn,(char *)cb_service_plmn_table[i]);
+		
+	}
+	return;
+}
+
+
diff --git a/mcu/custom/protocol/common/ps/customer_cm_retry_count.c b/mcu/custom/protocol/common/ps/customer_cm_retry_count.c
new file mode 100644
index 0000000..27a707e
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_cm_retry_count.c
@@ -0,0 +1,127 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*
+**   Includes
+*/
+#include "kal_general_types.h"
+
+/* For customer define the CM Layer retry count */
+#define MAX_CM_RETRY_COUNT  2
+
+/* For customer define the CM Layer retry timer between each retry, unit is 0.1 second */
+#define CM_RETRY_TIMER  30
+
+#define CM_RETRY_SS_TIMER_WAIT_FOR_CONN_REL  70
+
+/* this CALL_RETRY_MAX_TIMER is obsoleted,
+* the call retry total duration is now configured by  VDM in NVRAM_EF_VDM_ADS_PROFILE_LID
+*    nvram_ef_vdm_ads_profile_struct -> profile_normal/profile_emerg
+*        ->general_setting_normal/general_setting_emerg -> ads_guard_timer_length_min/ads_guard_timer_length_sec
+*/
+/* For customer define the CM Layer retry timer for total duration */
+//#define CALL_RETRY_MAX_TIMER 30
+
+kal_uint8 cm_max_retry_count (void);
+
+kal_uint8 cm_retry_timer (void);
+
+kal_uint8 cm_retry_ss_timer_wait_for_conn_rel (void);
+
+/*****************************************************************************
+* FUNCTION
+*  cm_max_retry_count
+* DESCRIPTION
+*   This function is used to define the max
+*   CM layer retry count for SS operation
+*   note: CS-CC retry count is now controlled by VDM in NVRAM_EF_VDM_ADS_PROFILE_LID
+*    nvram_ef_vdm_ads_profile_struct -> profile_normal/profile_emerg
+*        ->general_setting_normal/general_setting_emerg -> max_attempt_consecutive_cs_num
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 cm_max_retry_count (void)
+{
+   return (MAX_CM_RETRY_COUNT);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  cm_retry_timer
+* DESCRIPTION
+*   This function is used to define the 
+*   CM layer retry timer for SS operation
+*   note: CS-CC retry timer for normal call is now controlled by VDM in NVRAM_EF_VDM_ADS_PROFILE_LID
+*    nvram_ef_vdm_ads_profile_struct -> profile_normal -> timer_length_retry_wg_cs_timer
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 cm_retry_timer (void)
+{
+   return (CM_RETRY_TIMER);
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  cm_retry_ss_timer_wait_for_conn_rel
+* DESCRIPTION
+*   This function is used to define the 
+*   CM layer retry timer for SS operation when MM sends WAIT_FOR_CONN_REL cause
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 cm_retry_ss_timer_wait_for_conn_rel (void)
+{
+   return (CM_RETRY_SS_TIMER_WAIT_FOR_CONN_REL);
+}
+
diff --git a/mcu/custom/protocol/common/ps/customer_cmux_setting.c b/mcu/custom/protocol/common/ps/customer_cmux_setting.c
new file mode 100644
index 0000000..c9fd04b
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_cmux_setting.c
@@ -0,0 +1,440 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * customer_cmux_setting.c
+ *
+ * Project:
+ * --------
+ *   MAUI Project
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the setting of CMUX.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifdef __CMUX_SUPPORT__
+/******************************************************************************/
+
+/*========================================================================
+ *  CAUTION !! CAUTION !! CAUTION !! CAUTION !! CAUTION !! CAUTION !!
+ *
+ *  Please DO NOT modify code below.
+ *
+ *  CAUTION !! CAUTION !! CAUTION !! CAUTION !! CAUTION !! CAUTION !!
+ *======================================================================= */
+
+/******************************************************************************/
+
+//#include "kal_release.h"
+
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "cmux_public_def.h"
+
+/******************************************************************************/
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+#define CMUX_CL1 	0x00      //  Type 1 -unstructured stream
+#define CMUX_CL2 	0x01      //  Type 2 - unstructured stream with modem status
+#define CMUX_CL3 	0x02      //  Type 3 - uninterruptible Framed Data
+#define CMUX_CL4 	0x03      //  Type 4 - Interruptible  Framed data
+
+#define CMUX_MAX_DCLI_NUM (64)
+
+#define CMUX_CH_BUFFER( Type, txBuf, rxBuf, rxLThreshold, rxHThreshold) 
+#define CMUX_CH_CONFIG( DLCI, CL, P, N1, O)
+#include "customer_cmux_setting.h"
+#undef CMUX_CH_BUFFER
+#undef CMUX_CH_CONFIG
+
+/******************************************************************************/
+
+static kal_uint8 g_channel_num = 
+#define CMUX_CH_BUFFER( Type, txBuf, rxBuf, rxLThreshold, rxHThreshold) 1 +
+#define CMUX_CH_CONFIG( DLCI, CL, P, N1, O)
+	#include "customer_cmux_setting.h"
+#undef CMUX_CH_BUFFER
+#undef CMUX_CH_CONFIG
+		0 ;
+
+/******************************************************************************/
+
+static kal_uint8 g_rx_buffer[
+#define CMUX_CH_BUFFER( Type, txBuf, rxBuf, rxLThreshold, rxHThreshold) rxBuf +
+#define CMUX_CH_CONFIG( DLCI, CL, P, N1, O)
+	#include "customer_cmux_setting.h"
+#undef CMUX_CH_BUFFER
+#undef CMUX_CH_CONFIG
+	0
+];
+
+static kal_uint8 g_tx_buffer[
+#define CMUX_CH_BUFFER( Type, txBuf, rxBuf, rxLThreshold, rxHThreshold) txBuf +
+#define CMUX_CH_CONFIG( DLCI, CL, P, N1, O)
+	#include "customer_cmux_setting.h"
+#undef CMUX_CH_BUFFER
+#undef CMUX_CH_CONFIG
+	0
+];
+
+/******************************************************************************/
+
+typedef struct {
+
+	kal_uint8 	channel_type;
+	
+    kal_uint32 	tx_buffer_size;
+
+    kal_uint32 	rx_buffer_size;
+    kal_uint32 	rx_low_threshold;
+    kal_uint32 	rx_high_threshold;
+
+	kal_uint8 *	tx_buffer;
+	kal_uint8 *	rx_buffer;
+	
+}DlcBufStructT;
+
+static DlcBufStructT g_dlc_buffer_config[] = {
+#define CMUX_CH_BUFFER( Type, txBuf, rxBuf, rxLThreshold, rxHThreshold) \
+		{ Type, txBuf, rxBuf, rxLThreshold, rxHThreshold, NULL, NULL },
+#define CMUX_CH_CONFIG( DLCI, CL, P, N1, O)
+	#include "customer_cmux_setting.h"
+#undef CMUX_CH_BUFFER
+#undef CMUX_CH_CONFIG
+};
+
+/******************************************************************************/
+
+typedef struct {
+
+    kal_uint8   dlci;		
+	kal_uint8 	cltype;		
+    kal_uint8   priority;
+    kal_uint16  n1;
+    module_type owner;
+	
+}DlcConfigStructT;
+
+static DlcConfigStructT g_dlc_pn_config[] = {
+#define CMUX_CH_BUFFER( Type, txBuf, rxBuf, rxLThreshold, rxHThreshold)
+#define CMUX_CH_CONFIG( DLCI, CL, P, N1, O) { (DLCI), (CL), (P), (N1), (O)},
+	#include "customer_cmux_setting.h"
+#undef CMUX_CH_BUFFER
+#undef CMUX_CH_CONFIG
+};
+
+/******************************************************************************/
+
+kal_uint8* cmux_getDlcRxBuffer(kal_uint8 channel, kal_uint32 *size, 
+	kal_uint32 *low_threshold, kal_uint32 *high_threshold)
+{
+	if( channel >= g_channel_num ) 
+	{
+		ASSERT(0);
+	}
+
+    *size = g_dlc_buffer_config[channel].rx_buffer_size;
+    *low_threshold  = g_dlc_buffer_config[channel].rx_low_threshold;
+    *high_threshold  = g_dlc_buffer_config[channel].rx_high_threshold;
+
+	if ( g_dlc_buffer_config[channel].channel_type == CMUX_NDIS_CHANNEL ) 
+	{
+		*size = 0;	
+    	return NULL;
+	}
+	else if( g_dlc_buffer_config[channel].rx_buffer == NULL )
+	{
+		kal_uint8 * rx_buf = g_rx_buffer;
+		kal_uint8 	i;
+	
+		for(i=0;i<channel;i++)
+			rx_buf += g_dlc_buffer_config[i].rx_buffer_size;
+		g_dlc_buffer_config[channel].rx_buffer = rx_buf;
+	}
+    return g_dlc_buffer_config[channel].rx_buffer;
+}
+
+kal_uint8* cmux_getDlcTxBuffer( kal_uint8 channel, kal_uint32 *size)
+{
+	if( channel >= g_channel_num ) 
+	{
+		ASSERT(0);
+	}
+
+    *size = g_dlc_buffer_config[channel].tx_buffer_size;
+	
+	if ( g_dlc_buffer_config[channel].channel_type == CMUX_NDIS_CHANNEL ) 
+	{
+		*size = 0;
+    	return NULL;
+	}
+	else if( g_dlc_buffer_config[channel].tx_buffer == NULL )
+	{
+		kal_uint8 * tx_buf = g_tx_buffer;
+		kal_uint8 	i;
+		
+		for(i=0;i<channel;i++)
+			tx_buf += g_dlc_buffer_config[i].tx_buffer_size;
+		g_dlc_buffer_config[channel].tx_buffer = tx_buf;
+	}
+    return g_dlc_buffer_config[channel].tx_buffer;
+}
+
+kal_uint8 cmux_get_channel_def(kal_uint8 channel)
+{
+	if( channel >= g_channel_num ) 
+	{
+		ASSERT(0);
+	}
+
+    return g_dlc_buffer_config[channel].channel_type;
+}
+
+kal_bool cmux_custom_isPrePn(void)
+{
+    return CMUX_CHANNEL_PRE_PN;
+}
+
+kal_uint8 cmux_custom_getChannelDlci(kal_uint8 channel)
+{
+	if( (channel >= g_channel_num) || ( g_dlc_pn_config[channel].dlci > CMUX_MAX_DCLI_NUM )) 
+	{
+		ASSERT(0);
+	}
+
+    return g_dlc_pn_config[channel].dlci;
+}
+
+kal_uint8 cmux_custom_getChannelClType(kal_uint8 channel)
+{
+	if( channel >= g_channel_num || ( g_dlc_pn_config[channel].cltype == CMUX_CL3 ) ) 
+	{
+		ASSERT(0);
+	}
+
+	return g_dlc_pn_config[channel].cltype;
+}
+
+kal_uint8 cmux_custom_getChannelPriority(kal_uint8 channel)
+{
+	if( channel >= g_channel_num ) 
+	{
+		ASSERT(0);
+	}
+
+	return g_dlc_pn_config[channel].priority;
+}
+
+kal_uint16 cmux_custom_getChannelN1(kal_uint8 channel)
+{
+	if( channel >= g_channel_num || ( g_dlc_pn_config[channel].n1 < 16 ) 
+        || ( g_dlc_pn_config[channel].n1 > 1510 ) ) 
+	{
+		ASSERT(0);
+	}
+
+	return g_dlc_pn_config[channel].n1;
+}
+
+module_type cmux_custom_getChannelOwner(kal_uint8 channel)
+{
+	if( channel >= g_channel_num ) 
+	{
+		ASSERT(0);
+	}
+
+	return g_dlc_pn_config[channel].owner;
+}
+
+/******************************************************************************/
+#endif
+
diff --git a/mcu/custom/protocol/common/ps/customer_cmux_setting.h b/mcu/custom/protocol/common/ps/customer_cmux_setting.h
new file mode 100644
index 0000000..ec887be
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_cmux_setting.h
@@ -0,0 +1,605 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * customer_cmux_setting.h
+ *
+ * Project:
+ * --------
+ *   MAUI Project
+ *
+ * Description:
+ * ------------
+ *   
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifndef CUSTOMER_CMUX_SETTING_H
+#define CUSTOMER_CMUX_SETTING_H 
+/******************************************************************************/
+
+#include "global_def.h"
+
+/******************************************************************************/
+
+/*===================== Guideline of CMUX configuration ==========================
+
+CMUX_CHANNEL_PRE_PN
+>> This configuration refers to the following CMUX_CH_CONFIG taking effect or not
+
+DEFAULT_XXX
+>> These vaules are suggested settings of each channel type
+
+CMUX_CH_BUFFER(	Channel Type, TX Buffer Size, RX Buffer Size, RX Low Threshold, RX High Threshold)
+>> Config chanel type and buffer related configuration
+
+CMUX_CH_CONFIG( DLCi, Convergence Layers Type, Priority, N1)
+>> Pre-config CMUX DLC related parameters
+
+========================================================================== */
+
+/******************************************************************************/
+                                                            
+#if defined(__ANDROID_MODEM__) || defined(__MODEM_CARD__) || defined(__DUAL_TALK_MODEM_SUPPORT__)
+#define CMUX_CHANNEL_PRE_PN			KAL_TRUE
+#else
+#define CMUX_CHANNEL_PRE_PN			KAL_FALSE
+#endif
+
+/******************************************************************************/
+
+#define DEFAULT_N1 	512
+#define DEFAULT_CL  CMUX_CL1
+
+/******************************************************************************/
+
+/* AT_CMD_CHANNEL */
+#ifdef __TC01__
+#define DEFAULT_CMD_BUF_SIZE                     2048
+#else
+#define DEFAULT_CMD_BUF_SIZE                     1024
+#endif
+#define DEFAULT_CMD_HIGH_THRESHOLD          512
+#define DEFAULT_CMD_N1                      DEFAULT_N1
+#define DEFAULT_CMD_CL                      DEFAULT_CL
+
+/* AT_DATA_CHANNEL */
+#define DEFAULT_DATA_BUF_SIZE               16384 	// WM_DUN_FLC, MAUI_01679336, mtk02285, 20090430
+#define DEFAULT_DATA_HIGH_THRESHOLD         6144 
+#define DEFAULT_DATA_N1                     DEFAULT_N1
+#define DEFAULT_DATA_CL                     DEFAULT_CL
+
+/* __VT_TRANSPORT_SUPPORT__ */
+#define DEFAULT_VT_TX_BUFFER_SIZE           1281        //1281    // Jeffery 
+#define DEFAULT_VT_RX_BUFFER_SIZE           1281        //1281
+#define DEFAULT_VT_RX_LOW_THRESHOLD         320         //320
+#define DEFAULT_VT_RX_HIGH_THRESHOLD        480         //480
+
+/* __DATA_CARD_SPEECH__ */
+#define DEFAULT_CS_BUFFER_SIZE              12289       //1024*12+1 
+#define DEFAULT_CS_LOW_THRESHOLD            2048        //1024*2
+#define DEFAULT_CS_HIGH_THRESHOLD           8192        //1024*8
+
+/******************************************************************************/
+#endif /* CUSTOMER_CMUX_SETTING_H */
+
+#ifdef __L5_SUPPORT__
+#define MOD_ATP_IO MOD_L5IO
+#endif
+
+/******************************************************************************/
+
+/* CHANNEL_0 Settings */
+CMUX_CH_BUFFER( CMUX_CONTROL_CHANNEL,	 256,  256, 0,  192 )
+CMUX_CH_CONFIG( 0,  CMUX_CL1,  0, 512, MOD_NIL)
+
+/******************************************************************************/
+
+/* CHANNEL_1 Settings */
+CMUX_CH_BUFFER( CMUX_DATA_CHANNEL, DEFAULT_DATA_BUF_SIZE, DEFAULT_DATA_BUF_SIZE, 0, DEFAULT_DATA_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 1,  DEFAULT_DATA_CL, 20, DEFAULT_DATA_N1, MOD_ATP_IO)
+
+/* CHANNEL_2 Settings */
+CMUX_CH_BUFFER( CMUX_URC_CHANNEL,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 2,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_3 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 3,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+#if defined(__ANDROID_MODEM__) || defined(__DUAL_TALK_MODEM_SUPPORT__) || defined(__EIGHT_PORT_MODULE__)
+/* CHANNEL_4 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 4,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_5 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 5,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+#endif
+
+/******************************************************************************/
+
+#if defined(__GEMINI__)
+
+/******************************************************************************/
+
+#if ( MAX_SIM_NUM > 1 )
+
+/* CHANNEL_6 Settings */
+CMUX_CH_BUFFER( CMUX_DATA_CHANNEL_2, DEFAULT_DATA_BUF_SIZE, DEFAULT_DATA_BUF_SIZE, 0, DEFAULT_DATA_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 6,  DEFAULT_DATA_CL, 20, DEFAULT_DATA_N1, MOD_ATP_IO)
+
+/* CHANNEL_7 Settings */
+CMUX_CH_BUFFER( CMUX_URC_CHANNEL_2,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 7,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_8 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_2,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 8,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+#if defined(__ANDROID_MODEM__) || defined(__DUAL_TALK_MODEM_SUPPORT__) || defined(__EIGHT_PORT_MODULE__)
+/* CHANNEL_9 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_2,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 9,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_10 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_2,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 10,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+#endif
+
+#endif
+
+/******************************************************************************/
+
+#if ( MAX_SIM_NUM > 2 )
+
+/* CHANNEL_11 Settings */
+CMUX_CH_BUFFER( CMUX_DATA_CHANNEL_3, DEFAULT_DATA_BUF_SIZE, DEFAULT_DATA_BUF_SIZE, 0, DEFAULT_DATA_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 11,  DEFAULT_DATA_CL, 20, DEFAULT_DATA_N1, MOD_ATP_IO)
+
+/* CHANNEL_12 Settings */
+CMUX_CH_BUFFER( CMUX_URC_CHANNEL_3,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 12,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_13 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_3,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 13,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+#if defined(__ANDROID_MODEM__) || defined(__DUAL_TALK_MODEM_SUPPORT__) || defined(__EIGHT_PORT_MODULE__)
+/* CHANNEL_14 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_3,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 14,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_15 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_3,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 15,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+#endif
+
+#endif
+
+/******************************************************************************/
+
+#if ( MAX_SIM_NUM > 3 )
+
+/* CHANNEL_16 Settings */
+CMUX_CH_BUFFER( CMUX_DATA_CHANNEL_4, DEFAULT_DATA_BUF_SIZE, DEFAULT_DATA_BUF_SIZE, 0, DEFAULT_DATA_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 16,  DEFAULT_DATA_CL, 20, DEFAULT_DATA_N1, MOD_ATP_IO)
+
+/* CHANNEL_17 Settings */
+CMUX_CH_BUFFER( CMUX_URC_CHANNEL_4,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 17,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_18 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_4,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 18,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+#if defined(__ANDROID_MODEM__) || defined(__DUAL_TALK_MODEM_SUPPORT__) || defined(__EIGHT_PORT_MODULE__)
+/* CHANNEL_19 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_4,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 19,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_20 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_4,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 20,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+#endif
+
+#endif
+
+/******************************************************************************/
+
+#endif /* __GEMINI__ || __MMDC_DS__ */ 
+
+/******************************************************************************/
+
+/* CHANNEL_24 Settings */
+#ifdef __VT_TRANSPORT_SUPPORT__
+CMUX_CH_BUFFER( CMUX_VT_CHANNEL, DEFAULT_VT_TX_BUFFER_SIZE, DEFAULT_VT_RX_BUFFER_SIZE, DEFAULT_VT_RX_LOW_THRESHOLD, DEFAULT_VT_RX_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 24,  DEFAULT_CL, 15, DEFAULT_N1, MOD_VT) // DLCI=24, Priority=15 (between CMD and DATA)
+#endif /* __VT_TRANSPORT_SUPPORT__ */
+
+/******************************************************************************/
+
+/* CHANNEL_25 Settings */
+#ifdef __DATA_CARD_SPEECH__
+CMUX_CH_BUFFER( CMUX_CS_CHANNEL, DEFAULT_CS_BUFFER_SIZE, DEFAULT_CS_BUFFER_SIZE, DEFAULT_CS_LOW_THRESHOLD, DEFAULT_CS_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 25,  DEFAULT_CL, 16, DEFAULT_N1, MOD_MED)
+#endif /* __DATA_CARD_SPEECH__ */
+
+/******************************************************************************/
+
+/* CHANNEL_26 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 26,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+#if defined(__GEMINI__)
+#if ( MAX_SIM_NUM > 1 )
+/* CHANNEL_27 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_2,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 27,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+#endif
+
+#if ( MAX_SIM_NUM > 2 )
+/* CHANNEL_28 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_3,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 28,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+#endif
+
+#if ( MAX_SIM_NUM > 3 )
+/* CHANNEL_29 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_4,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 29,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+#endif
+#endif /* __GEMINI__ */
+
+/******************************************************************************/
+
+/* CHANNEL_30 Settings */
+
+/******************************************************************************/
+
+/* CHANNEL_31 Settings (IMS) */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 31,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_32 Settings (IMS) */
+CMUX_CH_BUFFER( CMUX_URC_2_CHANNEL,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 32,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/******************************************************************************/
+
+/* CHANNEL_33 Settings (IMS_SMS) */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 33,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_34 Settings (IMS_SMS) */
+CMUX_CH_BUFFER( CMUX_URC_3_CHANNEL,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 34,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/******************************************************************************/
+
+/* CHANNEL_35 Settings (IMS_SMS) */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_2,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 35,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_36 Settings (IMS_SMS) */
+CMUX_CH_BUFFER( CMUX_URC_3_CHANNEL,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 36,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/******************************************************************************/
+
+/* CHANNEL_43 Settings (VSIM)*/
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL, DEFAULT_CMD_BUF_SIZE, DEFAULT_CMD_BUF_SIZE, 0, DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 43,  DEFAULT_CMD_CL, 10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+#if ( MAX_SIM_NUM > 1 )
+/* CHANNEL_42 Settings (VSIM)*/
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_2, DEFAULT_CMD_BUF_SIZE, DEFAULT_CMD_BUF_SIZE, 0, DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 42,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+#endif
+
+#if ( MAX_SIM_NUM > 2 )
+/* CHANNEL_41 Settings (VSIM)*/
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_3, DEFAULT_CMD_BUF_SIZE, DEFAULT_CMD_BUF_SIZE, 0, DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 41,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+#endif
+
+#if ( MAX_SIM_NUM > 3 )
+/* CHANNEL_40 Settings (VSIM)*/
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_4, DEFAULT_CMD_BUF_SIZE, DEFAULT_CMD_BUF_SIZE, 0, DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 40,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+#endif
+
+/******************************************************************************/
+ 
+/* CHANNEL_45 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL, DEFAULT_CMD_BUF_SIZE, DEFAULT_CMD_BUF_SIZE, 0, DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 45,  DEFAULT_CMD_CL, 10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_44 Settings */
+CMUX_CH_BUFFER( CMUX_URC_4_CHANNEL,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 44,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+
+/******************************************************************************/
+
+
+/******************************************************************************/
+//Folling are new extensions for RILD, and index is decreased from 63
+//Currently, we assign 4 channels for each sim (61-46)
+/******************************************************************************/
+
+/* CHANNEL_61 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 61,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_60 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 60,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_59 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 59,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_58 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 58,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+
+/******************************************************************************/
+
+#if defined(__GEMINI__)
+
+/******************************************************************************/
+
+#if ( MAX_SIM_NUM > 1 )
+
+/* CHANNEL_57 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_2,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 57,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_56 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_2,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 56,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_55 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_2,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 55,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_54 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_2,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 54,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+#endif
+
+/******************************************************************************/
+
+#if ( MAX_SIM_NUM > 2 )
+
+/* CHANNEL_53 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_3,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 53,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_52 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_3,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 52,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_51 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_3,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 51,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_50 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_3,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 50,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+#endif
+
+/******************************************************************************/
+
+#if ( MAX_SIM_NUM > 3 )
+
+/* CHANNEL_49 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_4,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 49,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_48 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_4,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 48,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_47 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_4,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 47,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+/* CHANNEL_46 Settings */
+CMUX_CH_BUFFER( CMUX_CMD_CHANNEL_4,  DEFAULT_CMD_BUF_SIZE,  DEFAULT_CMD_BUF_SIZE, 0,  DEFAULT_CMD_HIGH_THRESHOLD )
+CMUX_CH_CONFIG( 46,  DEFAULT_CMD_CL,  10, DEFAULT_CMD_N1, MOD_ATP_IO)
+
+#endif
+
+/******************************************************************************/
+#endif
+
+/******************************************************************************/
+//End of new channel extensions for RILD
+/******************************************************************************/
diff --git a/mcu/custom/protocol/common/ps/customer_gas_command.c b/mcu/custom/protocol/common/ps/customer_gas_command.c
new file mode 100644
index 0000000..bfe96f2
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_gas_command.c
@@ -0,0 +1,97 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*****************************************************************************
+ * Filename:
+ * ---------
+ * Custom_gas_command.c
+ *
+ * Description:
+ * ------------
+ *   This file is intends for Customer to implement gas command 
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+*****************************************************************************/
+#include "stdio.h"
+#include "string.h"
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "customer_gas_command.h"
+
+module_type gas_mod_map_table[GAS_MAX_MODULE_COUNT]={0};
+
+module_type gas_mod_table[GAS_MAX_MODULE_COUNT] = 
+{
+    MOD_L4C,
+    MOD_L4C,
+    MOD_CSM
+};
+
+kal_char *gas_cmd_table[GAS_MAX_MODULE_COUNT] = 
+{
+    "CL4C",
+    "CL4C",
+    "CCSM"
+};
+
+kal_uint8 rmmi_gas_max_module_count(void)
+{
+    return GAS_MAX_MODULE_COUNT;
+}
+
diff --git a/mcu/custom/protocol/common/ps/customer_gas_command.h b/mcu/custom/protocol/common/ps/customer_gas_command.h
new file mode 100644
index 0000000..3c02c79
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_gas_command.h
@@ -0,0 +1,75 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*****************************************************************************
+ * Filename:
+ * ---------
+ * Custom_gas_command.h
+ *
+ * Description:
+ * ------------
+ *   This file is intends for Customer to implement gas command 
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+*****************************************************************************/
+
+#define GAS_MAX_MODULE_COUNT 3
+extern kal_uint8 rmmi_gas_max_module_count(void);
+
+extern module_type gas_mod_map_table[];
+
+extern module_type gas_mod_table[];
+
+extern kal_char *gas_cmd_table[] ;
+
+//extern kal_uint8 rmmi_gas_max_module_count(void);
+
+
diff --git a/mcu/custom/protocol/common/ps/customer_l4c_msghdlr.c b/mcu/custom/protocol/common/ps/customer_l4c_msghdlr.c
new file mode 100644
index 0000000..a560c0d
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_l4c_msghdlr.c
@@ -0,0 +1,143 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * Customer_l4c_msghdlr.c
+ *
+ * Project:
+ * --------
+ *   MT6208
+ *
+ * Description:
+ * ------------
+ *   This file is intends for �K.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ ****************************************************************************/
+
+/********************************************************************************
+*  Copyright Statement:
+*  --------------------
+*
+*  This product has been developed using a protocol stack
+*  developed by Sasken Communication Technologies Limited.
+*
+********************************************************************************/
+
+#include "kal_public_api.h"
+#include "kal_public_defs.h" //MSBB change #include "stack_msgs.h"
+/*
+#ifdef __MODEM_CARD__
+#include "ps_public_l4_msgid.h"
+#include "ps_public_struct.h"
+#include "l4c_utility.h"
+#include "l4c_nw_cmd.h"
+#include "l4c_common_enum.h"
+#endif
+*/
+void customer_l4c_msghdlr(ilm_struct* ilm_ptr);
+
+void customer_l4c_msghdlr(ilm_struct* ilm_ptr)
+{
+    /*****************************************
+    switch(ilm_ptr->msg_id){
+        case MSG_ID_CUSTOM_MESSAGE:	
+        
+            // customer can handle their own message here
+        
+            custom_message_handler(ilm_ptr->local_para_ptr, ilm_ptr->peer_buff_ptr);
+            break;
+
+        default:
+
+            // if customer want to handle some undefined message
+            // they can write the handler codes here
+        
+            custom_undefined_messages_handler();
+            break;
+    }
+    #endif
+    *****************************************/
+/*
+    switch(ilm_ptr->msg_id)
+    {
+    #ifdef __MODEM_CARD__
+        case MSG_ID_L4C_USB_SUSPEND_REQ:
+        {
+            l4c_usb_suspend_req_struct *param_ptr = (l4c_usb_suspend_req_struct*)ilm_ptr->local_para_ptr;
+            
+            if (l4c_get_cfun_state() == 1)
+            {
+                if (param_ptr->remote_wakeup_enable == KAL_TRUE)
+                {
+                #if defined(__NO_PSDATA_SEND_SCRI__) || defined(__FAST_DORMANCY__)
+                    l4c_nw_set_fd_mode_req(L4C_SRC, 1);
+                #endif
+                }
+                else
+                {
+                    l4c_nw_cfun_state_req(L4C_SRC, 4);
+                }
+            }
+            break;
+        }
+
+        case MSG_ID_L4C_USB_RESUME_REQ:
+        {
+        #if defined(__NO_PSDATA_SEND_SCRI__) || defined(__FAST_DORMANCY__)
+            l4c_nw_set_fd_mode_req(L4C_SRC, 0);
+        #endif
+            
+            if (l4c_get_cfun_state() == 4)
+            {
+                l4c_nw_cfun_state_req(L4C_SRC, 1);
+            }
+
+            break;
+        }
+    #endif
+        default:
+            break;
+    }
+*/
+}
+
+
diff --git a/mcu/custom/protocol/common/ps/customer_mbim_config.c b/mcu/custom/protocol/common/ps/customer_mbim_config.c
new file mode 100644
index 0000000..9bbfade
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_mbim_config.c
@@ -0,0 +1,197 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*
+**   Includes
+*/
+#include "customer_mbim_config.h"
+#include "mbim_defs.h"
+
+/*
+** Default timer value in seconds.
+** (1) In MBIM_SIGNAL_STATE_REPORT_MODE_DEFAULT mode, if SignalStrengthInterval = 0 in MBIM_CID_SIGNAL_STATE we will use this value.
+** (2) In MBIM_SIGNAL_STATE_REPORT_MODE_CUSTOM mode, we dont care SignalStrengthInterval in MBIM_CID_SIGNAL_STATE and just use this value.
+** If you dont want to start a timer, set it to 0xffffffff
+*/
+#define MBIM_SIGNAL_STATE_REPORT_TIME 5
+
+/*
+** This is the difference in RSSI coded values that trigger a report.
+** (1) In MBIM_SIGNAL_STATE_REPORT_MODE_DEFAULT mode, if RssiThreshold = 0 in MBIM_CID_SIGNAL_STATE we will use this value.
+** (2) In MBIM_SIGNAL_STATE_REPORT_MODE_CUSTOM mode, we dont care RssiThreshold in MBIM_CID_SIGNAL_STATE and just use this value.
+**
+*/
+#define MBIM_DEFAULT_RSSI_THRESHOLD 3
+
+/*
+** This is the difference in error rate coded values that trigger a report.
+** (1) In MBIM_SIGNAL_STATE_REPORT_MODE_DEFAULT mode, if ErrorRateThreshold = 0 in MBIM_CID_SIGNAL_STATE we will use this value.
+** (2) In MBIM_SIGNAL_STATE_REPORT_MODE_CUSTOM mode, we dont care ErrorRateThreshold in MBIM_CID_SIGNAL_STATE and just use this value.
+*/
+#define MBIM_DEFAULT_ERROR_RATE_THRESHOLD 1
+
+
+/*****************************************************************************
+* FUNCTION
+*  custom_mbim_signal_state_report_mode
+* DESCRIPTION
+*   This function is used to get MBIM signal state report mode
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 custom_mbim_signal_state_report_mode (void)
+{
+  /* 
+    ** For customer to define how to report signal state
+    ** MBIM_SIGNAL_STATE_REPORT_MODE_DEFAULT: report signal state according to MBIM_CID_SIGNAL_STATE SET command.
+    ** MBIM_SIGNAL_STATE_REPORT_MODE_CUSTOM: Customers can define report timer, RSSI threshold, error rate threshold.
+    **
+    */
+
+   return (MBIM_SIGNAL_STATE_REPORT_MODE_DEFAULT);
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  custom_mbim_signal_state_report_time
+* DESCRIPTION
+*   This function is used to get default MBIM signal state report timer value 
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint32
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint32 custom_mbim_signal_state_report_time (void)
+{
+   return (MBIM_SIGNAL_STATE_REPORT_TIME);
+}
+
+/*****************************************************************************************
+* FUNCTION
+*   custom_mbim_mtk_vendor_cmd()
+*
+* DESCRIPTION
+*   The function be invoked when receive MBIM_UUID_MTK_VENDOR_CMD/MBIM_CID_MTK_VENDOR_CMD
+*   
+* PARAMETERS
+*   command_type        MBIM CID command type (0:query, 1:set)
+*   request                   information_buffer from MBIM Host 
+*   response                 information_buffer sent to MBIM Host 
+*
+* RETURNS
+*   status      MBIM spec defined status code (mbim_status_code_enum in mbim_defs.h)
+*   
+******************************************************************************************/
+kal_uint32 custom_mbim_mtk_vendor_cmd(kal_uint32 command_type, kal_uint8 *request, kal_uint8 *response)
+{
+    mbim_status_code_enum status;
+    mbim_mtk_vendor_cmd_info_struct *req_ptr = (mbim_mtk_vendor_cmd_info_struct*)request;
+    mbim_mtk_vendor_cmd_info_struct *rsp_ptr = (mbim_mtk_vendor_cmd_info_struct*)response;
+    kal_uint32 VendorCmdType = 0;
+
+    if (req_ptr != NULL)
+    {
+        VendorCmdType = req_ptr->VendorCmdType;
+    }
+
+    // Step1. Customize vendor defined procedure when receive specific MTK_VENDOR_CMD_TYPE
+    //      MBIM_MTK_VENDOR_CMD_TYPE_X ->
+    //      MBIM_MTK_VENDOR_CMD_TYPE_Y ->
+
+    if (VendorCmdType == MBIM_MTK_VENDOR_CMD_TYPE_NONE)
+    {
+        // Vendor defined procedure
+    }
+
+    // Step2. Customize response information_buffer to MBIM host
+    //      if no specific requirement, keep unchanged.
+
+    rsp_ptr->VendorCmdType = VendorCmdType;
+    rsp_ptr->VendorCmdOffset = 0;
+    rsp_ptr->VendorCmdSize = 0;
+    status = MBIM_STATUS_SUCCESS;
+
+    return status;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  custom_mbim_signal_state_default_rssi_threshold
+* DESCRIPTION
+*   This function is used to get default MBIM signal state default RSSI threshold
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint32
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint32 custom_mbim_signal_state_default_rssi_threshold (void)
+{
+   return (MBIM_DEFAULT_RSSI_THRESHOLD);
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  custom_mbim_signal_state_default_error_rate_threshold
+* DESCRIPTION
+*   This function is used to get default MBIM signal state default error rate threshold
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint32
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint32 custom_mbim_signal_state_default_error_rate_threshold (void)
+{
+   return (MBIM_DEFAULT_ERROR_RATE_THRESHOLD);
+}
+
diff --git a/mcu/custom/protocol/common/ps/customer_mbim_config.h b/mcu/custom/protocol/common/ps/customer_mbim_config.h
new file mode 100644
index 0000000..560ba7f
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_mbim_config.h
@@ -0,0 +1,62 @@
+/*****************************************************************************
+*  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) 2006
+*
+*  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 _CUSTOMER_MBIM_CONFIG_H
+#define _CUSTOMER_MBIM_CONFIG_H
+
+#include "kal_general_types.h"
+
+/* 
+** For customer to define how to report signal state
+** MBIM_SIGNAL_STATE_REPORT_MODE_DEFAULT: report signal state according to MBIM_CID_SIGNAL_STATE SET command.
+** MBIM_SIGNAL_STATE_REPORT_MODE_CUSTOM: Customers can define report timer, RSSI threshold, error rate threshold.
+**
+*/
+
+typedef enum
+{
+    MBIM_SIGNAL_STATE_REPORT_MODE_DEFAULT,
+    MBIM_SIGNAL_STATE_REPORT_MODE_CUSTOM
+}mbim_signal_state_report_mode_enum;
+
+kal_uint8 custom_mbim_signal_state_report_mode (void);
+kal_uint32 custom_mbim_signal_state_report_time (void);
+kal_uint32 custom_mbim_signal_state_default_rssi_threshold (void);
+kal_uint32 custom_mbim_signal_state_default_error_rate_threshold (void);
+
+extern kal_uint32 custom_mbim_mtk_vendor_cmd(kal_uint32 command_type, kal_uint8 *request, kal_uint8 *response);
+
+#endif
diff --git a/mcu/custom/protocol/common/ps/customer_operator_name.c b/mcu/custom/protocol/common/ps/customer_operator_name.c
new file mode 100644
index 0000000..0bbe066
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_operator_name.c
@@ -0,0 +1,297 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*****************************************************************************
+ * Filename:
+ * ---------
+ * Custom_operator_name.c
+ *
+ * Description:
+ * ------------
+ *   This file is intends for Customer to define the operator name for AT command such as +COPS, +CPOL, +COPN
+ *
+ * Author:
+ * -------
+ * -------
+ *
+*****************************************************************************/
+
+
+//#include "kal_non_specific_general_types.h"
+#include "string.h"
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "ps_public_enum.h"
+
+#define RMMI_PLMN_NAME_ENTRIES    (sizeof(plmn_numeric_name_table)/sizeof(plmn_numeric_name_table[0]))
+
+/* -------PLEASE ADJUST "customer_operator_name_def.h" to define operator names ------  */
+/* ----- NOTE:   LONG alphanumeric format can only up to 16 characters -------   */
+/* ------------SHORT alphanumeric format can only up to 8 charactors  -------- */
+char plmn_long_name_table[][MAX_PLMN_LONG_NAME_LEN] = {
+    #define OPER_NAME(LONG_NAME,SHORT_NAME,NUMERIC_NAME) LONG_NAME,
+        #include "customer_operator_name_def.h"
+    #undef OPER_NAME
+};
+char plmn_short_name_table[][MAX_PLMN_SHORT_NAME_LEN] = {
+    #define OPER_NAME(LONG_NAME,SHORT_NAME,NUMERIC_NAME) SHORT_NAME,
+        #include "customer_operator_name_def.h"
+    #undef OPER_NAME
+};
+char plmn_numeric_name_table[][MAX_PLMN_NUMERIC_NAME_LEN] = {
+    #define OPER_NAME(LONG_NAME,SHORT_NAME,NUMERIC_NAME) NUMERIC_NAME,
+        #include "customer_operator_name_def.h"
+    #undef OPER_NAME
+};
+
+/*------ Please do not change below functions ------------------*/
+kal_uint16 rmmi_get_max_oper_count(void);
+kal_bool rmmi_translate_oper_name(kal_uint8 format1, kal_uint8 *oper_str1, kal_uint8 format2, kal_uint8 *oper_str2);
+void rmmi_get_oper_name(kal_uint16 i, kal_uint8 * oper_numeric, kal_uint8 * oper_short, kal_uint8 * oper_long);
+void rmmi_set_oper_info(kal_uint8 * oper_numeric, kal_uint8 * oper_short, kal_uint8 * oper_long);
+
+
+/*****************************************************************************
+* FUNCTION
+*  rmmi_get_max_oper_count
+* DESCRIPTION
+*   This function returns RMMI_PLMN_NAME_ENTRIES defined by customer
+*
+* PARAMETERS
+*   
+* RETURNS
+*  kal_uint16
+*
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint16 rmmi_get_max_oper_count(void)
+{
+   return (RMMI_PLMN_NAME_ENTRIES);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  rmmi_translate_oper_name
+* DESCRIPTION
+*   This function convert oper_str1 (format1) to oper_str2(format2)
+*
+* PARAMETERS
+*   IN: format1
+*   IN: oper_str1
+*   IN: format2
+*   OUT: oper_str2
+*   
+* RETURNS
+*  kal_bool 
+*	KAL_TRUE: Success
+*	KAL_FALSE: oper_str1 not found
+*
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool rmmi_translate_oper_name(kal_uint8 format1, kal_uint8 *oper_str1, kal_uint8 format2, kal_uint8 *oper_str2)
+{
+    kal_uint16 i;
+    kal_uint16 rmmi_plmn_name_entries = RMMI_PLMN_NAME_ENTRIES;//use local variable
+    kal_uint8 format_len[3] = {MAX_PLMN_LONG_NAME_LEN, MAX_PLMN_SHORT_NAME_LEN, MAX_PLMN_NUMERIC_NAME_LEN};
+    char* plmn_name_table_ptr[3] = {
+        plmn_long_name_table[0],
+        plmn_short_name_table[0],
+        plmn_numeric_name_table[0]
+    };
+
+    if (format1==format2)
+    {
+        strcpy((char *)oper_str2,(char *)oper_str1);
+        return KAL_TRUE;
+    }
+    else
+    {
+        for (i=0;i<rmmi_plmn_name_entries;i++)
+        {
+            if (strcmp((char *)oper_str1, (plmn_name_table_ptr[format1]+i*format_len[format1]))== 0)
+            {
+                /* found entry in the table */
+                strcpy((char *)oper_str2, (plmn_name_table_ptr[format2]+i*format_len[format2]));
+                return KAL_TRUE;
+            }
+        }
+
+        /* cannot found in the table */
+        if (format1==2)// 2: numeric
+            strcpy((char *)oper_str2,(char *)oper_str1);
+        else 
+            strcpy((char *)oper_str2,"");
+        
+        return KAL_FALSE;
+    }
+}
+
+/*****************************************************************************
+* FUNCTION
+*  rmmi_get_oper_name
+* DESCRIPTION
+*  This function gives the numeric, short alphanumeric, and long alphanumeric
+*  strings for the specified entry.
+*
+* PARAMETERS
+*  IN	i : specified the i-th entry
+*  OUT	oper_numeric
+*  OUT  oper_short_str
+*  OUT 	oper_long_str
+*  
+* RETURNS
+*  void
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+void rmmi_get_oper_name(kal_uint16 i, kal_uint8 * oper_numeric, kal_uint8 * oper_short, kal_uint8 * oper_long)
+{
+    oper_numeric[0]='\0';
+    oper_short[0]='\0';
+    oper_long[0]='\0';
+
+    if (i >= RMMI_PLMN_NAME_ENTRIES)
+        return;
+
+    if (strlen((char *)plmn_numeric_name_table[i])>0)
+    {
+        strcpy((char *)oper_numeric,(char *)plmn_numeric_name_table[i]);
+        strcpy((char *)oper_short,(char *)plmn_short_name_table[i]);
+        strcpy((char *)oper_long,(char *)plmn_long_name_table[i]);
+    }
+    return;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  rmmi_set_oper_info
+* DESCRIPTION
+*   This function is used to store the plmn long/short/numeric name in plmn tables
+*
+* PARAMETERS
+*   
+* RETURNS
+* 
+*
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+void rmmi_set_oper_info(kal_uint8 * oper_numeric, kal_uint8 * oper_short, kal_uint8 * oper_long)
+{
+    kal_uint16 i;
+    kal_uint16 rmmi_plmn_name_entries = RMMI_PLMN_NAME_ENTRIES;//use local variable
+    kal_uint8 *cr = NULL;
+
+    //should have oper_numeric
+    if (strlen((char *)oper_numeric) == 0)
+    {
+        return;
+    }
+
+    /* if the nw string contains CR (0x0d), replace it with space (0x20);
+       otherwise AP will treat (0x0d) as breakpoint, leadint to incorrect string parsing */
+    if (oper_long != NULL)
+    {
+        cr = (kal_uint8*)strchr((const char*)oper_long, '\r' );
+
+        if ( cr ) 
+        {
+            *cr = ' ';
+        }
+        cr = NULL;
+    }
+
+    if (oper_short != NULL)
+    {
+        cr = (kal_uint8*)strchr((const char*)oper_short, '\r' );
+
+        if ( cr ) 
+        {
+            *cr = ' ';
+        }
+    }
+
+    for (i=0;i<rmmi_plmn_name_entries;i++)
+    {
+        if (strcmp((char *)oper_numeric, (char *)plmn_numeric_name_table[i])== 0)
+        {
+            /* found entry in the table
+                       * update the longname and shortname
+                       */
+            if (oper_short != NULL)
+            {
+                kal_mem_set((char *)plmn_short_name_table[i],0,MAX_PLMN_SHORT_NAME_LEN);
+                strncpy(plmn_short_name_table[i],(char *)oper_short, (MAX_PLMN_SHORT_NAME_LEN-1));
+            }
+            
+            if (oper_long != NULL)
+            {
+                kal_mem_set((char *)plmn_long_name_table[i],0,MAX_PLMN_LONG_NAME_LEN);
+                strncpy((char *)plmn_long_name_table[i],(char *)oper_long, (MAX_PLMN_LONG_NAME_LEN-1));
+            }
+            return;
+        }
+        else if (strlen((char *)plmn_numeric_name_table[i]) == 0)//empty string
+        {
+            break;
+        }
+    }
+
+    //not found in the table, add new entry
+    //if table is full, overwrite the last entry
+    if (i == RMMI_PLMN_NAME_ENTRIES)
+    {
+        i = RMMI_PLMN_NAME_ENTRIES-1;
+    }
+    
+    kal_mem_set((char *)plmn_long_name_table[i],0,MAX_PLMN_LONG_NAME_LEN);
+    kal_mem_set((char *)plmn_short_name_table[i],0,MAX_PLMN_SHORT_NAME_LEN);
+    kal_mem_set((char *)plmn_numeric_name_table[i],0,MAX_PLMN_NUMERIC_NAME_LEN);
+    
+    strncpy((char *)plmn_numeric_name_table[i],(char *)oper_numeric, (MAX_PLMN_NUMERIC_NAME_LEN-1));
+    
+    if (oper_short != NULL)
+    {
+        strncpy((char *)plmn_short_name_table[i],(char *)oper_short, (MAX_PLMN_SHORT_NAME_LEN-1));
+    }
+    
+    if (oper_long != NULL)
+    {
+        strncpy((char *)plmn_long_name_table[i],(char *)oper_long, (MAX_PLMN_LONG_NAME_LEN-1));
+    }
+    
+    return;
+}
diff --git a/mcu/custom/protocol/common/ps/customer_operator_name_def.h b/mcu/custom/protocol/common/ps/customer_operator_name_def.h
new file mode 100644
index 0000000..b208c3b
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_operator_name_def.h
@@ -0,0 +1,97 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*****************************************************************************
+ * Filename:
+ * ---------
+ * customer_operator_name_def.h
+ *
+ * Description:
+ * ------------
+ *   This file is intends for Customer to define the default operator name values for AT command such as +COPS, +CPOL, +COPN
+ *
+ * Author:
+ * -------
+ * -------
+ *
+*****************************************************************************/
+
+/* -----------PLEASE ADJUST HERE to define operator names -----------------  */
+/* ----- NOTE:   LONG alphanumeric format can only up to 16 characters -------   */
+/* ------------SHORT alphanumeric format can only up to 8 charactors  -------- */
+OPER_NAME("Bharti Cellular",     "AIRTL",    "40410")   /* India */
+OPER_NAME("Hutchison Max",   "MAXTCH","40420")
+OPER_NAME("Usha Martin",     "COMMAND",  "40430")
+OPER_NAME("Hutchison Essar",     "ESSAR",    "40411")
+OPER_NAME("Hong Kong CSL",   "HKTCSL",   "45400")   /* Hong Kong */
+OPER_NAME("Smartone Mobile",     "HKSMC",    "45406")
+OPER_NAME("Hutchison",       "Orange",   "45404")
+OPER_NAME("Mandarin Comm.",  "MCL",      "45416")
+OPER_NAME("Peoples",         "PEOPLES",  "45412")
+OPER_NAME("New World PCS",   "NWPCS",    "45410")
+OPER_NAME("China Mobile",    "CMCC", "46000")   /* China */   //("China Telecom",     "CT-GSM",   "46000"),
+OPER_NAME("China Mobile",    "CMCC", "46002")
+OPER_NAME("China Mobile",    "CMCC", "46007")
+OPER_NAME("China Unicom",    "CU-GSM",   "46001")
+OPER_NAME("Taiwan Mobile",   "TWM",      "46697")   /* Taiwan */
+OPER_NAME("KG Telecom Co.",  "KGT",      "46688")
+OPER_NAME("Far EasTone",     "FET",      "46601")
+OPER_NAME("Chunghwa Telecom",    "Chunghwa", "46692")
+OPER_NAME("Vibo",    "Vibo", "46689")
+OPER_NAME("MoBitai Telecom",     "MOBITAI",  "46693")
+OPER_NAME("TransAsia",       "TAT",  "46699")
+OPER_NAME("Time Wireless",   "ADAM",     "50217")   /* Malaysia */
+OPER_NAME("U MOBILE",            "U MOBILE", "50218")
+OPER_NAME("Cellular Coms.",  "CELCOM",   "50219")
+OPER_NAME("Binariang Coms.",     "MAXIS",    "50212")
+OPER_NAME("DIGI Telcom",     "DIGI1800", "50216")
+OPER_NAME("Isla Coms.",      "ISLA",     "51501")   /* Philippinen */
+OPER_NAME("Globe Telecom",   "GLOBE",    "51502")
+OPER_NAME("Thailand AIS",    "TH AIS",   "52001")   /* Thailand */
+OPER_NAME("Total Access",    "WP 1800",  "52018")
+OPER_NAME("Mobile One Asia",     "M1-GSM",   "52503")   /* Singapore */
+OPER_NAME("Singapore Telcom",    "STGSM",    "52501")
+OPER_NAME("SingTel Mobile",  "GSM 180",  "52502")
+OPER_NAME("PCCW", "PCCW", "45416")
+OPER_NAME("HTIL", "HTIL", "45403")  /* HK */
+
+/* reserve some entries for NW to update by nw_info air messages */
+/* if the plmn-id in nw_info msg already exists in the above table, just update this table at run-time */
+/* the updated value won't be stored in UE memory, it will be set to default value after power-off/restart */
+/* if the table is full at run time, the last entry will be overwritten */
+OPER_NAME("", "", "")  /* reserved for NW to update */
+OPER_NAME("", "", "")  /* reserved for NW to update */
+OPER_NAME("", "", "")  /* reserved for NW to update */
+OPER_NAME("", "", "")  /* reserved for NW to update */
+
diff --git a/mcu/custom/protocol/common/ps/customer_phb_utility.c b/mcu/custom/protocol/common/ps/customer_phb_utility.c
new file mode 100644
index 0000000..0f749b2
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_phb_utility.c
@@ -0,0 +1,280 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+#ifdef __PHB_FDN_SKIP_PREFIX_SUPPORT__ 
+
+/*
+**   Includes
+*/
+#include "customer_phb_utility.h"
+
+/* 
+** For customer to define which Phonebook use utility
+** 
+*/
+
+kal_uint8 service_code_two_digits[] =
+{
+    /* Input number for customer (e.g.service code 31) */
+  0x31, 0xff   
+};
+
+kal_uint8 service_code_three_digits[] =
+{
+    /* Input number for customer (e.g.service code 332) */
+    //0x03,0x32, 
+	0xff,0xff
+};
+
+/*****************************************************************************
+* FUNCTION
+*  addr_bcd_left_shift
+* DESCRIPTION
+*  This function is used to shift left one bcd digit.
+*
+* PARAMETERS
+*
+* RETURNS
+*  void
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/
+void addr_bcd_left_shift(l4_addr_bcd_struct *tel_num)
+{
+    kal_uint8 i;
+    kal_uint8 addr_bcd_temp[41];
+    kal_mem_set(addr_bcd_temp, 0x00, 41);
+
+        for( i = 0 ; i < (tel_num->addr_length)+1 ; i++ )
+        {
+         addr_bcd_temp[i] = ((tel_num->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET+i+1] & 0x0F) << 4) 
+                          + ((tel_num->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET+i] & 0xF0) >> 4);
+           
+        }
+    kal_mem_cpy((void *)&(tel_num->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET]), (void *)&(addr_bcd_temp[0]), 40);
+}
+/*****************************************************************************
+* FUNCTION
+*  fdn_check_prefix_string
+* DESCRIPTION
+*  This function is used to count Service code.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/      
+
+kal_uint8 fdn_check_sc_string(l4_addr_bcd_struct *tel_number, ss_op_enum ss_string)
+{
+   kal_uint8 sc_count= 0;
+   kal_uint8 i;
+   kal_uint8 addr_bcd_temp[41];
+     kal_mem_set(addr_bcd_temp, 0x00, 41);
+      switch (ss_string){
+          
+       case F_ONE_DIGIT: //ACTICATION : *SC*SI#,  DEACTIVATION : #SC*SI#
+
+           // This condition support *SC or #SC 
+           if((((tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET] & 0x0F) == 0x0a)
+            ||((tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET] & 0x0F) == 0x0b))
+            &&(((tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET] & 0xF0) != 0xa0)
+            &&((tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET] & 0xF0) != 0xb0)))
+           {
+           
+               for( i = 1 ; i < tel_number->addr_length ; i ++)
+               {
+                  if((tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET+i] & 0x0F) == 0x0b)
+                    {
+                    sc_count++;
+                    break;
+                    }
+                  else
+                    sc_count++;
+
+                  if((tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET+i] & 0xF0) == 0xb0)
+                    {
+                    sc_count++;
+                    break;
+                    }
+                  else
+                    sc_count++;
+                }
+               
+           }
+       break;
+
+       case F_TWO_DIGITS: // ERASURE :##SC*SI# , INTERROGATION : *#SC*SI#         
+           //support *#SC, ##SC, **SC
+           if(((((tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET] & 0x0F) == 0x0a) 
+            ||((tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET] & 0x0F) == 0x0b))
+            &&((tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET] & 0xF0) == 0xb0)) 
+            ||(tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET] == 0xaa))   
+           {
+            
+            addr_bcd_left_shift(tel_number); // for shift one digit :(ex. *#SC# --> #sc#)
+
+            
+               for( i = 1 ; i < tel_number->addr_length ; i ++)
+               {
+                  
+                  if((tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET+i] & 0x0F) == 0x0b)
+                    {
+                    sc_count++;
+                    break;
+                    }
+                  else
+                    sc_count++;
+
+                  if((tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET+i] & 0xF0) == 0xb0)
+                    {
+                    sc_count++;
+                    break;
+                    }
+                  else
+                    sc_count++;
+                }  
+                            
+           }
+       break;
+       }
+ return sc_count;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  fdn_approve_prefix_number
+* DESCRIPTION
+*  This function is used to approve prefix number
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/   
+kal_bool fdn_approve_prefix_number(l4_addr_bcd_struct *tel_number, kal_uint8 sc_count)
+{
+   kal_uint8 i;
+   kal_bool result = KAL_FALSE;
+
+   switch(sc_count)
+   {
+       case 1:
+            break;
+       case 2:
+            for( i = 0 ; i < sizeof(service_code_two_digits) ; i++ )
+            {
+                if(((tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET] & 0xF0)
+                  +(tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET + 1] & 0x0F))
+                  == service_code_two_digits[i])
+                  {
+                  tel_number->addr_length = tel_number->addr_length - 2;
+        
+                  kal_mem_cpy((void *)&(tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET]), 
+                             (void *)&(tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET+2]), 
+                             tel_number->addr_length);
+                  
+                  result = KAL_TRUE;
+                  break;
+                  }
+            }
+            break;
+            
+       case 3:
+            for( i = 0 ; i < sizeof(service_code_three_digits); i+=2 )
+            {
+              
+                if(((tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET] & 0x0F) == service_code_three_digits[i])
+                   &&((((tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET+i] & 0x0F) << 4) 
+                   + ((tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET+i] & 0xF0) >> 4))
+                   == service_code_three_digits[i+1]))
+                  {
+                    
+                   addr_bcd_left_shift(tel_number); // for shift one digit (ex.#332# --> 332#)
+           
+                  tel_number->addr_length = tel_number->addr_length - 2;
+        
+                  kal_mem_cpy((void *)&(tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET]), 
+                             (void *)&(tel_number->addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET+2]), 
+                             tel_number->addr_length);
+                  
+                  result = KAL_TRUE;
+                  break;
+                  }
+            }
+            break;
+            
+       case 4:
+            break;
+            
+       default:
+           break;
+
+   }
+return result;
+}
+
+/*****************************************************************************
+* FUNCTION
+*  fdn_verify_skip_sc_number
+* DESCRIPTION
+*   This function is used to verify skip prefix number.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*  None
+*****************************************************************************/   
+kal_bool fdn_verify_skip_sc_number(l4_addr_bcd_struct *tel_num, ss_op_enum ss_string)
+{
+   kal_bool result = KAL_FALSE;
+   kal_uint8 sc_count;
+   
+   sc_count = fdn_check_sc_string(tel_num,ss_string );
+
+   if (sc_count)
+   {
+       result = fdn_approve_prefix_number(tel_num, sc_count );
+   }
+   
+return result;
+}
+
+#endif //__PHB_FDN_SKIP_PREFIX_SUPPORT__
diff --git a/mcu/custom/protocol/common/ps/customer_phb_utility.h b/mcu/custom/protocol/common/ps/customer_phb_utility.h
new file mode 100644
index 0000000..b2afa72
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_phb_utility.h
@@ -0,0 +1,73 @@
+/*****************************************************************************
+*  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) 2010
+*
+*  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:
+ * ---------
+ *   customer_phb_utility.h
+ *
+ * Project:
+ * --------
+ *  
+ *
+ * Description:
+ * ------------
+ *   This file provides the custom sikp prefix in fdn mode.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ ****************************************************************************/
+#ifdef __PHB_FDN_SKIP_PREFIX_SUPPORT__ 
+
+#include "kal_general_types.h"
+#include "phb_defs.h"
+#include "ps_public_struct.h"
+
+typedef enum
+{
+    F_ONE_DIGIT, //ACTICATION : *SC*SI#,  DEACTIVATION : #SC*SI#
+    F_TWO_DIGITS // ERASURE :##SC*SI# , INTERROGATION : *#SC*SI# 
+}ss_op_enum;
+
+extern kal_bool fdn_verify_skip_sc_number(l4_addr_bcd_struct *tel_number, 
+                                                        ss_op_enum ss_string);
+
+
+#endif /* __PHB_FDN_SKIP_PREFIX_SUPPORT__ */
+
diff --git a/mcu/custom/protocol/common/ps/customer_pwr_level_report.c b/mcu/custom/protocol/common/ps/customer_pwr_level_report.c
new file mode 100644
index 0000000..7042815
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_pwr_level_report.c
@@ -0,0 +1,255 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*
+**   Includes
+*/
+#include "kal_general_types.h"
+
+/* For customer define the refresh rate of pwr_level_report period in idle state, unit second */
+#define PWR_LEVEL_REP_PERIOD_IDLE  10
+
+/* For customer define the refresh rate of pwr_level_report period in dedicated state, helf second */
+#define PWR_LEVEL_REP_PERIOD_DEDI  5 /* 5: 2.5s */
+
+/* For customer define the refresh rate of ptm_tx_power period in PTM state, millisecond*/
+#define PWR_LEVEL_REP_PERIOD_PTM 1000
+
+/* For 3G */
+/* For customer define the refresh rate of pwr_level_report period in idle/PCH states, mini second */
+#define UAS_PWR_LEVEL_REP_PERIOD_IDLEPCH  5000
+
+/* For customer define the refresh rate of pwr_level_report period in FACH/DCH states, mini second */
+#define UAS_PWR_LEVEL_REP_PERIOD_FACHDCH  2500
+
+/*For customer decide whether enable the CQ trigger e3a measurement report feature,
+KAL_TURE means enable;
+KAL_FALSE means disable;*/
+#define TDD_MEME_CQ_TRIGGER_e3a_MEASUREMENT_REROPRT_SWITCH (KAL_FALSE)
+
+#ifdef __NBR_CELL_INFO__
+/* For customer, define the reporting rate for 3G neighbor cell information, per 10 mini second */
+#define UAS_NBR_CELL_INFO_REP_PERIOD  500
+
+/* For customer, define the number of reported cell for 3G neighbor cell information */
+#define UAS_NBR_CELL_INFO_REP_NUM  6
+#endif
+
+#if defined(__MODEM_EM_MODE__)
+/* For customer, define the reporting rate for EM mode 3G neighbor cell information.
+ * Unit: milliseconds.
+ * Default set to 1 second.
+ * Recommand: the period shall larger than 500. (500ms)*/
+#define UAS_EM_DCH_UMTS_CELL_INFO_REP_PERIOD  1000
+#endif
+
+/*****************************************************************************
+* FUNCTION
+*  rr_get_power_ind_period_idle
+* DESCRIPTION
+*   This function is used to define the refresh rate for
+*   RR report serv_cell measured RSSI level to MMI in idle state.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint8 rr_get_power_ind_period_idle (void)
+{
+   return (PWR_LEVEL_REP_PERIOD_IDLE);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  rr_get_power_ind_period_dedi
+* DESCRIPTION
+*   This function is used to define the refresh rate for
+*   RR report serv_cell measured RSSI level to MMI in dedicated state.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint8 rr_get_power_ind_period_dedi (void)
+{
+   return (PWR_LEVEL_REP_PERIOD_DEDI);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  rr_get_power_ind_period_ptm
+* DESCRIPTION
+*   This function is used to define the refresh rate for
+*   tx power in PTM state.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint32 rr_get_power_ind_period_ptm (void)
+{
+   return (PWR_LEVEL_REP_PERIOD_PTM);
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  uas_get_power_ind_period_idlepch
+* DESCRIPTION
+*   This function is used to define the refresh rate for
+*   UAS to report the measured RSCP and Ec/No of serving cell to MMI in idle/PCH states.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint32
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint32 uas_get_power_ind_period_idlepch (void)
+{
+   return (UAS_PWR_LEVEL_REP_PERIOD_IDLEPCH);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  uas_get_power_ind_period_fachdch
+* DESCRIPTION
+*   This function is used to define the refresh rate for
+*   UAS to report the measured RSCP and Ec/No level of active set cell to MMI in FACH/DCH states.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint32
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint32 uas_get_power_ind_period_fachdch (void)
+{
+   return (UAS_PWR_LEVEL_REP_PERIOD_FACHDCH);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  uas_get_CQ_trigger_e3a_measurement_report_switch
+* DESCRIPTION
+*   This function is used to define whether enable CQ trigger e3a measurement report feature
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_bool
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_bool uas_get_CQ_trigger_e3a_measurement_report_switch(void)
+{
+   return (TDD_MEME_CQ_TRIGGER_e3a_MEASUREMENT_REROPRT_SWITCH);
+}
+
+
+#ifdef __NBR_CELL_INFO__
+/*****************************************************************************
+* FUNCTION
+*  uas_get_power_ind_period_fachdch
+* DESCRIPTION
+*   This function is used to define the refresh rate for
+*   UAS to report the measured RSCP and Ec/No level of active set cell to MMI in FACH/DCH states.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint32
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint32 uas_nbr_cell_info_ind_period (void)
+{
+   return (UAS_NBR_CELL_INFO_REP_PERIOD);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  uas_get_power_ind_period_fachdch
+* DESCRIPTION
+*   This function is used to define the refresh rate for
+*   UAS to report the measured RSCP and Ec/No level of active set cell to MMI in FACH/DCH states.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint32
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint8 uas_nbr_cell_info_rep_cell_num (void)
+{
+   return (UAS_NBR_CELL_INFO_REP_NUM);
+}
+
+#endif
+
+#if defined(__MODEM_EM_MODE__)
+/*****************************************************************************
+* FUNCTION
+*  uas_dch_em_umts_cell_info_ind_period
+* DESCRIPTION
+*   This function is used to define the reporting rate for
+*   UAS to report the cell info in EM mode in DCH states.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint32
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint32 uas_dch_em_umts_cell_info_ind_period (void)
+{
+   return (UAS_EM_DCH_UMTS_CELL_INFO_REP_PERIOD);
+}
+#endif
+
+
diff --git a/mcu/custom/protocol/common/ps/customer_pwr_level_report.h b/mcu/custom/protocol/common/ps/customer_pwr_level_report.h
new file mode 100644
index 0000000..5d97ba7
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_pwr_level_report.h
@@ -0,0 +1,61 @@
+/*****************************************************************************
+*  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 _CUSTOMER_PWR_LEVEL_REPORT_H
+#define _CUSTOMER_PWR_LEVEL_REPORT_H
+
+#include "kal_general_types.h"
+
+kal_uint8 rr_get_power_ind_period_idle (void);
+
+kal_uint8 rr_get_power_ind_period_dedi (void);
+
+kal_uint32 rr_get_power_ind_period_ptm (void);
+
+kal_uint32 uas_get_power_ind_period_idlepch (void);
+
+kal_uint32 uas_get_power_ind_period_fachdch (void);
+
+kal_bool uas_get_CQ_trigger_e3a_measurement_report_switch(void);
+
+#ifdef __NBR_CELL_INFO__
+kal_uint32 uas_nbr_cell_info_ind_period (void);
+kal_uint8 uas_nbr_cell_info_rep_cell_num (void);
+#endif
+
+#if defined(__MODEM_EM_MODE__)
+kal_uint32 uas_dch_em_umts_cell_info_ind_period (void);
+#endif
+
+#endif
\ No newline at end of file
diff --git a/mcu/custom/protocol/common/ps/customer_sms_discard_patent.c b/mcu/custom/protocol/common/ps/customer_sms_discard_patent.c
new file mode 100644
index 0000000..550c166
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_sms_discard_patent.c
@@ -0,0 +1,78 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*
+**   Includes
+*/
+#include "kal_general_types.h"
+#include "string.h"
+
+#ifdef __SMSAL_DISCARD_PATENT__
+/* MAUI_00733041 [SMSAL][Revise] discard incoming message if there exists discard patent in OA */
+
+const kal_uint8 SMS_DISCARD_PATENT_STR[] = ">pers";
+
+kal_uint8 *smsal_get_discard_patent_str(kal_uint16 *str_len);
+
+/*****************************************************************************
+* FUNCTION
+*  smsal_get_discard_patent_str
+* DESCRIPTION
+*   This function is used to get the discard patent 
+*
+* PARAMETERS
+*
+* RETURNS
+*  str_len     [?]     
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 *smsal_get_discard_patent_str(kal_uint16 *str_len)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    if (str_len != NULL)
+    {
+        *str_len = strlen((char*)SMS_DISCARD_PATENT_STR);
+    }
+
+    return ((kal_uint8*) SMS_DISCARD_PATENT_STR);
+}
+#endif
diff --git a/mcu/custom/protocol/common/ps/customer_sms_force_read_smsp.c b/mcu/custom/protocol/common/ps/customer_sms_force_read_smsp.c
new file mode 100644
index 0000000..361991f
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_sms_force_read_smsp.c
@@ -0,0 +1,67 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*
+**   Includes
+*/
+#include "kal_general_types.h"
+
+/* 
+** For customer to force reading EF SMSP when SAT file change occurs 
+** 0: Normal   
+** 1: If EF SMSP is not in SAT file change list, force reading it.
+*/
+
+#define SMSAL_FORCE_READ_SMSP_FOR_SAT_FILE_CHANGE  0
+
+kal_uint8 smsal_force_read_smsp_for_sat_file_change (void);
+
+/*****************************************************************************
+* FUNCTION
+*  smsal_force_read_smsp_for_sat_file_change
+* DESCRIPTION
+*   This function is used to get if we have to force reading EF SMSP when SAT file change occurs.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 smsal_force_read_smsp_for_sat_file_change (void)
+{
+   return (SMSAL_FORCE_READ_SMSP_FOR_SAT_FILE_CHANGE);
+}
diff --git a/mcu/custom/protocol/common/ps/customer_sms_msg_box_num.c b/mcu/custom/protocol/common/ps/customer_sms_msg_box_num.c
new file mode 100644
index 0000000..b312cf5
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_sms_msg_box_num.c
@@ -0,0 +1,94 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * customer_sms_msg_box_num.c
+ *
+ * Project:
+ * --------
+ *   MAUI Project
+ *
+ * Description:
+ * ------------
+ *   This file is used to define the SMS maximum message box number.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *******************************************************************************/
+
+#include "kal_general_types.h"
+
+#include "l4c2smsal_struct.h"
+
+#include "customer_ps_inc.h"
+
+kal_uint16 cm_sms_max_msg_num (void);
+#if ( !defined(__L1_STANDALONE__) && !defined(__MAUI_BASIC__) )
+smsal_mb_entry_struct  smsal_mb_g[MAX_SIM_NUM][CM_SMS_MAX_MSG_NUM];
+#endif 
+
+
+
+/*****************************************************************************
+* FUNCTION
+*  cm_sms_max_msg_num 
+* DESCRIPTION
+*   This function is used to define the 
+*   SMS maximum message box number.
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint16 cm_sms_max_msg_num (void)
+{
+   return (CM_SMS_MAX_MSG_NUM);
+}
+
+void *cm_sms_get_message_box(kal_uint8 siminterface)
+{
+#if ( !defined(__L1_STANDALONE__) && !defined(__MAUI_BASIC__) )
+    return (void *)(&(smsal_mb_g[siminterface][0]));
+#else
+    return ((void *)0);
+#endif
+}
diff --git a/mcu/custom/protocol/common/ps/customer_sms_prefer_order.c b/mcu/custom/protocol/common/ps/customer_sms_prefer_order.c
new file mode 100644
index 0000000..35fe1d5
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_sms_prefer_order.c
@@ -0,0 +1,65 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*
+**   Includes
+*/
+#include "kal_general_types.h"
+
+/* 
+** For customer to define the loading order of short message recodes 
+** 0: sim 1: ME
+*/
+#define SMSAL_SMS_PREFER_LOADING_ORDER  0
+
+kal_uint8 smsal_sms_prefer_order (void);
+
+/*****************************************************************************
+* FUNCTION
+*  smsal_sms_prefer_order
+* DESCRIPTION
+*   This function is used to get the loading order of short message recodes 
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 smsal_sms_prefer_order (void)
+{
+   return (SMSAL_SMS_PREFER_LOADING_ORDER);
+}
diff --git a/mcu/custom/protocol/common/ps/customer_sms_tl_retry.c b/mcu/custom/protocol/common/ps/customer_sms_tl_retry.c
new file mode 100644
index 0000000..4d823f7
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/customer_sms_tl_retry.c
@@ -0,0 +1,322 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * customer_sms_tl_retry.c
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *   This file contains SMS module CM layer entry function.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ ****************************************************************************/ 
+
+
+/*
+**   Includes
+*/
+#include "kal_general_types.h"
+
+//for SBP
+#include "sbp_public_utility.h"
+
+#include "sim_exported_enum.h"
+
+
+/* For customer define the SMS PS retry count */
+#define MAX_SMS_PS_RETRY_COUNT  1
+
+/* For customer define the SMS CS retry count */
+#define MAX_SMS_CS_RETRY_COUNT  1
+
+/* For customer define the SMS Rau retry count */
+#define MAX_SMS_RAU_RETRY_COUNT  2
+
+#define SMS_RAU_TIMEOUT_TICK 50
+
+
+kal_uint8 sms_tl_max_retry_count (protocol_id_enum ps_id);
+
+kal_uint16 sms_tl_retry_timer (protocol_id_enum ps_id);
+
+kal_uint8 sms_tl_max_retry_count_during_call (protocol_id_enum ps_id);
+
+kal_uint16 sms_tl_retry_timer_during_call (protocol_id_enum ps_id);
+
+
+kal_uint8 sms_tl_max_ps_retry_count(void);
+
+kal_uint8 sms_tl_max_cs_retry_count(void);
+
+kal_uint8 sms_tl_max_rau_retry_count(void);
+
+kal_uint8 sms_rau_retry_timer(void);
+
+kal_uint16 sms_guard_timer(protocol_id_enum ps_id);
+
+kal_uint8 custom_get_sms_tl_retry_count_by_hplmn_id(kal_uint32 hplmn_id);
+
+/*****************************************************************************
+* FUNCTION
+*   sms_tl_max_retry_count 
+* DESCRIPTION
+*   This function is used to define the max
+*   TL layer retry count for SMS operation
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 sms_tl_max_retry_count(protocol_id_enum ps_id)
+{
+   return (sbp_query_md_feature_data_by_ps(SBP_SMS_MAX_TL_RETRY, ps_id)); 
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  sms_tl_retry_timer
+* DESCRIPTION
+*   This function is used to define the 
+*   TL layer retry timer for SMS operation
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint16
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint16 sms_tl_retry_timer (protocol_id_enum ps_id)
+{
+    return (sbp_query_md_feature_data_by_ps(SBP_SMS_TL_RETRY_TIMER, ps_id)*10); 
+}
+
+/*****************************************************************************
+* FUNCTION
+*   sms_tl_max_ps_retry_count 
+* DESCRIPTION
+*   This function is used to define the max
+*   PS retry count for SMS operation
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 sms_tl_max_ps_retry_count(void)
+{
+   return (MAX_SMS_PS_RETRY_COUNT);
+}
+
+/*****************************************************************************
+* FUNCTION
+*   sms_tl_max_cs_retry_count 
+* DESCRIPTION
+*   This function is used to define the max
+*   CS retry count for SMS operation
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 sms_tl_max_cs_retry_count(void)
+{
+   return (MAX_SMS_CS_RETRY_COUNT);
+}
+
+/*****************************************************************************
+* FUNCTION
+*   sms_tl_max_rau_retry_count 
+* DESCRIPTION
+*   This function is used to define the max
+*   Rau retry count for SMS operation
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 sms_tl_max_rau_retry_count(void)
+{
+   return (MAX_SMS_RAU_RETRY_COUNT);
+}
+
+/*****************************************************************************
+* FUNCTION
+*   sms_tl_max_retry_count_during_call 
+* DESCRIPTION
+*   This function is used to define the max
+*   TL layer retry count for SMS operation when call on peer protocol stack is ongoing
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint8 sms_tl_max_retry_count_during_call(protocol_id_enum ps_id)
+{
+   return (sbp_query_md_feature_data_by_ps(SBP_SMS_MAX_TL_RETRY_COUNT_DURING_CALL, ps_id)); 
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  sms_tl_retry_timer_during_call
+* DESCRIPTION
+*   This function is used to define the 
+*   TL layer retry timer for SMS operation when call on peer protocol stack is ongoing
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint16
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+
+kal_uint16 sms_tl_retry_timer_during_call (protocol_id_enum ps_id)
+{
+    return (sbp_query_md_feature_data_by_ps(SBP_SMS_TL_RETRY_TIMER_DURING_CALL, ps_id)*100); 
+}
+
+
+/*****************************************************************************
+* FUNCTION
+*  sms_rau_retry_timer
+* DESCRIPTION
+*   This function is used to define the 
+*   TL layer  rau retry timer for SMS operation
+*
+* PARAMETERS
+*
+* RETURNS
+*  kal_uint8
+* GLOBALS AFFECTED
+*   None
+*****************************************************************************/
+kal_uint8 sms_rau_retry_timer(void)
+{
+   return (SMS_RAU_TIMEOUT_TICK);
+}
+
+
+/*****************************************************************************
+* FUNCTION
+* sms_guard_timer
+* DESCRIPTION
+* This function is used to define the 
+* sms_guard_timer for SMS operation which will determine the total SMS operation Time .
+*
+* PARAMETERS
+*
+* RETURNS
+* kal_uint16
+* GLOBALS AFFECTED
+* None
+*****************************************************************************/
+kal_uint16 sms_guard_timer (protocol_id_enum ps_id)
+{
+return (sbp_query_md_feature_data_by_ps(SBP_SMS_GUARD_TIMER, ps_id) * 10);
+}
+
+
+/*****************************************************************************
+* FUNCTION
+* custom_get_sms_tl_retry_count_by_hplmn_id
+*
+* DESCRIPTION
+* This function allows customer to modify the MAX RETRY COUNT based on the PLMN ID .
+*
+* PARAMETERS
+* PLMN ID
+*
+* RETURNS
+* SMS TL MAX RETRY COUNT 
+*
+* GLOBALS AFFECTED
+* none
+*****************************************************************************/
+kal_uint8 custom_get_sms_tl_retry_count_by_hplmn_id(kal_uint32 hplmn_id)
+{
+	kal_uint8 retry_count = 0xff;
+
+	switch(hplmn_id)
+    {
+        case 26002:           //For TMO Poland operator 26002
+		case 23430:          //For UK EE opreator 23430 - 23486      
+		case 23431:
+		case 23432:
+		case 23433:
+		case 23434:
+		case 23486:			
+		    retry_count = 2;
+			break;
+			
+		default:
+			retry_count = 0xff;
+			break;
+    }
+
+	return retry_count;
+}
+
diff --git a/mcu/custom/protocol/common/ps/ul1_nvram_def.c b/mcu/custom/protocol/common/ps/ul1_nvram_def.c
new file mode 100644
index 0000000..da2d979
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/ul1_nvram_def.c
@@ -0,0 +1,315 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * ul1_nvram_def.c
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *    This file contains `vendor' defined logical data items stored in NVRAM.
+ *    These logical data items are used in object code of Protocol Stack software.
+ *
+ *    As for customizable logical data items, they are defined in nvram_user_config.c
+ *
+ * Author:
+ * -------
+ * 
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#if (defined __MD93__)  
+#include "ul1_nvram_def_md93.c"
+#elif (defined __MD95__)
+#include "ul1_nvram_def_md95.c"
+#elif (defined __MD97__)|| (defined __MD97P__)
+#include "ul1_nvram_def_md97.c"
+#else
+#error "Should define at least a kind of BB being used."
+#endif
+
+ 
diff --git a/mcu/custom/protocol/common/ps/ul1_nvram_def_md93.c b/mcu/custom/protocol/common/ps/ul1_nvram_def_md93.c
new file mode 100644
index 0000000..bf9e7d7
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/ul1_nvram_def_md93.c
@@ -0,0 +1,2724 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * ul1_nvram_def.c
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *    This file contains `vendor' defined logical data items stored in NVRAM.
+ *    These logical data items are used in object code of Protocol Stack software.
+ *
+ *    As for customizable logical data items, they are defined in nvram_user_config.c
+ *
+ * Author:
+ * -------
+ * 
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef NVRAM_NOT_PRESENT
+
+/* In case of that not to build this file in 2G projects or 3G TDD projects */
+#if defined (__MTK_UL1_FDD__)
+
+
+/*
+ *   Include Headers
+ */
+
+#include "kal_general_types.h"
+
+/*
+ *   NVRAM Basic Headers
+ */
+#ifdef NVRAM_AUTO_GEN
+#include "nvram_auto_gen.h"
+#endif
+
+#include "nvram_enums.h"
+#include "nvram_defs.h"
+#include "nvram_data_items.h"
+
+/*
+ *   User Headers
+ */
+#include "ul1_nvram_def.h"
+#include "ul1d_rf_cid.h"
+
+/*
+ *   Default value
+ */
+/* Custpack LIDs' default value should left in nvram_cust_pack.c */ 
+#if (defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__))
+    extern U_sUl1dRfCustomInputData COMMON_NVRAM_EF_UL1_3G_RF_PARAMETER_DEFAULT[];
+#endif
+
+#if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+    extern U_sUl1IotCustomSupportStruct COMMON_NVRAM_EF_UL1_IOT_CUSTOMIZATION_DEFAULT[];
+#endif
+
+#if defined (__UL1_HS_PLUS_PLATFORM__) || defined (__UL1_HS_PLATFORM__)
+    extern nvram_ef_ul1_hspa_category_struct COMMON_NVRAM_EF_UL1_HSPA_CATEGORY_DEFAULT[];
+#endif
+
+#if defined (__MTK_UL1_FDD__)
+    extern nvram_ef_ul1_low_power_category_struct COMMON_NVRAM_EF_UL1_LOW_POWER_DEFAULT[];
+#endif
+
+
+#if defined (__UL1_PLATFORM__)
+	#if defined (__MTK_UL1_FDD__)
+		extern nvram_ef_ul1_rf_custpack_data_select_struct COMMON_NVRAM_EF_UL1_RF_CUSTPACK_DATA_SELECT_DEFAULT[];
+		extern nvram_ef_ul1_rf_custom_data_struct COMMON_NVRAM_EF_UL1_RF_CUSTOM_DATA_DEFAULT[];
+	#endif
+#endif
+
+/*
+ *   Function extern
+ */
+extern void nvram_get_uL1_default_value_to_write(nvram_lid_enum lid, kal_uint8 * buffer, kal_uint16 buffer_size);
+#if defined (__MTK_UL1_FDD__)
+extern nvram_ef_umts_tas_thr_struct COMMON_NVRAM_EF_UL1_TAS_THRESHOLD_DEFAULT[];
+extern nvram_ef_umts_ul1_ras_struct COMMON_NVRAM_EF_UL1_RAS_PARAMETER_DEFAULT[];
+#endif
+
+/*
+ *   LID table
+ */
+
+ltable_entry_struct logical_data_item_table_ul1[] =
+{
+#if (defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__))
+    {
+        NVRAM_EF_UL1_3G_RF_PARAMETER_LID,
+        NVRAM_EF_UL1_3G_RF_PARAMETER_TOTAL,
+        NVRAM_EF_UL1_3G_RF_PARAMETER_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL03",
+        VER(NVRAM_EF_UL1_3G_RF_PARAMETER_LID)
+    },
+#endif /* #if (defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)) */
+
+#if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+    {
+        NVRAM_EF_UL1_IOT_CUSTOMIZATION_LID,
+        NVRAM_EF_UL1_IOT_CUSTOMIZATION_TOTAL,
+        NVRAM_EF_UL1_IOT_CUSTOMIZATION_SIZE,
+        NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_IOT_CUSTOMIZATION_DEFAULT),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+        NVRAM_ATTR_AVERAGE,
+        "UL04",
+        VER(NVRAM_EF_UL1_IOT_CUSTOMIZATION_LID)
+    },
+#endif /* #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__) */
+
+#if defined (__UL1_HS_PLUS_PLATFORM__) || defined (__UL1_HS_PLATFORM__)
+   {
+       NVRAM_EF_UL1_HSPA_CATEGORY_LID,
+       NVRAM_EF_UL1_HSPA_CATEGORY_TOTAL,
+       NVRAM_EF_UL1_HSPA_CATEGORY_SIZE,
+       NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_HSPA_CATEGORY_DEFAULT),
+       NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+       NVRAM_ATTR_AVERAGE,
+       "UL05",
+       VER(NVRAM_EF_UL1_HSPA_CATEGORY_LID)
+    },
+#endif
+#if (IS_3G_MIPI_SUPPORT)
+ #if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+ #endif
+    {
+        NVRAM_EF_UL1_MIPI_TPC_HIGHBAND1_LID,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULM1",
+        VER(NVRAM_EF_UL1_MIPI_TPC_HIGHBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TPC_HIGHBAND2_LID,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULM2",
+        VER(NVRAM_EF_UL1_MIPI_TPC_HIGHBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TPC_HIGHBAND3_LID,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULM3",
+        VER(NVRAM_EF_UL1_MIPI_TPC_HIGHBAND3_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TPC_LOWBAND1_LID,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULM4",
+        VER(NVRAM_EF_UL1_MIPI_TPC_LOWBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TPC_LOWBAND2_LID,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULM5",
+        VER(NVRAM_EF_UL1_MIPI_TPC_LOWBAND2_LID)
+    },
+#endif /* IS_3G_MIPI_SUPPORT */
+#if (IS_3G_MIPI_NVRAM_FULL_SUPPORT)
+    {
+        NVRAM_EF_UL1_MIPI_RX_EVENT_HIGHBAND1_LID,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMB",
+        VER(NVRAM_EF_UL1_MIPI_RX_EVENT_HIGHBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_EVENT_HIGHBAND2_LID,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMC",
+        VER(NVRAM_EF_UL1_MIPI_RX_EVENT_HIGHBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_EVENT_HIGHBAND3_LID,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMD",
+        VER(NVRAM_EF_UL1_MIPI_RX_EVENT_HIGHBAND3_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_EVENT_LOWBAND1_LID,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULME",
+        VER(NVRAM_EF_UL1_MIPI_RX_EVENT_LOWBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_EVENT_LOWBAND2_LID,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMF",
+        VER(NVRAM_EF_UL1_MIPI_RX_EVENT_LOWBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_DATA_HIGHBAND1_LID,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMG",
+        VER(NVRAM_EF_UL1_MIPI_RX_DATA_HIGHBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_DATA_HIGHBAND2_LID,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET,
+        "ULMH",
+        VER(NVRAM_EF_UL1_MIPI_RX_DATA_HIGHBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_DATA_HIGHBAND3_LID,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMI",
+        VER(NVRAM_EF_UL1_MIPI_RX_DATA_HIGHBAND3_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_DATA_LOWBAND1_LID,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMJ",
+        VER(NVRAM_EF_UL1_MIPI_RX_DATA_LOWBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_DATA_LOWBAND2_LID,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMK",
+        VER(NVRAM_EF_UL1_MIPI_RX_DATA_LOWBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_EVENT_HIGHBAND1_LID,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULML",
+        VER(NVRAM_EF_UL1_MIPI_TX_EVENT_HIGHBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_EVENT_HIGHBAND2_LID,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMM",
+        VER(NVRAM_EF_UL1_MIPI_TX_EVENT_HIGHBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_EVENT_HIGHBAND3_LID,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMN",
+        VER(NVRAM_EF_UL1_MIPI_TX_EVENT_HIGHBAND3_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_EVENT_LOWBAND1_LID,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMO",
+        VER(NVRAM_EF_UL1_MIPI_TX_EVENT_LOWBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_EVENT_LOWBAND2_LID,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMP",
+        VER(NVRAM_EF_UL1_MIPI_TX_EVENT_LOWBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_DATA_HIGHBAND1_LID,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMQ",
+        VER(NVRAM_EF_UL1_MIPI_TX_DATA_HIGHBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_DATA_HIGHBAND2_LID,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMR",
+        VER(NVRAM_EF_UL1_MIPI_TX_DATA_HIGHBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_DATA_HIGHBAND3_LID,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMS",
+        VER(NVRAM_EF_UL1_MIPI_TX_DATA_HIGHBAND3_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_DATA_LOWBAND1_LID,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMT",
+        VER(NVRAM_EF_UL1_MIPI_TX_DATA_LOWBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_DATA_LOWBAND2_LID,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMU",
+        VER(NVRAM_EF_UL1_MIPI_TX_DATA_LOWBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_HIGHBAND1_LID,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMV",
+        VER(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_HIGHBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_HIGHBAND2_LID,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMW",
+        VER(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_HIGHBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_HIGHBAND3_LID,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMX",
+        VER(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_HIGHBAND3_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_LOWBAND1_LID,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMY",
+        VER(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_LOWBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_LOWBAND2_LID,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULMZ",
+        VER(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_LOWBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_INIT_CW_LID,
+        NVRAM_EF_UL1_MIPI_INIT_CW_TOTAL,
+        NVRAM_EF_UL1_MIPI_INIT_CW_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULN1",
+        VER(NVRAM_EF_UL1_MIPI_INIT_CW_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_SLEEP_CW_LID,
+        NVRAM_EF_UL1_MIPI_SLEEP_CW_TOTAL,
+        NVRAM_EF_UL1_MIPI_SLEEP_CW_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULN2",
+        VER(NVRAM_EF_UL1_MIPI_SLEEP_CW_LID)
+    },
+#endif /* IS_3G_MIPI_NVRAM_FULL_SUPPORT */
+#if (IS_3G_VPA_SEL_BY_BAND_SUPPORT)
+    {
+        NVRAM_EF_UL1_VPA_SRC_SEL_HIGHBAND1_LID,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULN5",
+        VER(NVRAM_EF_UL1_VPA_SRC_SEL_HIGHBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_VPA_SRC_SEL_HIGHBAND2_LID,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULN6",
+        VER(NVRAM_EF_UL1_VPA_SRC_SEL_HIGHBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_VPA_SRC_SEL_HIGHBAND3_LID,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULN7",
+        VER(NVRAM_EF_UL1_VPA_SRC_SEL_HIGHBAND3_LID)
+    },
+    {
+        NVRAM_EF_UL1_VPA_SRC_SEL_LOWBAND1_LID,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULN8",
+        VER(NVRAM_EF_UL1_VPA_SRC_SEL_LOWBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_VPA_SRC_SEL_LOWBAND2_LID,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULN9",
+        VER(NVRAM_EF_UL1_VPA_SRC_SEL_LOWBAND2_LID)
+    },
+#endif/*IS_3G_VPA_SEL_BY_BAND_SUPPORT*/
+#if (IS_3G_TX_POWER_OFFSET_SUPPORT || IS_3G_SAR_TX_POWER_BACKOFF_SUPPORT)
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_HIGHBAND1_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULO1",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_HIGHBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_HIGHBAND2_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULO2",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_HIGHBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_HIGHBAND3_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULO3",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_HIGHBAND3_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_LOWBAND1_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULO4",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_LOWBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_LOWBAND2_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULO5",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_LOWBAND2_LID)
+    },
+#endif
+#if IS_3G_TAS_UL1_CUSTOM_SUPPORT
+    {
+        NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_LID,
+        NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_TOTAL,
+        NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP1",
+        VER(NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_LID)
+    },
+    {
+        NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_LID,
+        NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_TOTAL,
+        NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP2",
+        VER(NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_LID)
+    },
+    {
+        NVRAM_EF_UL1_TAS_FE_DATABASE_LID,
+        NVRAM_EF_UL1_TAS_FE_DATABASE_TOTAL,
+        NVRAM_EF_UL1_TAS_FE_DATABASE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP3",
+        VER(NVRAM_EF_UL1_TAS_FE_DATABASE_LID)
+    },
+#if (IS_3G_MIPI_NVRAM_FULL_SUPPORT)
+    /*TAS MIPI event/data cat A*/
+    {
+        NVRAM_EF_UL1_TAS_CAT_A_MIPI_EVENT_LID,
+        NVRAM_EF_UL1_CAT_A_TAS_MIPI_EVT_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_A_TAS_MIPI_EVT_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP4",
+        VER(NVRAM_EF_UL1_TAS_CAT_A_MIPI_EVENT_LID)
+    },
+    {
+        NVRAM_EF_UL1_TAS_CAT_A_MIPI_DATA_LID,
+        NVRAM_EF_UL1_CAT_A_TAS_MIPI_DATA_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_A_TAS_MIPI_DATA_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP5",
+        VER(NVRAM_EF_UL1_TAS_CAT_A_MIPI_DATA_LID)
+    },
+    /*TAS MIPI event/data cat B*/
+    {
+        NVRAM_EF_UL1_TAS_CAT_B_MIPI_EVENT_LID,
+        NVRAM_EF_UL1_CAT_B_TAS_MIPI_EVT_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_B_TAS_MIPI_EVT_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP6",
+        VER(NVRAM_EF_UL1_TAS_CAT_B_MIPI_EVENT_LID)
+    },
+    {
+        NVRAM_EF_UL1_TAS_CAT_B_MIPI_DATA_LID,
+        NVRAM_EF_UL1_CAT_B_TAS_MIPI_DATA_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_B_TAS_MIPI_DATA_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP7",
+        VER(NVRAM_EF_UL1_TAS_CAT_B_MIPI_DATA_LID)
+    },
+    /*TAS MIPI event/data cat C*/
+    {
+        NVRAM_EF_UL1_TAS_CAT_C_MIPI_EVENT_LID,
+        NVRAM_EF_UL1_CAT_C_TAS_MIPI_EVT_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_C_TAS_MIPI_EVT_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP8",
+        VER(NVRAM_EF_UL1_TAS_CAT_C_MIPI_EVENT_LID)
+    },
+    {
+        NVRAM_EF_UL1_TAS_CAT_C_MIPI_DATA_LID,
+        NVRAM_EF_UL1_CAT_C_TAS_MIPI_DATA_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_C_TAS_MIPI_DATA_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP9",
+        VER(NVRAM_EF_UL1_TAS_CAT_C_MIPI_DATA_LID)
+    },
+#endif
+#if IS_3G_TAS_INHERIT_4G_ANT
+    {
+        NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_LID,
+        NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_TOTAL,
+        NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPP",
+        VER(NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_LID)
+    },
+#endif
+#endif
+
+#if IS_3G_DAT_UL1_CUSTOM_SUPPORT
+    {
+        NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_LID,
+        NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_TOTAL,
+        NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPA",
+        VER(NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_LID)
+    },
+    {
+        NVRAM_EF_UL1_DAT_FE_ROUTE_DATABASE_LID,
+        NVRAM_EF_UL1_DAT_FE_ROUTE_DATABASE_TOTAL,
+        NVRAM_EF_UL1_DAT_FE_ROUTE_DATABASE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPB",
+        VER(NVRAM_EF_UL1_DAT_FE_ROUTE_DATABASE_LID)
+    },
+    {
+        NVRAM_EF_UL1_DAT_FE_DATABASE_LID,
+        NVRAM_EF_UL1_DAT_FE_DATABASE_TOTAL,
+        NVRAM_EF_UL1_DAT_FE_DATABASE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPC",
+        VER(NVRAM_EF_UL1_DAT_FE_DATABASE_LID)
+    },
+#if (IS_3G_MIPI_NVRAM_FULL_SUPPORT)
+    /*TAS MIPI event/data cat A*/
+    {
+        NVRAM_EF_UL1_DAT_CAT_A_MIPI_EVENT_LID,
+        NVRAM_EF_UL1_CAT_A_DAT_MIPI_EVT_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_A_DAT_MIPI_EVT_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPD",
+        VER(NVRAM_EF_UL1_DAT_CAT_A_MIPI_EVENT_LID)
+    },
+    {
+        NVRAM_EF_UL1_DAT_CAT_A_MIPI_DATA_LID,
+        NVRAM_EF_UL1_CAT_A_DAT_MIPI_DATA_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_A_DAT_MIPI_DATA_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPE",
+        VER(NVRAM_EF_UL1_DAT_CAT_A_MIPI_DATA_LID)
+    },
+    /*TAS MIPI event/data cat B*/
+    {
+        NVRAM_EF_UL1_DAT_CAT_B_MIPI_EVENT_LID,
+        NVRAM_EF_UL1_CAT_B_DAT_MIPI_EVT_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_B_DAT_MIPI_EVT_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPF",
+        VER(NVRAM_EF_UL1_DAT_CAT_B_MIPI_EVENT_LID)
+    },
+    {
+        NVRAM_EF_UL1_DAT_CAT_B_MIPI_DATA_LID,
+        NVRAM_EF_UL1_CAT_B_DAT_MIPI_DATA_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_B_DAT_MIPI_DATA_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPG",
+        VER(NVRAM_EF_UL1_DAT_CAT_B_MIPI_DATA_LID)
+    },
+#endif
+#endif
+
+#if defined(__MTK_UL1_FDD__)
+   {
+       NVRAM_EF_UL1_LOW_POWER_LID,
+       NVRAM_EF_UL1_LOW_POWER_TOTAL,
+       NVRAM_EF_UL1_LOW_POWER_SIZE,
+       NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_LOW_POWER_DEFAULT),
+       NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+       NVRAM_ATTR_AVERAGE,
+       "ULR1",
+       VER(NVRAM_EF_UL1_LOW_POWER_LID)
+    },
+#endif
+#if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
+    {
+        NVRAM_EF_UL1_TEMP_DAC_LID,
+        NVRAM_EF_UL1_TEMP_DAC_TOTAL,
+        NVRAM_EF_UL1_TEMP_DAC_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL10",
+        VER(NVRAM_EF_UL1_TEMP_DAC_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND1_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL11",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND2_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL12",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND2_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND3_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL13",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND3_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND4_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL14",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND4_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND5_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL15",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND5_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND6_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL16",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND6_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND7_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL17",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND7_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND8_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL18",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND8_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND9_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL19",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND9_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND10_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1A",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND10_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND11_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB0",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND11_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND19_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB1",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND19_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND1_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1B",
+        VER(NVRAM_EF_UL1_TXDAC_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND2_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1C",
+        VER(NVRAM_EF_UL1_TXDAC_BAND2_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND3_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1D",
+        VER(NVRAM_EF_UL1_TXDAC_BAND3_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND4_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1E",
+        VER(NVRAM_EF_UL1_TXDAC_BAND4_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND5_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1F",
+        VER(NVRAM_EF_UL1_TXDAC_BAND5_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND6_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1G",
+        VER(NVRAM_EF_UL1_TXDAC_BAND6_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND7_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1H",
+        VER(NVRAM_EF_UL1_TXDAC_BAND7_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND8_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1I",
+        VER(NVRAM_EF_UL1_TXDAC_BAND8_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND9_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1J",
+        VER(NVRAM_EF_UL1_TXDAC_BAND9_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXDAC_BAND10_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1K",
+        VER(NVRAM_EF_UL1_TXDAC_BAND10_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXDAC_BAND11_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB2",
+        VER(NVRAM_EF_UL1_TXDAC_BAND11_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXDAC_BAND19_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB3",
+        VER(NVRAM_EF_UL1_TXDAC_BAND19_LID)
+    },
+#if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+    /* PA 8-level control (for MT6276, MT6573) */
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND1_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1M",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND2_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1N",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND2_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND3_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1O",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND3_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND4_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1P",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND4_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND5_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1Q",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND5_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND6_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1R",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND6_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND7_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1S",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND7_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND8_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1T",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND8_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND9_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1U",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND9_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND10_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1V",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND10_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND11_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB4",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND11_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND19_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB5",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND19_LID)
+    },
+#endif // #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+#endif /* __UMTS_RAT__ && __MTK_UL1_FDD__*/
+
+#if defined(__UMTS_R8__)&&defined(__MTK_UL1_FDD__) //add by Jay
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND1_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL10",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND2_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL11",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND3_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL12",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND3_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND4_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL13",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND4_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND5_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL14",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND5_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND6_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL15",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND6_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND7_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL16",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND7_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND8_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL17",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND8_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND9_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL18",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND9_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND10_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL19",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND10_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND11_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB6",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND11_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND19_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB7",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND19_LID)
+    },
+//add by wilson
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND1_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1A",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND1_LID)
+    }, 
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND2_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1B",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND2_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND3_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1C",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND3_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND4_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1D",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND4_LID)
+    }, 
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND5_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1E",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND5_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND6_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1F",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND6_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND7_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1G",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND7_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND8_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1H",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND8_LID)
+    }, 
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND9_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1I",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND9_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND10_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1J",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND10_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND11_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB8",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND11_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND19_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB9",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND19_LID)
+    },
+    
+#endif
+
+#if defined (__MTK_UL1_FDD__)
+    /** Tx PRACH TM Compensation */
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND1_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1W",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND2_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1X",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND2_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND3_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1Y",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND3_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND4_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1Z",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND4_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND5_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL20",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND5_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND6_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL21",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND6_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND7_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL22",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND7_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND8_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL23",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND8_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND9_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL24",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND9_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND10_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL25",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND10_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND11_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBA",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND11_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND19_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBB",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND19_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_AFCDAC_LID,
+        NVRAM_EF_UL1_AFCDAC_TOTAL,
+        NVRAM_EF_UL1_AFCDAC_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBC",//note: only 4 char
+        VER(NVRAM_EF_UL1_AFCDAC_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_AFCCAP_LID,
+        NVRAM_EF_UL1_AFCCAP_TOTAL,
+        NVRAM_EF_UL1_AFCCAP_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBD",//note: only 4 char
+        VER(NVRAM_EF_UL1_AFCCAP_LID)
+    },
+
+#if (0)
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif /* IS_3G_TX_POWER_OFFSET_SUPPORT */
+
+    //Power on CAL
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND1_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBQ",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND2_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBR",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND2_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND3_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBS",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND3_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND4_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBT",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND4_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND5_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBU",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND5_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND6_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBV",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND6_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND7_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBW",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND7_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND8_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBX",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND8_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND9_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBY",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND9_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND10_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBZ",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND10_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND11_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULC0",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND11_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND19_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULC1",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND19_LID)
+    },
+#endif // (__MTK_UL1_FDD__)
+#if (IS_3G_RX_POWER_OFFSET_SUPPORT)
+    {
+        NVRAM_EF_UL1_RXPOWEROFFSET_HIGHBAND1_LID,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULq1",
+        VER(NVRAM_EF_UL1_RXPOWEROFFSET_HIGHBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_RXPOWEROFFSET_HIGHBAND2_LID,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULq2",
+        VER(NVRAM_EF_UL1_RXPOWEROFFSET_HIGHBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_RXPOWEROFFSET_HIGHBAND3_LID,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULq3",
+        VER(NVRAM_EF_UL1_RXPOWEROFFSET_HIGHBAND3_LID)
+    },
+    {
+        NVRAM_EF_UL1_RXPOWEROFFSET_LOWBAND1_LID,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULq4",
+        VER(NVRAM_EF_UL1_RXPOWEROFFSET_LOWBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_RXPOWEROFFSET_LOWBAND2_LID,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULq5",
+        VER(NVRAM_EF_UL1_RXPOWEROFFSET_LOWBAND2_LID)
+    },
+#endif   
+    {
+        NVRAM_EF_UL1_DPD_CTRL_DATA_HIGHBAND1_LID,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULS1",
+        VER(NVRAM_EF_UL1_DPD_CTRL_DATA_HIGHBAND1_LID)
+    },    
+    {
+        NVRAM_EF_UL1_DPD_CTRL_DATA_HIGHBAND2_LID,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULS2",
+        VER(NVRAM_EF_UL1_DPD_CTRL_DATA_HIGHBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_DPD_CTRL_DATA_HIGHBAND3_LID,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULS3",
+        VER(NVRAM_EF_UL1_DPD_CTRL_DATA_HIGHBAND3_LID)
+    },    
+    {
+        NVRAM_EF_UL1_DPD_CTRL_DATA_LOWBAND1_LID,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULS4",
+        VER(NVRAM_EF_UL1_DPD_CTRL_DATA_LOWBAND1_LID)
+    },    
+    {
+        NVRAM_EF_UL1_DPD_CTRL_DATA_LOWBAND2_LID,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULS5",
+        VER(NVRAM_EF_UL1_DPD_CTRL_DATA_LOWBAND2_LID)
+    },    
+    {
+        NVRAM_EF_UL1_DPD_CAL_DATA_HIGHBAND1_LID,
+        NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CAL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULS6",
+        VER(NVRAM_EF_UL1_DPD_CAL_DATA_HIGHBAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_DPD_CAL_DATA_HIGHBAND2_LID,
+        NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CAL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULS7",
+        VER(NVRAM_EF_UL1_DPD_CAL_DATA_HIGHBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_DPD_CAL_DATA_HIGHBAND3_LID,
+        NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CAL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULS8",
+        VER(NVRAM_EF_UL1_DPD_CAL_DATA_HIGHBAND3_LID)
+    },    
+    {
+        NVRAM_EF_UL1_DPD_CAL_DATA_LOWBAND1_LID,
+        NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CAL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULS9",
+        VER(NVRAM_EF_UL1_DPD_CAL_DATA_LOWBAND1_LID)
+    },    
+    {
+        NVRAM_EF_UL1_DPD_CAL_DATA_LOWBAND2_LID,
+        NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CAL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULSA",
+        VER(NVRAM_EF_UL1_DPD_CAL_DATA_LOWBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_DPD_PARAMETER_LID,
+        NVRAM_EF_UL1_DPD_PARAMETER_TOTAL,
+        NVRAM_EF_UL1_DPD_PARAMETER_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULSB",
+        VER(NVRAM_EF_UL1_DPD_PARAMETER_LID)
+    },   
+#if (IS_3G_MIPI_SUPPORT)    
+    {
+        NVRAM_EF_UL1_MIPI_DPD_TPC_HIGHBAND1_LID,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULSC",
+        VER(NVRAM_EF_UL1_MIPI_DPD_TPC_HIGHBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_DPD_TPC_HIGHBAND2_LID,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULSD",
+        VER(NVRAM_EF_UL1_MIPI_DPD_TPC_HIGHBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_DPD_TPC_HIGHBAND3_LID,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULSE",
+        VER(NVRAM_EF_UL1_MIPI_DPD_TPC_HIGHBAND3_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_DPD_TPC_LOWBAND1_LID,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULSF",
+        VER(NVRAM_EF_UL1_MIPI_DPD_TPC_LOWBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_DPD_TPC_LOWBAND2_LID,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULT1",
+        VER(NVRAM_EF_UL1_MIPI_DPD_TPC_LOWBAND2_LID)
+    },
+#endif
+#if defined(__MTK_UL1_FDD__)
+    {
+        NVRAM_EF_UL1_TAS_THRESHOLD_LID,
+        NVRAM_EF_UL1_TAS_THRESHOLD_TOTAL,
+        NVRAM_EF_UL1_TAS_THRESHOLD_SIZE,
+        NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_TAS_THRESHOLD_DEFAULT),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULC7",
+        VER(NVRAM_EF_UL1_TAS_THRESHOLD_LID)
+    },
+    {
+        NVRAM_EF_UL1_RAS_PARAMETER_LID,
+        NVRAM_EF_UL1_RAS_PARAMETER_TOTAL,
+        NVRAM_EF_UL1_RAS_PARAMETER_SIZE,
+        NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_RAS_PARAMETER_DEFAULT),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULC8",
+        VER(NVRAM_EF_UL1_RAS_PARAMETER_LID)
+    },
+#endif   
+#if ( IS_3G_MIPI_SUPPORT && __IS_UL1D_ETM_SUPPORT__ )
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_HIGHBAND1_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULT2",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_HIGHBAND1_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_HIGHBAND2_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULT3",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_HIGHBAND2_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_HIGHBAND3_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULT4",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_HIGHBAND3_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_LOWBAND1_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULT5",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_LOWBAND1_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_LOWBAND2_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULT6",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_LOWBAND2_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_HIGHBAND1_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULT7",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_HIGHBAND1_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_HIGHBAND2_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULT8",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_HIGHBAND2_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_HIGHBAND3_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULT9",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_HIGHBAND3_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_LOWBAND1_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTA",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_LOWBAND1_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_LOWBAND2_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTB",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_LOWBAND2_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_HIGHBAND1_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTC",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_HIGHBAND1_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_HIGHBAND2_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTD",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_HIGHBAND2_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_HIGHBAND3_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTE",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_HIGHBAND3_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_LOWBAND1_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTF",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_LOWBAND1_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_LOWBAND2_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTG",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_LOWBAND2_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_HIGHBAND1_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTH",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_HIGHBAND1_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_HIGHBAND2_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTI",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_HIGHBAND2_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_HIGHBAND3_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTJ",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_HIGHBAND3_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_LOWBAND1_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTK",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_LOWBAND1_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_LOWBAND2_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTL",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_LOWBAND2_LID)
+   },
+#endif   // #if ( IS_3G_MIPI_SUPPORT && __IS_UL1D_ETM_SUPPORT__ )
+#if (IS_3G_RFEQ_COEF_SUBBAND_SUPPORT)
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_HIGHBAND1_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UEQ1",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_HIGHBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_HIGHBAND2_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UEQ2",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_HIGHBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_HIGHBAND3_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UEQ3",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_HIGHBAND3_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_LOWBAND1_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UEQ4",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_LOWBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_LOWBAND2_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UEQ5",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_LOWBAND2_LID)
+    },
+#endif
+#if (IS_3G_RFEQ_REAL_COEF_TEST)
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_HIGHBAND1_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UEQ6",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_HIGHBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_HIGHBAND2_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UEQ7",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_HIGHBAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_HIGHBAND3_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UEQ8",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_HIGHBAND3_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_LOWBAND1_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UEQ9",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_LOWBAND1_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_LOWBAND2_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UEQA",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_LOWBAND2_LID)
+    },
+#endif
+
+};
+
+#endif /* #if defined (__MTK_UL1_FDD__) */
+
+#endif /* NVRAM_NOT_PRESENT */
diff --git a/mcu/custom/protocol/common/ps/ul1_nvram_def_md95.c b/mcu/custom/protocol/common/ps/ul1_nvram_def_md95.c
new file mode 100644
index 0000000..170b1b6
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/ul1_nvram_def_md95.c
@@ -0,0 +1,3400 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * ul1_nvram_def.c
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *    This file contains `vendor' defined logical data items stored in NVRAM.
+ *    These logical data items are used in object code of Protocol Stack software.
+ *
+ *    As for customizable logical data items, they are defined in nvram_user_config.c
+ *
+ * Author:
+ * -------
+ * 
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef NVRAM_NOT_PRESENT
+
+/* In case of that not to build this file in 2G projects or 3G TDD projects */
+#if defined (__MTK_UL1_FDD__)
+
+
+/*
+ *   Include Headers
+ */
+
+#include "kal_general_types.h"
+
+/*
+ *   NVRAM Basic Headers
+ */
+#ifdef NVRAM_AUTO_GEN
+#include "nvram_auto_gen.h"
+#endif
+
+#include "nvram_enums.h"
+#include "nvram_defs.h"
+#include "nvram_data_items.h"
+
+/*
+ *   User Headers
+ */
+#include "ul1_nvram_def.h"
+#include "ul1d_rf_cid.h"
+
+/*
+ *   Default value
+ */
+/* Custpack LIDs' default value should left in nvram_cust_pack.c */ 
+#if (defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__))
+    extern U_sUl1dRfCustomInputData COMMON_NVRAM_EF_UL1_3G_RF_PARAMETER_DEFAULT[];
+#endif
+
+#if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+    extern U_sUl1IotCustomSupportStruct COMMON_NVRAM_EF_UL1_IOT_CUSTOMIZATION_DEFAULT[];
+#endif
+
+#if defined (__UL1_HS_PLUS_PLATFORM__) || defined (__UL1_HS_PLATFORM__)
+    extern nvram_ef_ul1_hspa_category_struct COMMON_NVRAM_EF_UL1_HSPA_CATEGORY_DEFAULT[];
+#endif
+
+#if defined (__MTK_UL1_FDD__)
+    extern nvram_ef_ul1_low_power_category_struct COMMON_NVRAM_EF_UL1_LOW_POWER_DEFAULT[];
+    static nvram_ef_ul1_hs_patch_struct const COMMON_NVRAM_EF_UL1_HS_PATCH_DEFAULT[NVRAM_EF_UL1_HS_PATCH_TOTAL]=
+    {
+       {
+          KAL_TRUE
+       }
+    };
+#endif
+
+
+#if defined (__UL1_PLATFORM__)
+	#if defined (__MTK_UL1_FDD__)
+		extern nvram_ef_ul1_rf_custpack_data_select_struct COMMON_NVRAM_EF_UL1_RF_CUSTPACK_DATA_SELECT_DEFAULT[];
+		extern nvram_ef_ul1_rf_custom_data_struct COMMON_NVRAM_EF_UL1_RF_CUSTOM_DATA_DEFAULT[];
+	#endif
+#endif
+
+/*
+ *   Function extern
+ */
+extern void nvram_get_uL1_default_value_to_write(nvram_lid_enum lid, kal_uint8 * buffer, kal_uint16 buffer_size);
+#if defined (__MTK_UL1_FDD__)
+extern nvram_ef_umts_tas_thr_struct COMMON_NVRAM_EF_UL1_TAS_THRESHOLD_DEFAULT[];
+extern nvram_ef_umts_ul1_ras_struct COMMON_NVRAM_EF_UL1_RAS_PARAMETER_DEFAULT[];
+extern nvram_ef_umts_ul1_utas_struct COMMON_NVRAM_EF_UL1_UTAS_PARAMETER_DEFAULT[];
+#endif
+
+/*
+ *   LID table
+ */
+
+ltable_entry_struct logical_data_item_table_ul1[] =
+{
+#if (defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__))
+    {
+        NVRAM_EF_UL1_3G_RF_PARAMETER_LID,
+        NVRAM_EF_UL1_3G_RF_PARAMETER_TOTAL,
+        NVRAM_EF_UL1_3G_RF_PARAMETER_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL03",
+        VER(NVRAM_EF_UL1_3G_RF_PARAMETER_LID)
+    },
+#endif /* #if (defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)) */
+
+#if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+    {
+        NVRAM_EF_UL1_IOT_CUSTOMIZATION_LID,
+        NVRAM_EF_UL1_IOT_CUSTOMIZATION_TOTAL,
+        NVRAM_EF_UL1_IOT_CUSTOMIZATION_SIZE,
+        NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_IOT_CUSTOMIZATION_DEFAULT),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+        NVRAM_ATTR_AVERAGE,
+        "UL04",
+        VER(NVRAM_EF_UL1_IOT_CUSTOMIZATION_LID)
+    },
+#endif /* #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__) */
+
+#if defined (__UL1_HS_PLUS_PLATFORM__) || defined (__UL1_HS_PLATFORM__)
+   {
+       NVRAM_EF_UL1_HSPA_CATEGORY_LID,
+       NVRAM_EF_UL1_HSPA_CATEGORY_TOTAL,
+       NVRAM_EF_UL1_HSPA_CATEGORY_SIZE,
+       NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_HSPA_CATEGORY_DEFAULT),
+       NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+       NVRAM_ATTR_AVERAGE,
+       "UL05",
+       VER(NVRAM_EF_UL1_HSPA_CATEGORY_LID)
+    },
+#endif
+#if (IS_3G_MIPI_SUPPORT)
+ #if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+ #endif
+    {
+        NVRAM_EF_UL1_MIPI_TPC_ROUTE1_LID,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULU1",
+        VER(NVRAM_EF_UL1_MIPI_TPC_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TPC_ROUTE2_LID,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULU2",
+        VER(NVRAM_EF_UL1_MIPI_TPC_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TPC_ROUTE3_LID,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULU3",
+        VER(NVRAM_EF_UL1_MIPI_TPC_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TPC_ROUTE4_LID,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULU4",
+        VER(NVRAM_EF_UL1_MIPI_TPC_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TPC_ROUTE5_LID,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULU5",
+        VER(NVRAM_EF_UL1_MIPI_TPC_ROUTE5_LID)
+    },
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+    {
+        NVRAM_EF_UL1_MIPI_TPC_ROUTE6_LID,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULU6",
+        VER(NVRAM_EF_UL1_MIPI_TPC_ROUTE6_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TPC_ROUTE7_LID,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULU7",
+        VER(NVRAM_EF_UL1_MIPI_TPC_ROUTE7_LID)
+    }, 
+    {
+        NVRAM_EF_UL1_MIPI_TPC_ROUTE8_LID,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULU8",
+        VER(NVRAM_EF_UL1_MIPI_TPC_ROUTE8_LID)
+    },  
+#endif/*IS_3G_SUPPORT_8_BANDINDICATOR*/
+#endif /* IS_3G_MIPI_SUPPORT */
+#if (IS_3G_MIPI_NVRAM_FULL_SUPPORT)
+    {
+        NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE1_LID,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUB",
+        VER(NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE2_LID,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUC",
+        VER(NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE3_LID,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUD",
+        VER(NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE4_LID,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUE",
+        VER(NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE5_LID,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUF",
+        VER(NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE5_LID)
+    },
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+    {
+        NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE6_LID,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUG",
+        VER(NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE6_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE7_LID,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUH",
+        VER(NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE7_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE8_LID,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUI",
+        VER(NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE8_LID)
+    },       
+#endif/*IS_3G_SUPPORT_8_BANDINDICATOR*/    
+    {
+        NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE1_LID,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUJ",
+        VER(NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE2_LID,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET,
+        "ULUK",
+        VER(NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE3_LID,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUL",
+        VER(NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE4_LID,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUM",
+        VER(NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE5_LID,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUN",
+        VER(NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE5_LID)
+    },
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+    {
+        NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE6_LID,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUO",
+        VER(NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE6_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE7_LID,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUP",
+        VER(NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE7_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE8_LID,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_RX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUQ",
+        VER(NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE8_LID)
+    },   
+#endif
+    {
+        NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE1_LID,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUR",
+        VER(NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE2_LID,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUS",
+        VER(NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE3_LID,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUT",
+        VER(NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE4_LID,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUU",
+        VER(NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE5_LID,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUV",
+        VER(NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE5_LID)
+    },
+#if IS_3G_SUPPORT_8_BANDINDICATOR 
+    {
+        NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE6_LID,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUW",
+        VER(NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE6_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE7_LID,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUX",
+        VER(NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE7_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE8_LID,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULUY",
+        VER(NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE8_LID)
+    },
+#endif
+    {
+        NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE1_LID,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNA",
+        VER(NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE2_LID,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNB",
+        VER(NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE3_LID,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNC",
+        VER(NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE4_LID,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULND",
+        VER(NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE5_LID,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNE",
+        VER(NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE5_LID)
+    },
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+    {
+        NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE6_LID,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNF",
+        VER(NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE6_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE7_LID,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNG",
+        VER(NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE7_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE8_LID,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNH",
+        VER(NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE8_LID)
+    },   
+#endif
+    {
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE1_LID,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNI",
+        VER(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE2_LID,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNJ",
+        VER(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE3_LID,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNK",
+        VER(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE4_LID,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNL",
+        VER(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE5_LID,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNM",
+        VER(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE5_LID)
+    },
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+    {
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE6_LID,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNN",
+        VER(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE6_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE7_LID,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNO",
+        VER(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE7_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE8_LID,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNP",
+        VER(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE8_LID)
+    },   
+#endif
+    {
+        NVRAM_EF_UL1_MIPI_INIT_CW_LID,
+        NVRAM_EF_UL1_MIPI_INIT_CW_TOTAL,
+        NVRAM_EF_UL1_MIPI_INIT_CW_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULN1",
+        VER(NVRAM_EF_UL1_MIPI_INIT_CW_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_SLEEP_CW_LID,
+        NVRAM_EF_UL1_MIPI_SLEEP_CW_TOTAL,
+        NVRAM_EF_UL1_MIPI_SLEEP_CW_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULN2",
+        VER(NVRAM_EF_UL1_MIPI_SLEEP_CW_LID)
+    },
+#endif /* IS_3G_MIPI_NVRAM_FULL_SUPPORT */
+#if (IS_3G_VPA_SEL_BY_BAND_SUPPORT)
+    {
+        NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE1_LID,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNR",
+        VER(NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE2_LID,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNS",
+        VER(NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE3_LID,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNT",
+        VER(NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE4_LID,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNU",
+        VER(NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE5_LID,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNV",
+        VER(NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE5_LID)
+    },
+#if IS_3G_SUPPORT_8_BANDINDICATOR  
+    {
+        NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE6_LID,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNW",
+        VER(NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE6_LID)
+    },
+     {
+        NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE7_LID,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNX",
+        VER(NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE7_LID)
+    },
+    {
+        NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE8_LID,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL,
+        NVRAM_EF_UL1_VPA_SRC_SEL_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNY",
+        VER(NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE8_LID)
+    }, 
+#endif   
+#endif/*IS_3G_VPA_SEL_BY_BAND_SUPPORT*/
+#if (IS_3G_TX_POWER_OFFSET_SUPPORT || IS_3G_SAR_TX_POWER_BACKOFF_SUPPORT)
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE1_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULO6",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE2_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULO7",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE3_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULO8",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE4_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULO9",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE5_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOA",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE5_LID)
+    },
+#if IS_3G_SUPPORT_8_BANDINDICATOR 
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE6_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOB",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE6_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE7_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOC",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE7_LID)
+    }, 
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE8_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOD",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE8_LID)
+    }, 
+#endif /*IS_3G_SUPPORT_8_BANDINDICATOR*/
+#endif
+#if IS_3G_TX_NSFT_POWER_OFFSET_SUPPORT
+    {
+        NVRAM_EF_UL1_TXNSFTPOWEROFFSET_LID,
+        NVRAM_EF_UL1_TXNSFTPOWEROFFSET_TOTAL,
+        NVRAM_EF_UL1_TXNSFTPOWEROFFSET_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOU",
+        VER(NVRAM_EF_UL1_TXNSFTPOWEROFFSET_LID)
+    },
+#endif
+#if IS_3G_TAS_UL1_CUSTOM_SUPPORT
+    {
+        NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_LID,
+        NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_TOTAL,
+        NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP1",
+        VER(NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_LID)
+    },
+    {
+        NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_LID,
+        NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_TOTAL,
+        NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP2",
+        VER(NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_LID)
+    },
+#if !IS_3G_UTAS_SUPPORT
+    {
+        NVRAM_EF_UL1_TAS_FE_DATABASE_LID,
+        NVRAM_EF_UL1_TAS_FE_DATABASE_TOTAL,
+        NVRAM_EF_UL1_TAS_FE_DATABASE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP3",
+        VER(NVRAM_EF_UL1_TAS_FE_DATABASE_LID)
+    },
+#if (IS_3G_MIPI_NVRAM_FULL_SUPPORT)
+    /*TAS MIPI event/data cat A*/
+    {
+        NVRAM_EF_UL1_TAS_CAT_A_MIPI_EVENT_LID,
+        NVRAM_EF_UL1_CAT_A_TAS_MIPI_EVT_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_A_TAS_MIPI_EVT_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP4",
+        VER(NVRAM_EF_UL1_TAS_CAT_A_MIPI_EVENT_LID)
+    },
+    {
+        NVRAM_EF_UL1_TAS_CAT_A_MIPI_DATA_LID,
+        NVRAM_EF_UL1_CAT_A_TAS_MIPI_DATA_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_A_TAS_MIPI_DATA_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP5",
+        VER(NVRAM_EF_UL1_TAS_CAT_A_MIPI_DATA_LID)
+    },
+    /*TAS MIPI event/data cat B*/
+    {
+        NVRAM_EF_UL1_TAS_CAT_B_MIPI_EVENT_LID,
+        NVRAM_EF_UL1_CAT_B_TAS_MIPI_EVT_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_B_TAS_MIPI_EVT_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP6",
+        VER(NVRAM_EF_UL1_TAS_CAT_B_MIPI_EVENT_LID)
+    },
+    {
+        NVRAM_EF_UL1_TAS_CAT_B_MIPI_DATA_LID,
+        NVRAM_EF_UL1_CAT_B_TAS_MIPI_DATA_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_B_TAS_MIPI_DATA_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP7",
+        VER(NVRAM_EF_UL1_TAS_CAT_B_MIPI_DATA_LID)
+    },
+    /*TAS MIPI event/data cat C*/
+    {
+        NVRAM_EF_UL1_TAS_CAT_C_MIPI_EVENT_LID,
+        NVRAM_EF_UL1_CAT_C_TAS_MIPI_EVT_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_C_TAS_MIPI_EVT_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP8",
+        VER(NVRAM_EF_UL1_TAS_CAT_C_MIPI_EVENT_LID)
+    },
+    {
+        NVRAM_EF_UL1_TAS_CAT_C_MIPI_DATA_LID,
+        NVRAM_EF_UL1_CAT_C_TAS_MIPI_DATA_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_C_TAS_MIPI_DATA_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP9",
+        VER(NVRAM_EF_UL1_TAS_CAT_C_MIPI_DATA_LID)
+    },
+#endif
+#endif
+#if IS_3G_TAS_INHERIT_4G_ANT
+    {
+        NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_LID,
+        NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_TOTAL,
+        NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPP",
+        VER(NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_LID)
+    },
+#endif
+#endif
+
+#if IS_3G_DAT_UL1_CUSTOM_SUPPORT
+    {
+        NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_LID,
+        NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_TOTAL,
+        NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPA",
+        VER(NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_LID)
+    },
+    {
+        NVRAM_EF_UL1_DAT_FE_ROUTE_DATABASE_LID,
+        NVRAM_EF_UL1_DAT_FE_ROUTE_DATABASE_TOTAL,
+        NVRAM_EF_UL1_DAT_FE_ROUTE_DATABASE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPB",
+        VER(NVRAM_EF_UL1_DAT_FE_ROUTE_DATABASE_LID)
+    },
+#if !IS_3G_UDAT_SUPPORT
+    {
+        NVRAM_EF_UL1_DAT_FE_DATABASE_LID,
+        NVRAM_EF_UL1_DAT_FE_DATABASE_TOTAL,
+        NVRAM_EF_UL1_DAT_FE_DATABASE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPC",
+        VER(NVRAM_EF_UL1_DAT_FE_DATABASE_LID)
+    },
+#if (IS_3G_MIPI_NVRAM_FULL_SUPPORT)
+    /*TAS MIPI event/data cat A*/
+    {
+        NVRAM_EF_UL1_DAT_CAT_A_MIPI_EVENT_LID,
+        NVRAM_EF_UL1_CAT_A_DAT_MIPI_EVT_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_A_DAT_MIPI_EVT_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPD",
+        VER(NVRAM_EF_UL1_DAT_CAT_A_MIPI_EVENT_LID)
+    },
+    {
+        NVRAM_EF_UL1_DAT_CAT_A_MIPI_DATA_LID,
+        NVRAM_EF_UL1_CAT_A_DAT_MIPI_DATA_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_A_DAT_MIPI_DATA_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPE",
+        VER(NVRAM_EF_UL1_DAT_CAT_A_MIPI_DATA_LID)
+    },
+    /*TAS MIPI event/data cat B*/
+    {
+        NVRAM_EF_UL1_DAT_CAT_B_MIPI_EVENT_LID,
+        NVRAM_EF_UL1_CAT_B_DAT_MIPI_EVT_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_B_DAT_MIPI_EVT_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPF",
+        VER(NVRAM_EF_UL1_DAT_CAT_B_MIPI_EVENT_LID)
+    },
+    {
+        NVRAM_EF_UL1_DAT_CAT_B_MIPI_DATA_LID,
+        NVRAM_EF_UL1_CAT_B_DAT_MIPI_DATA_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_B_DAT_MIPI_DATA_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPG",
+        VER(NVRAM_EF_UL1_DAT_CAT_B_MIPI_DATA_LID)
+    },
+#endif
+#endif /*!IS_3G_UDAT_SUPPORT*/
+#endif
+
+#if defined(__MTK_UL1_FDD__)
+   {
+       NVRAM_EF_UL1_LOW_POWER_LID,
+       NVRAM_EF_UL1_LOW_POWER_TOTAL,
+       NVRAM_EF_UL1_LOW_POWER_SIZE,
+       NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_LOW_POWER_DEFAULT),
+       NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+       NVRAM_ATTR_AVERAGE,
+       "ULR1",
+       VER(NVRAM_EF_UL1_LOW_POWER_LID)
+    },
+   {
+       NVRAM_EF_UL1_HS_PATCH_LID,
+       NVRAM_EF_UL1_HS_PATCH_TOTAL,
+       NVRAM_EF_UL1_HS_PATCH_SIZE,
+       NVRAM_NORMAL(COMMON_NVRAM_EF_UL1_HS_PATCH_DEFAULT),
+       NVRAM_CATEGORY_USER,
+       NVRAM_ATTR_AVERAGE,
+       "ULOV",
+       VER(NVRAM_EF_UL1_HS_PATCH_LID)
+    },
+#endif
+#if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
+    {
+        NVRAM_EF_UL1_TEMP_DAC_LID,
+        NVRAM_EF_UL1_TEMP_DAC_TOTAL,
+        NVRAM_EF_UL1_TEMP_DAC_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL10",
+        VER(NVRAM_EF_UL1_TEMP_DAC_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND1_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL11",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND2_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL12",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND2_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND3_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL13",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND3_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND4_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL14",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND4_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND5_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL15",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND5_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND6_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL16",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND6_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND7_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL17",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND7_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND8_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL18",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND8_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND9_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL19",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND9_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND10_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1A",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND10_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND11_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB0",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND11_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND19_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB1",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND19_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND1_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1B",
+        VER(NVRAM_EF_UL1_TXDAC_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND2_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1C",
+        VER(NVRAM_EF_UL1_TXDAC_BAND2_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND3_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1D",
+        VER(NVRAM_EF_UL1_TXDAC_BAND3_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND4_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1E",
+        VER(NVRAM_EF_UL1_TXDAC_BAND4_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND5_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1F",
+        VER(NVRAM_EF_UL1_TXDAC_BAND5_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND6_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1G",
+        VER(NVRAM_EF_UL1_TXDAC_BAND6_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND7_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1H",
+        VER(NVRAM_EF_UL1_TXDAC_BAND7_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND8_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1I",
+        VER(NVRAM_EF_UL1_TXDAC_BAND8_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND9_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1J",
+        VER(NVRAM_EF_UL1_TXDAC_BAND9_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXDAC_BAND10_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1K",
+        VER(NVRAM_EF_UL1_TXDAC_BAND10_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXDAC_BAND11_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB2",
+        VER(NVRAM_EF_UL1_TXDAC_BAND11_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXDAC_BAND19_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB3",
+        VER(NVRAM_EF_UL1_TXDAC_BAND19_LID)
+    },
+#if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+    /* PA 8-level control (for MT6276, MT6573) */
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND1_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1M",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND2_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1N",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND2_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND3_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1O",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND3_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND4_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1P",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND4_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND5_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1Q",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND5_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND6_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1R",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND6_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND7_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1S",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND7_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND8_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1T",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND8_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND9_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1U",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND9_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND10_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1V",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND10_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND11_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB4",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND11_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND19_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB5",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND19_LID)
+    },
+#endif // #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+#endif /* __UMTS_RAT__ && __MTK_UL1_FDD__*/
+
+#if defined(__UMTS_R8__)&&defined(__MTK_UL1_FDD__) //add by Jay
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND1_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL10",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND2_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL11",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND3_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL12",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND3_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND4_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL13",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND4_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND5_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL14",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND5_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND6_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL15",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND6_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND7_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL16",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND7_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND8_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL17",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND8_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND9_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL18",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND9_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND10_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL19",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND10_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND11_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB6",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND11_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND19_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB7",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND19_LID)
+    },
+//add by wilson
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND1_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1A",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND1_LID)
+    }, 
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND2_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1B",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND2_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND3_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1C",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND3_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND4_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1D",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND4_LID)
+    }, 
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND5_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1E",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND5_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND6_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1F",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND6_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND7_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1G",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND7_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND8_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1H",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND8_LID)
+    }, 
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND9_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1I",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND9_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND10_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1J",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND10_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND11_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB8",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND11_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND19_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB9",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND19_LID)
+    },
+    
+#endif
+
+#if defined (__MTK_UL1_FDD__)
+    /** Tx PRACH TM Compensation */
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND1_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1W",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND2_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1X",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND2_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND3_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1Y",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND3_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND4_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1Z",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND4_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND5_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL20",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND5_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND6_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL21",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND6_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND7_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL22",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND7_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND8_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL23",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND8_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND9_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL24",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND9_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND10_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL25",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND10_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND11_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBA",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND11_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND19_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBB",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND19_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_AFCDAC_LID,
+        NVRAM_EF_UL1_AFCDAC_TOTAL,
+        NVRAM_EF_UL1_AFCDAC_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBC",//note: only 4 char
+        VER(NVRAM_EF_UL1_AFCDAC_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_AFCCAP_LID,
+        NVRAM_EF_UL1_AFCCAP_TOTAL,
+        NVRAM_EF_UL1_AFCCAP_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBD",//note: only 4 char
+        VER(NVRAM_EF_UL1_AFCCAP_LID)
+    },
+
+#if (0)
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif /* IS_3G_TX_POWER_OFFSET_SUPPORT */
+
+    //Power on CAL
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND1_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBQ",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND2_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBR",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND2_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND3_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBS",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND3_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND4_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBT",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND4_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND5_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBU",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND5_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND6_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBV",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND6_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND7_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBW",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND7_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND8_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBX",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND8_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND9_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBY",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND9_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND10_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBZ",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND10_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND11_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULC0",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND11_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND19_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULC1",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND19_LID)
+    },
+#endif // (__MTK_UL1_FDD__)
+#if (IS_3G_RX_POWER_OFFSET_SUPPORT)
+    {
+        NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE1_LID,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOE",
+        VER(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE2_LID,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOF",
+        VER(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE3_LID,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOG",
+        VER(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE4_LID,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOH",
+        VER(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE5_LID,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOI",
+        VER(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE5_LID)
+    },
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+    {
+       NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE6_LID,
+       NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+       NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+       NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+       NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+       NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+       "ULOJ",
+       VER(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE6_LID)
+    }, 
+    {
+       NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE7_LID,
+       NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+       NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+       NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+       NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+       NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+       "ULOK",
+       VER(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE7_LID)
+    },
+    {
+       NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE8_LID,
+       NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+       NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+       NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+       NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+       NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+       "ULOL",
+       VER(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE8_LID)
+    },
+#endif/*IS_3G_SUPPORT_8_BANDINDICATOR*/	
+#endif   
+    {
+        NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE1_LID,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULZ1",
+        VER(NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE1_LID)
+    },    
+    {
+        NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE2_LID,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULZ2",
+        VER(NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE3_LID,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULZ3",
+        VER(NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE3_LID)
+    },    
+    {
+        NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE4_LID,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULZ4",
+        VER(NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE4_LID)
+    },    
+    {
+        NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE5_LID,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULZ5",
+        VER(NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE5_LID)
+    },    
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+    {
+        NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE6_LID,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULZ6",
+        VER(NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE6_LID)
+    }, 
+    {
+        NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE7_LID,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULZ7",
+        VER(NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE7_LID)
+    },  
+    {
+        NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE8_LID,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CTRL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULZ8",
+        VER(NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE8_LID)
+    },
+#endif/*IS_3G_SUPPORT_8_BANDINDICATOR*/
+    {
+        NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE1_LID,
+        NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CAL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULZA",
+        VER(NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE2_LID,
+        NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CAL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULZB",
+        VER(NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE3_LID,
+        NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CAL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULZC",
+        VER(NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE3_LID)
+    },    
+    {
+        NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE4_LID,
+        NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CAL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULZD",
+        VER(NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE4_LID)
+    },    
+    {
+        NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE5_LID,
+        NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CAL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULZE",
+        VER(NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE5_LID)
+    },
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+    {
+        NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE6_LID,
+        NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CAL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULZF",
+        VER(NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE6_LID)
+    },
+    {
+        NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE7_LID,
+        NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CAL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULZG",
+        VER(NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE7_LID)
+    },
+    {
+        NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE8_LID,
+        NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL,
+        NVRAM_EF_UL1_DPD_CAL_DATA_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULZH",
+        VER(NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE8_LID)
+    },
+#endif/*IS_3G_SUPPORT_8_BANDINDICATOR*/
+    {
+        NVRAM_EF_UL1_DPD_PARAMETER_LID,
+        NVRAM_EF_UL1_DPD_PARAMETER_TOTAL,
+        NVRAM_EF_UL1_DPD_PARAMETER_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULSB",
+        VER(NVRAM_EF_UL1_DPD_PARAMETER_LID)
+    },   
+#if (IS_3G_MIPI_SUPPORT)    
+    {
+        NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE1_LID,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULSG",
+        VER(NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE2_LID,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULSH",
+        VER(NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE3_LID,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULSI",
+        VER(NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE4_LID,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULSJ",
+        VER(NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE5_LID,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULSK",
+        VER(NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE5_LID)
+    },
+    #if IS_3G_SUPPORT_8_BANDINDICATOR
+    {
+        NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE6_LID,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULSL",
+        VER(NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE6_LID)
+    },
+     {
+        NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE7_LID,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULSM",
+        VER(NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE7_LID)
+    },
+     {
+        NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE8_LID,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE,
+        "ULSN",
+        VER(NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE8_LID)
+    },
+   #endif/*IS_3G_SUPPORT_8_BANDINDICATOR*/
+#endif
+#if defined(__MTK_UL1_FDD__)
+    {
+        NVRAM_EF_UL1_TAS_THRESHOLD_LID,
+        NVRAM_EF_UL1_TAS_THRESHOLD_TOTAL,
+        NVRAM_EF_UL1_TAS_THRESHOLD_SIZE,
+        NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_TAS_THRESHOLD_DEFAULT),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULC7",
+        VER(NVRAM_EF_UL1_TAS_THRESHOLD_LID)
+    },
+    {
+        NVRAM_EF_UL1_RAS_PARAMETER_LID,
+        NVRAM_EF_UL1_RAS_PARAMETER_TOTAL,
+        NVRAM_EF_UL1_RAS_PARAMETER_SIZE,
+        NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_RAS_PARAMETER_DEFAULT),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULC8",
+        VER(NVRAM_EF_UL1_RAS_PARAMETER_LID)
+    },
+#endif   
+#if ( IS_3G_MIPI_SUPPORT && __IS_UL1D_ETM_SUPPORT__ )
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE1_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTM",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE1_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE2_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTN",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE2_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE3_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTO",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE3_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE4_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTP",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE4_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE5_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTY",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE5_LID)
+   },
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE6_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTZ",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE6_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE7_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULT0",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE7_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE8_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULNZ",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE8_LID)
+   },
+#endif   // IS_3G_SUPPORT_8_BANDINDICATOR
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE1_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPH",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE1_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE2_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPI",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE2_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE3_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPJ",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE3_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE4_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPK",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE4_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE5_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPL",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE5_LID)
+   },
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE6_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPM",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE6_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE7_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPN",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE7_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE8_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPO",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE8_LID)
+   },
+#endif   // IS_3G_SUPPORT_8_BANDINDICATOR
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE1_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOM",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE1_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE2_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULON",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE2_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE3_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOO",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE3_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE4_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOP",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE4_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE5_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOQ",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE5_LID)
+   },
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE6_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOR",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE6_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE7_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOS",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE7_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE8_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOT",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE8_LID)
+   },  
+#endif   // IS_3G_SUPPORT_8_BANDINDICATOR
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE1_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTQ",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE1_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE2_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTR",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE2_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE3_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTS",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE3_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE4_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTT",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE4_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE5_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTU",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE5_LID)
+   },
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE6_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTV",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE6_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE7_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTW",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE7_LID)
+   },
+   {
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE8_LID,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL,
+        NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULTX",
+        VER(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE8_LID)
+   },
+#endif   // IS_3G_SUPPORT_8_BANDINDICATOR   
+#endif   // #if ( IS_3G_MIPI_SUPPORT && __IS_UL1D_ETM_SUPPORT__ )
+#if (IS_3G_RFEQ_COEF_SUBBAND_SUPPORT)
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_ROUTE1_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZI",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_ROUTE2_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZJ",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_ROUTE3_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZK",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_ROUTE4_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZL",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_ROUTE5_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZM",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_ROUTE5_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_ROUTE6_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZN",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_ROUTE6_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_ROUTE7_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZO",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_ROUTE7_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_ROUTE8_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZP",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_ROUTE8_LID)
+    },
+#endif
+#if (IS_3G_RFEQ_REAL_COEF_TEST)
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE1_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZQ",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE2_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZR",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE3_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZS",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE4_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZT",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE5_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZU",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE5_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE6_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZV",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE6_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE7_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZW",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE7_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE8_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZX",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE8_LID)
+    },
+#endif
+#if defined(__MTK_UL1_FDD__)
+    {
+       NVRAM_EF_UL1_UTAS_PARAMETER_LID,
+       NVRAM_EF_UL1_UTAS_PARAMETER_TOTAL,
+       NVRAM_EF_UL1_UTAS_PARAMETER_SIZE,
+       NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_UTAS_PARAMETER_DEFAULT),
+       NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+       NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+       "ULZY",
+       VER(NVRAM_EF_UL1_UTAS_PARAMETER_LID)
+    },
+#endif
+};
+
+#endif /* #if defined (__MTK_UL1_FDD__) */
+
+#endif /* NVRAM_NOT_PRESENT */
diff --git a/mcu/custom/protocol/common/ps/ul1_nvram_def_md97.c b/mcu/custom/protocol/common/ps/ul1_nvram_def_md97.c
new file mode 100644
index 0000000..bdc6850
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/ul1_nvram_def_md97.c
@@ -0,0 +1,2246 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * ul1_nvram_def.c
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *    This file contains `vendor' defined logical data items stored in NVRAM.
+ *    These logical data items are used in object code of Protocol Stack software.
+ *
+ *    As for customizable logical data items, they are defined in nvram_user_config.c
+ *
+ * Author:
+ * -------
+ * 
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef NVRAM_NOT_PRESENT
+
+/* In case of that not to build this file in 2G projects or 3G TDD projects */
+#if defined (__MTK_UL1_FDD__)
+
+
+/*
+ *   Include Headers
+ */
+
+#include "kal_general_types.h"
+
+/*
+ *   NVRAM Basic Headers
+ */
+#ifdef NVRAM_AUTO_GEN
+#include "nvram_auto_gen.h"
+#endif
+
+#include "nvram_enums.h"
+#include "nvram_defs.h"
+#include "nvram_data_items.h"
+
+/*
+ *   User Headers
+ */
+#include "ul1_nvram_def.h"
+#include "ul1d_rf_cid.h"
+
+/*
+ *   Default value
+ */
+/* Custpack LIDs' default value should left in nvram_cust_pack.c */ 
+#if (defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__))
+    //extern U_sUl1dRfCustomInputData COMMON_NVRAM_EF_UL1_3G_RF_PARAMETER_DEFAULT[];
+#endif
+
+#if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+    extern U_sUl1IotCustomSupportStruct COMMON_NVRAM_EF_UL1_IOT_CUSTOMIZATION_DEFAULT[];
+#endif
+
+#if defined (__UL1_HS_PLUS_PLATFORM__) || defined (__UL1_HS_PLATFORM__)
+    extern nvram_ef_ul1_hspa_category_struct COMMON_NVRAM_EF_UL1_HSPA_CATEGORY_DEFAULT[];
+#endif
+
+#if defined (__MTK_UL1_FDD__)
+    extern nvram_ef_ul1_low_power_category_struct COMMON_NVRAM_EF_UL1_LOW_POWER_DEFAULT[];
+    static nvram_ef_ul1_max_tx_pwr_table_struct const COMMON_NVRAM_EF_UL1_MAXTXPWR_DEFAULT[NVRAM_EF_UL1_MAXTXPWR_TOTAL]={0};
+    static nvram_ef_ul1_hs_patch_struct const COMMON_NVRAM_EF_UL1_HS_PATCH_DEFAULT[NVRAM_EF_UL1_HS_PATCH_TOTAL]=
+    {
+       {
+          KAL_TRUE
+       }
+    };
+#endif
+
+
+#if defined (__UL1_PLATFORM__)
+	#if defined (__MTK_UL1_FDD__)
+		extern nvram_ef_ul1_rf_custpack_data_select_struct COMMON_NVRAM_EF_UL1_RF_CUSTPACK_DATA_SELECT_DEFAULT[];
+		extern nvram_ef_ul1_rf_custom_data_struct COMMON_NVRAM_EF_UL1_RF_CUSTOM_DATA_DEFAULT[];
+	#endif
+#endif
+
+/*
+ *   Function extern
+ */
+extern void nvram_get_uL1_default_value_to_write(nvram_lid_enum lid, kal_uint8 * buffer, kal_uint16 buffer_size);
+#if defined (__MTK_UL1_FDD__)
+extern nvram_ef_umts_tas_thr_struct COMMON_NVRAM_EF_UL1_TAS_THRESHOLD_DEFAULT[];
+extern nvram_ef_umts_ul1_ras_struct COMMON_NVRAM_EF_UL1_RAS_PARAMETER_DEFAULT[];
+extern nvram_ef_umts_ul1_utas_struct COMMON_NVRAM_EF_UL1_UTAS_PARAMETER_DEFAULT[];
+extern nvram_ef_umts_ul1_vcr_struct COMMON_NVRAM_EF_UL1_VCR_PARAMETER_DEFAULT[];
+#endif
+
+/*
+ *   LID table
+ */
+
+ltable_entry_struct logical_data_item_table_ul1[] =
+{
+#if (defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__))
+    {
+        NVRAM_EF_UL1_3G_RF_PARAMETER_LID,
+        NVRAM_EF_UL1_3G_RF_PARAMETER_TOTAL,
+        NVRAM_EF_UL1_3G_RF_PARAMETER_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL03",
+        VER(NVRAM_EF_UL1_3G_RF_PARAMETER_LID)
+    },
+#endif /* #if (defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)) */
+
+#if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+    {
+        NVRAM_EF_UL1_IOT_CUSTOMIZATION_LID,
+        NVRAM_EF_UL1_IOT_CUSTOMIZATION_TOTAL,
+        NVRAM_EF_UL1_IOT_CUSTOMIZATION_SIZE,
+        NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_IOT_CUSTOMIZATION_DEFAULT),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+        NVRAM_ATTR_AVERAGE,
+        "UL04",
+        VER(NVRAM_EF_UL1_IOT_CUSTOMIZATION_LID)
+    },
+#endif /* #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__) */
+
+#if defined (__UL1_HS_PLUS_PLATFORM__) || defined (__UL1_HS_PLATFORM__)
+   {
+       NVRAM_EF_UL1_HSPA_CATEGORY_LID,
+       NVRAM_EF_UL1_HSPA_CATEGORY_TOTAL,
+       NVRAM_EF_UL1_HSPA_CATEGORY_SIZE,
+       NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_HSPA_CATEGORY_DEFAULT),
+       NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+       NVRAM_ATTR_AVERAGE,
+       "UL05",
+       VER(NVRAM_EF_UL1_HSPA_CATEGORY_LID)
+    },
+#endif
+
+#if IS_3G_SAR_TX_POWER_BACKOFF_SUPPORT
+    {
+        NVRAM_EF_UL1_SARBACKOFF_ROUTE1_LID,
+        NVRAM_EF_UL1_SARBACKOFF_BAND_TOTAL,
+        NVRAM_EF_UL1_SARBACKOFF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL06",
+        VER(NVRAM_EF_UL1_SARBACKOFF_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_SARBACKOFF_ROUTE2_LID,
+        NVRAM_EF_UL1_SARBACKOFF_BAND_TOTAL,
+        NVRAM_EF_UL1_SARBACKOFF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL07",
+        VER(NVRAM_EF_UL1_SARBACKOFF_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_SARBACKOFF_ROUTE3_LID,
+        NVRAM_EF_UL1_SARBACKOFF_BAND_TOTAL,
+        NVRAM_EF_UL1_SARBACKOFF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL08",
+        VER(NVRAM_EF_UL1_SARBACKOFF_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_SARBACKOFF_ROUTE4_LID,
+        NVRAM_EF_UL1_SARBACKOFF_BAND_TOTAL,
+        NVRAM_EF_UL1_SARBACKOFF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL09",
+        VER(NVRAM_EF_UL1_SARBACKOFF_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_SARBACKOFF_ROUTE5_LID,
+        NVRAM_EF_UL1_SARBACKOFF_BAND_TOTAL,
+        NVRAM_EF_UL1_SARBACKOFF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL0A",
+        VER(NVRAM_EF_UL1_SARBACKOFF_ROUTE5_LID)
+    },
+#if IS_3G_SUPPORT_8_BANDINDICATOR 
+    {
+        NVRAM_EF_UL1_SARBACKOFF_ROUTE6_LID,
+        NVRAM_EF_UL1_SARBACKOFF_BAND_TOTAL,
+        NVRAM_EF_UL1_SARBACKOFF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL0B",
+        VER(NVRAM_EF_UL1_SARBACKOFF_ROUTE6_LID)
+    },
+    {
+        NVRAM_EF_UL1_SARBACKOFF_ROUTE7_LID,
+        NVRAM_EF_UL1_SARBACKOFF_BAND_TOTAL,
+        NVRAM_EF_UL1_SARBACKOFF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL0C",
+        VER(NVRAM_EF_UL1_SARBACKOFF_ROUTE7_LID)
+    }, 
+    {
+        NVRAM_EF_UL1_SARBACKOFF_ROUTE8_LID,
+        NVRAM_EF_UL1_SARBACKOFF_BAND_TOTAL,
+        NVRAM_EF_UL1_SARBACKOFF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL0D",
+        VER(NVRAM_EF_UL1_SARBACKOFF_ROUTE8_LID)
+    }, 
+#endif /*IS_3G_SUPPORT_8_BANDINDICATOR*/
+#endif
+
+
+#if IS_3G_TX_POWER_OFFSET_SUPPORT 
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE1_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULO6",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE2_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULO7",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE3_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULO8",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE4_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULO9",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE5_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOA",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE5_LID)
+    },
+#if IS_3G_SUPPORT_8_BANDINDICATOR 
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE6_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOB",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE6_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE7_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOC",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE7_LID)
+    }, 
+    {
+        NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE8_LID,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOD",
+        VER(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE8_LID)
+    }, 
+#endif /*IS_3G_SUPPORT_8_BANDINDICATOR*/
+#endif
+#if IS_3G_TX_NSFT_POWER_OFFSET_SUPPORT
+    {
+        NVRAM_EF_UL1_TXNSFTPOWEROFFSET_LID,
+        NVRAM_EF_UL1_TXNSFTPOWEROFFSET_TOTAL,
+        NVRAM_EF_UL1_TXNSFTPOWEROFFSET_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOU",
+        VER(NVRAM_EF_UL1_TXNSFTPOWEROFFSET_LID)
+    },
+#endif
+#if IS_3G_TAS_UL1_CUSTOM_SUPPORT
+    {
+        NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_LID,
+        NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_TOTAL,
+        NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP1",
+        VER(NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_LID)
+    },
+    {
+        NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_LID,
+        NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_TOTAL,
+        NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP2",
+        VER(NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_LID)
+    },
+#if !IS_3G_UTAS_SUPPORT
+    {
+        NVRAM_EF_UL1_TAS_FE_DATABASE_LID,
+        NVRAM_EF_UL1_TAS_FE_DATABASE_TOTAL,
+        NVRAM_EF_UL1_TAS_FE_DATABASE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP3",
+        VER(NVRAM_EF_UL1_TAS_FE_DATABASE_LID)
+    },
+#if (IS_3G_MIPI_NVRAM_FULL_SUPPORT)
+    /*TAS MIPI event/data cat A*/
+    {
+        NVRAM_EF_UL1_TAS_CAT_A_MIPI_EVENT_LID,
+        NVRAM_EF_UL1_CAT_A_TAS_MIPI_EVT_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_A_TAS_MIPI_EVT_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP4",
+        VER(NVRAM_EF_UL1_TAS_CAT_A_MIPI_EVENT_LID)
+    },
+    {
+        NVRAM_EF_UL1_TAS_CAT_A_MIPI_DATA_LID,
+        NVRAM_EF_UL1_CAT_A_TAS_MIPI_DATA_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_A_TAS_MIPI_DATA_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP5",
+        VER(NVRAM_EF_UL1_TAS_CAT_A_MIPI_DATA_LID)
+    },
+    /*TAS MIPI event/data cat B*/
+    {
+        NVRAM_EF_UL1_TAS_CAT_B_MIPI_EVENT_LID,
+        NVRAM_EF_UL1_CAT_B_TAS_MIPI_EVT_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_B_TAS_MIPI_EVT_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP6",
+        VER(NVRAM_EF_UL1_TAS_CAT_B_MIPI_EVENT_LID)
+    },
+    {
+        NVRAM_EF_UL1_TAS_CAT_B_MIPI_DATA_LID,
+        NVRAM_EF_UL1_CAT_B_TAS_MIPI_DATA_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_B_TAS_MIPI_DATA_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP7",
+        VER(NVRAM_EF_UL1_TAS_CAT_B_MIPI_DATA_LID)
+    },
+    /*TAS MIPI event/data cat C*/
+    {
+        NVRAM_EF_UL1_TAS_CAT_C_MIPI_EVENT_LID,
+        NVRAM_EF_UL1_CAT_C_TAS_MIPI_EVT_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_C_TAS_MIPI_EVT_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP8",
+        VER(NVRAM_EF_UL1_TAS_CAT_C_MIPI_EVENT_LID)
+    },
+    {
+        NVRAM_EF_UL1_TAS_CAT_C_MIPI_DATA_LID,
+        NVRAM_EF_UL1_CAT_C_TAS_MIPI_DATA_ROUTE_TOTAL,
+        NVRAM_EF_UL1_CAT_C_TAS_MIPI_DATA_ROUTE_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULP9",
+        VER(NVRAM_EF_UL1_TAS_CAT_C_MIPI_DATA_LID)
+    },
+#endif
+#endif
+#if IS_3G_TAS_INHERIT_4G_ANT
+    {
+        NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_LID,
+        NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_TOTAL,
+        NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPP",
+        VER(NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_LID)
+    },
+#endif
+#endif
+
+#if IS_3G_DAT_UL1_CUSTOM_SUPPORT
+    {
+        NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_LID,
+        NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_TOTAL,
+        NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULPA",
+        VER(NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_LID)
+    },
+#endif
+
+#if defined(__MTK_UL1_FDD__)
+   {
+       NVRAM_EF_UL1_LOW_POWER_LID,
+       NVRAM_EF_UL1_LOW_POWER_TOTAL,
+       NVRAM_EF_UL1_LOW_POWER_SIZE,
+       NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_LOW_POWER_DEFAULT),
+       NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+       NVRAM_ATTR_AVERAGE,
+       "ULR1",
+       VER(NVRAM_EF_UL1_LOW_POWER_LID)
+    },
+   {
+       NVRAM_EF_UL1_HS_PATCH_LID,
+       NVRAM_EF_UL1_HS_PATCH_TOTAL,
+       NVRAM_EF_UL1_HS_PATCH_SIZE,
+       NVRAM_NORMAL(COMMON_NVRAM_EF_UL1_HS_PATCH_DEFAULT),
+       NVRAM_CATEGORY_USER,
+       NVRAM_ATTR_AVERAGE,
+       "ULOV",
+       VER(NVRAM_EF_UL1_HS_PATCH_LID)
+    },
+/** UL1 TX PWR custom max tx pwr offset**/
+    {
+       NVRAM_EF_UL1_MAXTXPWR_LID,
+       NVRAM_EF_UL1_MAXTXPWR_TOTAL,
+       NVRAM_EF_UL1_MAXTXPWR_SIZE,
+       NVRAM_NORMAL(COMMON_NVRAM_EF_UL1_MAXTXPWR_DEFAULT),
+       NVRAM_CATEGORY_USER,
+       NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_MCF_OTA,
+       "ULOZ",
+       VER(NVRAM_EF_UL1_MAXTXPWR_LID)
+    },
+#endif
+#if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
+    {
+        NVRAM_EF_UL1_TEMP_DAC_LID,
+        NVRAM_EF_UL1_TEMP_DAC_TOTAL,
+        NVRAM_EF_UL1_TEMP_DAC_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL10",
+        VER(NVRAM_EF_UL1_TEMP_DAC_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND1_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL11",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND2_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL12",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND2_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND3_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL13",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND3_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND4_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL14",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND4_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND5_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL15",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND5_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND6_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL16",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND6_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND7_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL17",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND7_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND8_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL18",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND8_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND9_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL19",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND9_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND10_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1A",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND10_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND11_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB0",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND11_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS_BAND19_LID,
+        NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB1",
+        VER(NVRAM_EF_UL1_PATHLOSS_BAND19_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND1_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1B",
+        VER(NVRAM_EF_UL1_TXDAC_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND2_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1C",
+        VER(NVRAM_EF_UL1_TXDAC_BAND2_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND3_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1D",
+        VER(NVRAM_EF_UL1_TXDAC_BAND3_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND4_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1E",
+        VER(NVRAM_EF_UL1_TXDAC_BAND4_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND5_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1F",
+        VER(NVRAM_EF_UL1_TXDAC_BAND5_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND6_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1G",
+        VER(NVRAM_EF_UL1_TXDAC_BAND6_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND7_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1H",
+        VER(NVRAM_EF_UL1_TXDAC_BAND7_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND8_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1I",
+        VER(NVRAM_EF_UL1_TXDAC_BAND8_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXDAC_BAND9_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1J",
+        VER(NVRAM_EF_UL1_TXDAC_BAND9_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXDAC_BAND10_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1K",
+        VER(NVRAM_EF_UL1_TXDAC_BAND10_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXDAC_BAND11_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB2",
+        VER(NVRAM_EF_UL1_TXDAC_BAND11_LID)
+    },
+    {
+        NVRAM_EF_UL1_TXDAC_BAND19_LID,
+        NVRAM_EF_UL1_TXDAC_BAND_TOTAL,
+        NVRAM_EF_UL1_TXDAC_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB3",
+        VER(NVRAM_EF_UL1_TXDAC_BAND19_LID)
+    },
+#if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+    /* PA 8-level control (for MT6276, MT6573) */
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND1_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1M",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND2_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1N",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND2_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND3_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1O",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND3_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND4_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1P",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND4_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND5_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1Q",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND5_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND6_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1R",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND6_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND7_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1S",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND7_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND8_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1T",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND8_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND9_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1U",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND9_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND10_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1V",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND10_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND11_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB4",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND11_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND19_LID,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPAOCTLEV_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB5",
+        VER(NVRAM_EF_UL1_TXPAOCTLEV_BAND19_LID)
+    },
+#endif // #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+#endif /* __UMTS_RAT__ && __MTK_UL1_FDD__*/
+
+#if defined(__UMTS_R8__)&&defined(__MTK_UL1_FDD__) //add by Jay
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND1_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL10",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND2_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL11",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND2_LID)
+    },
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND3_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL12",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND3_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND4_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL13",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND4_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND5_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL14",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND5_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND6_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL15",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND6_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND7_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL16",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND7_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND8_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL17",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND8_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND9_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL18",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND9_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND10_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "HL19",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND10_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND11_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB6",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND11_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PATHLOSS2_BAND19_LID,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL,
+        NVRAM_EF_UL1_PATHLOSS2_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB7",
+        VER(NVRAM_EF_UL1_PATHLOSS2_BAND19_LID)
+    },
+//add by wilson
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND1_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1A",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND1_LID)
+    }, 
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND2_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1B",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND2_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND3_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1C",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND3_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND4_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1D",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND4_LID)
+    }, 
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND5_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1E",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND5_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND6_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1F",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND6_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND7_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1G",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND7_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND8_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1H",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND8_LID)
+    }, 
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND9_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1I",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND9_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND10_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "HL1J",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND10_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND11_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB8",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND11_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND19_LID,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULB9",//note: only 4 char
+        VER(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND19_LID)
+    },
+    
+#endif
+
+#if defined (__MTK_UL1_FDD__)
+    /** Tx PRACH TM Compensation */
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND1_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1W",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND2_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1X",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND2_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND3_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1Y",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND3_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND4_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL1Z",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND4_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND5_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL20",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND5_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND6_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL21",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND6_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND7_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL22",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND7_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND8_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL23",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND8_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND9_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL24",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND9_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND10_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "UL25",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND10_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND11_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBA",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND11_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND19_LID,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL,
+        NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBB",
+        VER(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND19_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_AFCDAC_LID,
+        NVRAM_EF_UL1_AFCDAC_TOTAL,
+        NVRAM_EF_UL1_AFCDAC_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBC",//note: only 4 char
+        VER(NVRAM_EF_UL1_AFCDAC_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_AFCCAP_LID,
+        NVRAM_EF_UL1_AFCCAP_TOTAL,
+        NVRAM_EF_UL1_AFCCAP_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBD",//note: only 4 char
+        VER(NVRAM_EF_UL1_AFCCAP_LID)
+    },
+
+#if (0)
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif /* IS_3G_TX_POWER_OFFSET_SUPPORT */
+
+    //Power on CAL
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND1_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBQ",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND1_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND2_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBR",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND2_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND3_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBS",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND3_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND4_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBT",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND4_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND5_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBU",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND5_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND6_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBV",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND6_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND7_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBW",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND7_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND8_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBX",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND8_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND9_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBY",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND9_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND10_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULBZ",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND10_LID)
+    },
+    
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND11_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULC0",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND11_LID)
+    },
+
+    {
+        NVRAM_EF_UL1_PWRONCAL_BAND19_LID,
+        NVRAM_EF_UL1_PWRONCAL_TOTAL,
+        NVRAM_EF_UL1_PWRONCAL_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULC1",
+        VER(NVRAM_EF_UL1_PWRONCAL_BAND19_LID)
+    },
+#endif // (__MTK_UL1_FDD__)
+#if (IS_3G_RX_POWER_OFFSET_SUPPORT)
+    {
+        NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE1_LID,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOE",
+        VER(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE2_LID,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOF",
+        VER(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE3_LID,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOG",
+        VER(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE4_LID,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOH",
+        VER(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE5_LID,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+        NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULOI",
+        VER(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE5_LID)
+    },
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+    {
+       NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE6_LID,
+       NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+       NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+       NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+       NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+       NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+       "ULOJ",
+       VER(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE6_LID)
+    }, 
+    {
+       NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE7_LID,
+       NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+       NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+       NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+       NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+       NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+       "ULOK",
+       VER(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE7_LID)
+    },
+    {
+       NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE8_LID,
+       NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL,
+       NVRAM_EF_UL1_RXPOWEROFFSET_BAND_SIZE,
+       NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+       NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+       NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+       "ULOL",
+       VER(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE8_LID)
+    },
+#endif/*IS_3G_SUPPORT_8_BANDINDICATOR*/	
+#endif   
+#if defined(__MTK_UL1_FDD__) && !defined(__L1_STANDALONE__)
+    {
+        NVRAM_EF_UL1_TAS_THRESHOLD_LID,
+        NVRAM_EF_UL1_TAS_THRESHOLD_TOTAL,
+        NVRAM_EF_UL1_TAS_THRESHOLD_SIZE,
+        NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_TAS_THRESHOLD_DEFAULT),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULC7",
+        VER(NVRAM_EF_UL1_TAS_THRESHOLD_LID)
+    },
+    {
+        NVRAM_EF_UL1_RAS_PARAMETER_LID,
+        NVRAM_EF_UL1_RAS_PARAMETER_TOTAL,
+        NVRAM_EF_UL1_RAS_PARAMETER_SIZE,
+        NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_RAS_PARAMETER_DEFAULT),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULC8",
+        VER(NVRAM_EF_UL1_RAS_PARAMETER_LID)
+    },
+    {
+        NVRAM_EF_UL1_VCR_PARAMETER_LID,
+        NVRAM_EF_UL1_VCR_PARAMETER_TOTAL,
+        NVRAM_EF_UL1_VCR_PARAMETER_SIZE,
+        NVRAM_NORMAL(COMMON_NVRAM_EF_UL1_VCR_PARAMETER_DEFAULT),
+        NVRAM_CATEGORY_USER,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "ULC9",
+        VER(NVRAM_EF_UL1_VCR_PARAMETER_LID)
+    },
+#endif   
+#if (IS_3G_RFEQ_COEF_SUBBAND_SUPPORT)
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_ROUTE1_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZI",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_ROUTE2_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZJ",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_ROUTE3_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZK",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_ROUTE4_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZL",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_ROUTE5_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZM",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_ROUTE5_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_ROUTE6_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZN",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_ROUTE6_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_ROUTE7_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZO",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_ROUTE7_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_COEF_ROUTE8_LID,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZP",
+        VER(NVRAM_EF_UL1_RFEQ_COEF_ROUTE8_LID)
+    },
+#endif
+#if (IS_3G_RFEQ_REAL_COEF_TEST)
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE1_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZQ",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE1_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE2_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZR",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE2_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE3_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZS",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE3_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE4_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZT",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE4_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE5_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZU",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE5_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE6_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZV",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE6_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE7_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZW",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE7_LID)
+    },
+    {
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE8_LID,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL,
+        NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_SIZE,
+        NVRAM_DEFAULT_FUNC(nvram_get_uL1_default_value_to_write),
+        NVRAM_CATEGORY_USER | NVRAM_CATEGORY_FUNC_DEFAULT,
+        NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_OTA_RESET | NVRAM_ATTR_GEN_DEFAULT,
+        "ULZX",
+        VER(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE8_LID)
+    },
+#endif
+#if defined(__MTK_UL1_FDD__)
+    {
+       NVRAM_EF_UL1_UTAS_PARAMETER_LID,
+       NVRAM_EF_UL1_UTAS_PARAMETER_TOTAL,
+       NVRAM_EF_UL1_UTAS_PARAMETER_SIZE,
+       NVRAM_CUSTPACK(COMMON_NVRAM_EF_UL1_UTAS_PARAMETER_DEFAULT),
+       NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK,
+       NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+       "ULZY",
+       VER(NVRAM_EF_UL1_UTAS_PARAMETER_LID)
+    },
+#endif
+};
+
+#endif /* #if defined (__MTK_UL1_FDD__) */
+
+#endif /* NVRAM_NOT_PRESENT */
diff --git a/mcu/custom/protocol/common/ps/ul1_nvram_editor.h b/mcu/custom/protocol/common/ps/ul1_nvram_editor.h
new file mode 100644
index 0000000..53f7c40
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/ul1_nvram_editor.h
@@ -0,0 +1,284 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * ul1_nvram_editor.h
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *    This file contains `vendor' defined logical data items stored in NVRAM.
+ *    These logical data items are used in object code of Protocol Stack software.
+ *
+ *    As for customizable logical data items, they are defined in nvram_user_config.c
+ *
+ * Author:
+ * -------
+ * 
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+
+#if (defined __MD93__)  
+#include "ul1_nvram_editor_md93.h"
+#elif (defined __MD95__)
+#include "ul1_nvram_editor_md95.h"
+#elif (defined __MD97__)|| (defined __MD97P__)
+#include "ul1_nvram_editor_md97.h"
+#else
+#error "Should define at least a kind of BB being used."
+#endif
+ 
diff --git a/mcu/custom/protocol/common/ps/ul1_nvram_editor_md93.h b/mcu/custom/protocol/common/ps/ul1_nvram_editor_md93.h
new file mode 100644
index 0000000..bf8f257
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/ul1_nvram_editor_md93.h
@@ -0,0 +1,3529 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * ul1_nvram_editor.h
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *    This file contains `vendor' defined logical data items stored in NVRAM.
+ *    These logical data items are used in object code of Protocol Stack software.
+ *
+ *    As for customizable logical data items, they are defined in nvram_user_config.c
+ *
+ * Author:
+ * -------
+ * 
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef __UL1_NVRAM_EDITOR_H__
+#define __UL1_NVRAM_EDITOR_H__
+#ifndef NVRAM_NOT_PRESENT
+
+/* In case of that not to build this file in 2G projects or 3G TDD projects */
+#if defined (__MTK_UL1_FDD__)
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */ 
+
+/*
+ *   Include Headers
+ */
+ 
+/*
+ *   NVRAM Basic Headers
+ */
+#include "nvram_data_items.h"
+
+/*
+ *   User Headers
+ */
+#include "ul1_nvram_def.h"
+
+
+#ifdef GEN_FOR_PC
+BEGIN_NVRAM_DATA 
+ 
+#if (defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)) 
+ 
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_3G_RF_PARAMETER_LID
+* DESCRIPTION
+*   This LID is used to store the BPI and LNA port data settings in ul1d_custom_rf.h, ul1d_custom_rf.c.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_3G_RF_PARAMETER_LID)
+     U_sUl1dRfCustomInputData * NVRAM_EF_UL1_3G_RF_PARAMETER_TOTAL
+     {
+        startPattern:"#U_0x1234ABCD_L_0x1234ABCD"
+        {
+        };
+        structVersion:""
+        {
+        };
+        rfType:""
+        {
+        };
+        isDataUpdate:"#U_1_L_1"
+        {
+        };
+        umtsRfPaControlTimingOffset:""
+        {
+        };
+        umtsRfPaControlTimingOffset.maxOffset:"#U_65535"
+        {
+        };
+        umtsRfPaControlTimingOffset.vmOffset:"#U_65535"
+        {
+        };
+        umtsRfPaControlTimingOffset.vbiasOffset:"#U_65535"
+        {
+        };
+        umtsRfPaControlTimingOffset.dc2dcOffset:"#U_65535"
+        {
+        };
+        umtsRfPaControlTimingOffset.vgaOffset:"#U_65535"
+        {
+        };
+        umtsBsiBpiTiming:""
+        {
+        };
+        umtsBsiBpiTiming.xTC_PR1:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PR2:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PR2B:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PR3:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PR3A:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PT1:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PT2:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PT2B:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PT3:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PT3A:"#U_32767"
+        {
+        };
+        umtsPdata:""
+        {
+        };
+        umtsBandIndicator:""
+        {
+        };
+        umtsRxLnaPortSel:""
+        {
+        };
+        umtsTxPathSel:""
+        {
+        };
+        xPMU_PA_CONTROL:""
+        {
+        };
+        endPattern:"#U_0xABCD1234_L_0xABCD1234"
+        {
+        };
+     };
+
+#endif /* #if (defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)) */
+
+#if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__) 
+LID_BIT VER_LID(NVRAM_EF_UL1_IOT_CUSTOMIZATION_LID)
+     U_sUl1IotCustomSupportStruct *NVRAM_EF_UL1_IOT_CUSTOMIZATION_TOTAL
+     {
+         ADAPT_Customized:""
+         {
+         };
+         reserved1:""
+         {
+         };
+         reserved2:""
+         {
+         };
+         reserved3:""
+         {
+         };
+     };
+#endif /* #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__) */
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_HSPA_CATEGORY_LID
+*DESCRIPTION
+*      This LID is used to store maximum support HSDPA & HSUPA category in WCDMA.
+*      
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+#if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__) 
+LID_BIT VER_LID(NVRAM_EF_UL1_HSPA_CATEGORY_LID)
+   nvram_ef_ul1_hspa_category_struct * NVRAM_EF_UL1_HSPA_CATEGORY_TOTAL
+   {
+      dpa_cat:"WCDMA Max Supptor HSDPA category"
+      {
+      };
+      upa_cat:"WCDMA Max Supptor HSUPA category"
+      {
+      };
+   };
+#endif /* #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__) */
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_LOW_POWER_LID
+*DESCRIPTION
+*      For 3G low power feature on/off
+*      
+*INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+#if defined (__MTK_UL1_FDD__)
+LID_BIT VER_LID(NVRAM_EF_UL1_LOW_POWER_LID)
+   nvram_ef_ul1_low_power_category_struct * NVRAM_EF_UL1_LOW_POWER_TOTAL
+   {
+      arx_enable:"arx feature on/off"
+      {
+      };
+      lorx_enable:"lorx feature on/off"
+      {
+      };
+      lorx_debug_enable:"lorx debug feature on/off"
+      {
+      };
+   };
+#endif
+
+/* TX PRACH TM Comp.  (for MT6572,MT6582) */
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND1_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND1_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND2_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND2_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND3_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND3_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND4_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND4_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND5_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND5_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND6_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND6_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND7_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND7_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND8_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND8_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND9_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND9_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND10_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND10_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND11_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/      
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND11_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND19_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/        
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND19_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_AFCDAC_LID
+*DESCRIPTION
+*      Adjusting the frequency of DCXO finely.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated during calibration.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_AFCDAC_LID)
+     ul1cal_afcDacData_T *NVRAM_EF_UL1_AFCDAC_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_AFCCAP_LID
+*DESCRIPTION
+*      Adjusting the frequency of DCXO coarsly.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated during calibration and task init.
+****************************************************************************************************/
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_AFCCAP_LID)
+     ul1cal_afcCapData_T *NVRAM_EF_UL1_AFCCAP_TOTAL
+     {
+     
+     };
+
+#if (IS_3G_MIPI_SUPPORT)
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TPC_HIGHBAND1_LID
+*DESCRIPTION
+*      WCDMA MIPI TPC event and data  are stored in this LID.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:This LID will update once during task init.
+****************************************************************************************************/
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TPC_HIGHBAND1_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TPC_HIGHBAND2_LID
+*DESCRIPTION
+*      WCDMA MIPI TPC event and data  are stored in this LID.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:This LID will update once during task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TPC_HIGHBAND2_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TPC_HIGHBAND3_LID
+*DESCRIPTION
+*      WCDMA MIPI TPC event and data  are stored in this LID.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:This LID will update once during task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TPC_HIGHBAND3_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TPC_LOWBAND1_LID
+*DESCRIPTION
+*      WCDMA MIPI TPC event and data  are stored in this LID.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:This LID will update once during task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TPC_LOWBAND1_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TPC_LOWBAND2_LID
+*DESCRIPTION
+*      WCDMA MIPI TPC event and data  are stored in this LID.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:This LID will update once during task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TPC_LOWBAND2_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL
+     {
+     
+     };
+#endif
+
+#if (IS_3G_MIPI_NVRAM_FULL_SUPPORT)
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_EVENT_HIGHBAND1_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_EVENT_HIGHBAND1_LID)
+     ul1mipi_rxEvent_T *NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_EVENT_HIGHBAND2_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_EVENT_HIGHBAND2_LID)
+     ul1mipi_rxEvent_T *NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_EVENT_HIGHBAND3_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_EVENT_HIGHBAND3_LID)
+     ul1mipi_rxEvent_T *NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_EVENT_LOWBAND1_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_EVENT_LOWBAND1_LID)
+     ul1mipi_rxEvent_T *NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_EVENT_LOWBAND2_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_EVENT_LOWBAND2_LID)
+     ul1mipi_rxEvent_T *NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_DATA_HIGHBAND1_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_DATA_HIGHBAND1_LID)
+     ul1mipi_rxData_T *NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_DATA_HIGHBAND2_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_DATA_HIGHBAND2_LID)
+     ul1mipi_rxData_T *NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_DATA_HIGHBAND3_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_DATA_HIGHBAND3_LID)
+     ul1mipi_rxData_T *NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_DATA_LOWBAND1_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_DATA_LOWBAND1_LID)
+     ul1mipi_rxData_T *NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_DATA_LOWBAND2_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_DATA_LOWBAND2_LID)
+     ul1mipi_rxData_T *NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_EVENT_HIGHBAND1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_EVENT_HIGHBAND1_LID)
+     ul1mipi_txEvent_T *NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_EVENT_HIGHBAND2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_EVENT_HIGHBAND2_LID)
+     ul1mipi_txEvent_T *NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_EVENT_HIGHBAND3_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_EVENT_HIGHBAND3_LID)
+     ul1mipi_txEvent_T *NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_EVENT_LOWBAND1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_EVENT_LOWBAND1_LID)
+     ul1mipi_txEvent_T *NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_EVENT_LOWBAND2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_EVENT_LOWBAND2_LID)
+     ul1mipi_txEvent_T *NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_DATA_HIGHBAND1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_DATA_HIGHBAND1_LID)
+     ul1mipi_txData_T *NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_DATA_HIGHBAND2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_DATA_HIGHBAND2_LID)
+     ul1mipi_txData_T *NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_DATA_HIGHBAND3_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_DATA_HIGHBAND3_LID)
+     ul1mipi_txData_T *NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_DATA_LOWBAND1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_DATA_LOWBAND1_LID)
+     ul1mipi_txData_T *NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_DATA_LOWBAND2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_DATA_LOWBAND2_LID)
+     ul1mipi_txData_T *NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_HIGHBAND1_LID)
+     ul1mipi_asmIsoData_T *NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL
+     {
+     
+     };
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_HIGHBAND2_LID)
+     ul1mipi_asmIsoData_T *NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL
+     {
+     
+     };
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_HIGHBAND3_LID)
+     ul1mipi_asmIsoData_T *NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL
+     {
+     
+     };
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_LOWBAND1_LID)
+     ul1mipi_asmIsoData_T *NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL
+     {
+     
+     };
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_LOWBAND2_LID)
+     ul1mipi_asmIsoData_T *NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL
+     {
+     
+     };
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_INIT_CW_LID)
+     ul1mipi_initCwData_T *NVRAM_EF_UL1_MIPI_INIT_CW_TOTAL
+     {
+     
+     };
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_SLEEP_CW_LID)
+     ul1mipi_sleepCwData_T *NVRAM_EF_UL1_MIPI_SLEEP_CW_TOTAL
+     {
+     
+     };
+#endif/*IS_3G_MIPI_NVRAM_FULL_SUPPORT*/
+
+#if (IS_3G_VPA_SEL_BY_BAND_SUPPORT)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_VPA_SRC_SEL_HIGHBAND1_LID
+* DESCRIPTION
+*   This LID is used to store the relevant data on controling the components to support envelope tracking.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_VPA_SRC_SEL_HIGHBAND1_LID)
+     ul1vpa_sel_T *NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_VPA_SRC_SEL_HIGHBAND2_LID
+* DESCRIPTION
+*   This LID is used to store the relevant data on controling the components to support envelope tracking.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_VPA_SRC_SEL_HIGHBAND2_LID)
+     ul1vpa_sel_T *NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_VPA_SRC_SEL_HIGHBAND3_LID
+* DESCRIPTION
+*   This LID is used to store the relevant data on controling the components to support envelope tracking.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_VPA_SRC_SEL_HIGHBAND3_LID)
+     ul1vpa_sel_T *NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_VPA_SRC_SEL_LOWBAND1_LID
+* DESCRIPTION
+*   This LID is used to store the relevant data on controling the components to support envelope tracking.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_VPA_SRC_SEL_LOWBAND1_LID)
+     ul1vpa_sel_T *NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_VPA_SRC_SEL_LOWBAND2_LID
+* DESCRIPTION
+*   This LID is used to store the relevant data on controling the components to support envelope tracking.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_VPA_SRC_SEL_LOWBAND2_LID)
+     ul1vpa_sel_T *NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL
+     {
+     
+     };
+#endif/*IS_3G_VPA_SEL_BY_BAND_SUPPORT*/
+
+#if IS_3G_TAS_UL1_CUSTOM_SUPPORT
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_LID
+* DESCRIPTION
+*   This LID is used to store the relevant data on switching the antenna to transmit the signal due to the different scenario of the cell phone.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_LID)
+     UMTS_CUSTOM_TAS_FEATURE_BY_RAT_T *NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_LID
+* DESCRIPTION
+*   TAS detailed settings for each band, including RealSim/TestSim enable flag, antenna state setting, and the mapping to databaseA(B)(C) route index in each antenna state.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_LID)
+     UMTS_CUSTOM_TAS_FE_ROUTE_DATABASE_T *NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_FE_DATABASE_LID
+* DESCRIPTION
+*   Database reference for antenna tuner control, with BPI setting or MIPI setting via LUT table index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_FE_DATABASE_LID)
+     UMTS_CUSTOM_TAS_FE_DATABASE_T *NVRAM_EF_UL1_TAS_FE_DATABASE_TOTAL
+     {
+
+     };
+#if (IS_3G_MIPI_NVRAM_FULL_SUPPORT)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_A_MIPI_EVENT_LID
+* DESCRIPTION
+*   MIPI control event used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_A_MIPI_EVENT_LID)
+     ul1mipi_tasEvent_CatA_T *NVRAM_EF_UL1_CAT_A_TAS_MIPI_EVT_ROUTE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_A_MIPI_DATA_LID
+* DESCRIPTION
+*   MIPI control data used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_A_MIPI_DATA_LID)
+     ul1mipi_tasData_CatA_T *NVRAM_EF_UL1_CAT_A_TAS_MIPI_DATA_ROUTE_TOTAL
+     {
+
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_B_MIPI_EVENT_LID
+* DESCRIPTION
+*   MIPI control event used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_B_MIPI_EVENT_LID)
+     ul1mipi_tasEvent_CatB_T *NVRAM_EF_UL1_CAT_B_TAS_MIPI_EVT_ROUTE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_B_MIPI_DATA_LID
+* DESCRIPTION
+*   MIPI control data used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_B_MIPI_DATA_LID)
+     ul1mipi_tasData_CatB_T *NVRAM_EF_UL1_CAT_B_TAS_MIPI_DATA_ROUTE_TOTAL
+     {
+
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_C_MIPI_EVENT_LID
+* DESCRIPTION
+*   MIPI control event used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_C_MIPI_EVENT_LID)
+     ul1mipi_tasEvent_CatC_T *NVRAM_EF_UL1_CAT_C_TAS_MIPI_EVT_ROUTE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_C_MIPI_DATA_LID
+* DESCRIPTION
+*   MIPI control data used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_C_MIPI_DATA_LID)
+     ul1mipi_tasData_CatC_T *NVRAM_EF_UL1_CAT_C_TAS_MIPI_DATA_ROUTE_TOTAL
+     {
+
+     };
+#endif
+#if IS_3G_TAS_INHERIT_4G_ANT
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_LID
+* DESCRIPTION
+*   This LID is used to set what LTE band's TAS states can be inherited by WCDMA band when SRVCC cenario.
+*   
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_LID)
+     UMTS_CUSTOM_TAS_INHERIT_LTE_BAND_BITMAP_TABLE_T *NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_TOTAL
+     {
+
+     };
+#endif
+#endif
+#if IS_3G_DAT_UL1_CUSTOM_SUPPORT
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_LID
+* DESCRIPTION
+*   This LID is switch to turn on/off the DAT feature.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_LID)
+     UMTS_CUSTOM_DAT_FEATURE_BY_RAT_T *NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DAT_FE_ROUTE_DATABASE_LID
+* DESCRIPTION
+*   This LID is mainly for route configure index setting for DAT feature.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DAT_FE_ROUTE_DATABASE_LID)
+     UMTS_CUSTOM_DAT_FE_ROUTE_DATABASE_T *NVRAM_EF_UL1_DAT_FE_ROUTE_DATABASE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DAT_FE_DATABASE_LID
+* DESCRIPTION
+*   This LID is mainly for BPI Settings for DAT feature.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DAT_FE_DATABASE_LID)
+     UMTS_CUSTOM_DAT_FE_DATABASE_T *NVRAM_EF_UL1_DAT_FE_DATABASE_TOTAL
+     {
+
+     };
+#if (IS_3G_MIPI_NVRAM_FULL_SUPPORT)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DAT_CAT_A_MIPI_EVENT_LID
+* DESCRIPTION
+*   This LID is mainly for MIPI codeword event of DAT feature.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DAT_CAT_A_MIPI_EVENT_LID)
+     ul1mipi_datEvent_CatA_T *NVRAM_EF_UL1_CAT_A_DAT_MIPI_EVT_ROUTE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DAT_CAT_A_MIPI_DATA_LID
+* DESCRIPTION
+*   This LID is mainly for MIPI codeword data of DAT feature.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DAT_CAT_A_MIPI_DATA_LID)
+     ul1mipi_datData_CatA_T *NVRAM_EF_UL1_CAT_A_DAT_MIPI_DATA_ROUTE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DAT_CAT_B_MIPI_EVENT_LID
+* DESCRIPTION
+*   This LID is mainly for MIPI codeword event of DAT feature.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DAT_CAT_B_MIPI_EVENT_LID)
+     ul1mipi_datEvent_CatB_T *NVRAM_EF_UL1_CAT_B_DAT_MIPI_EVT_ROUTE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DAT_CAT_B_MIPI_DATA_LID
+* DESCRIPTION
+*   This LID is mainly for MIPI codeword data of DAT feature.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DAT_CAT_B_MIPI_DATA_LID)
+     ul1mipi_datData_CatB_T *NVRAM_EF_UL1_CAT_B_DAT_MIPI_DATA_ROUTE_TOTAL
+     {
+
+     };
+
+#endif
+#endif
+#if (IS_3G_TX_POWER_OFFSET_SUPPORT || IS_3G_SAR_TX_POWER_BACKOFF_SUPPORT)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_HIGHBAND1_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_HIGHBAND1_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_HIGHBAND2_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_HIGHBAND2_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_HIGHBAND3_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_HIGHBAND3_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_LOWBAND1_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_LOWBAND1_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_LOWBAND2_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_LOWBAND2_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+#endif   /* IS_3G_TX_POWER_OFFSET_SUPPORT */
+#if (IS_3G_RX_POWER_OFFSET_SUPPORT )
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_HIGHBAND1_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_HIGHBAND1_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_HIGHBAND2_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_HIGHBAND2_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_HIGHBAND3_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_HIGHBAND3_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_LOWBAND1_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_LOWBAND1_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_LOWBAND2_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_LOWBAND2_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+#endif   /* IS_3G_RX_POWER_OFFSET_SUPPORT */
+
+#if (IS_3G_RFEQ_COEF_SUBBAND_SUPPORT)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_HIGHBAND1_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_HIGHBAND1_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_HIGHBAND2_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_HIGHBAND2_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_HIGHBAND3_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_HIGHBAND3_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_LOWBAND1_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_LOWBAND1_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_LOWBAND2_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_LOWBAND2_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+     
+     };
+#endif   /* IS_3G_RFEQ_COEF_SUBBAND_SUPPORT */
+
+#if (IS_3G_RFEQ_REAL_COEF_TEST)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_HIGHBAND1_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_HIGHBAND1_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_HIGHBAND2_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_HIGHBAND2_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_HIGHBAND3_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_HIGHBAND3_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_LOWBAND1_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_LOWBAND1_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_LOWBAND2_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_LOWBAND2_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+     
+     };
+#endif   /* IS_3G_RFEQ_REAL_COEF_TEST */
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND1_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND1_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND2_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND2_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND3_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND3_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND4_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND4_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND5_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND5_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND6_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND6_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND7_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND7_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND8_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND8_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND9_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND9_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND10_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND10_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND11_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND11_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND19_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND19_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+
+#if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TEMP_DAC_LID
+*DESCRIPTION
+*      The value of temperature DAC value ranged from 0 to 1023.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TEMP_DAC_LID)
+     ul1cal_tempdacData_T *NVRAM_EF_UL1_TEMP_DAC_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND1_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND1_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND2_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND2_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND3_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND3_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND4_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND4_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND5_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND5_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND6_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND6_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND7_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND7_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND8_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND8_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND9_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND9_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND10_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND10_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND11_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND11_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND19_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND19_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND1_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND1_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND2_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND2_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND3_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND3_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND4_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND4_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND5_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND5_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND6_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND6_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND7_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND7_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND8_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND8_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND9_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND9_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND10_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND10_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND11_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND11_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND19_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND19_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+#endif /* __UMTS_RAT__ && __MTK_UL1_FDD__ */
+
+#if defined (__MTK_UL1_FDD__)
+   #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+/* PA 8-level control (for MT6276, MT6573) */
+
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND1_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND1_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND2_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND2_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND3_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND3_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND4_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND4_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND5_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND5_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND6_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND6_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND7_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND7_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND8_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND8_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND9_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND9_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND10_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND10_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND11_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND11_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND19_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND19_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+   #endif // #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+
+   #if defined(__UMTS_R8__)
+   
+ /***************************************************************************************************
+   * LID_NAME
+   *	  NVRAM_EF_UL1_PATHLOSS2_BAND1_LID
+   *DESCRIPTION
+   *	  WCDMA calibration data for RX diversity path pahtloss.
+   *	  Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+   *INFORMATION
+   *	 Can OTA Reset: No
+   *	 Update Scenario:The data in this LID will be updated task init and calibration.
+   ****************************************************************************************************/
+   LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND1_LID)
+        ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+        {
+
+      };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND2_LID
+*DESCRIPTION
+*	WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+   LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND2_LID)
+        ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+        {
+
+      };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND3_LID
+*DESCRIPTION
+*       WCDMA calibration data for RX diversity path pahtloss.
+*       Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+
+   LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND3_LID)
+        ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+        {
+
+      };
+ 
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND4_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND4_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND5_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND5_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND6_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND6_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND7_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND7_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND8_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND8_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND9_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND9_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND10_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND10_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND11_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND11_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND19_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND19_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+
+// add by Wilson
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND1_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND1_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND2_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND2_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND3_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND3_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND4_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND4_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND5_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND5_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND6_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND6_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND7_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND7_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND8_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND8_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND9_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND9_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND10_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now. 
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND10_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND11_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND11_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND19_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND19_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+#endif
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TAS_THRESHOLD_LID
+*DESCRIPTION
+*      For 3G TAS Parameters and threshold settings
+*      
+*INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+LID_BIT VER_LID(NVRAM_EF_UL1_TAS_THRESHOLD_LID)
+     nvram_ef_umts_tas_thr_struct * NVRAM_EF_UL1_TAS_THRESHOLD_TOTAL
+     {
+        rscp_diff_thd_rp:"RSCP difference threshold div to main rscp diff for SAR type 1"
+        {
+        };
+        rscp_diff_thd_po:"RSCP difference threshold"
+        {
+        };
+        rscp_diff_thd_txp:"Diversity to main RSCP difference threshold for txp"
+        {
+        };
+        rscp_diff_thd_cb:"Diversity to main RSCP difference threshold for rscp"
+        {
+        };
+        tas_type2_blind_switch_init_thd1:"Blind switch initial threshold for TAS Type2 in sec"
+        {
+        };
+        tas_type2_blind_switch_step_size:"Blind swithc step size for TAS Type2 in sec"
+        {
+        };
+        tas_type2_blind_switch_uppBound:"Blind switch upper bound for TAS Type2 in sec"
+        {
+        };
+        tas_type2_rscp_switch_back_thd:"RSCP threshold for switch back condition"
+        {
+        };
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_RAS_PARAMETER_LID
+*DESCRIPTION
+*      For 3G RAS Parameters and threshold settings
+*      
+*INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+LID_BIT VER_LID(NVRAM_EF_UL1_RAS_PARAMETER_LID)
+     nvram_ef_umts_ul1_ras_struct * NVRAM_EF_UL1_RAS_PARAMETER_TOTAL
+     {
+        umtsRASFeatureOn:""
+        {
+        };
+        RssiS2WThrdBm:""
+        {
+        };
+        RssiW2SThrdBm:""
+        {
+        };
+        EcnoS2WThrdB:""
+        {
+        };
+        EcnoW2SThrdB:""
+        {
+        };
+        RscpS2WThrdB:""
+        {
+        };
+        RscpW2SThrdB:""
+        {
+        };
+        BothAntforTestSimPS:""
+        {
+        };
+        HsRateHystPercentage:""
+        {
+        };
+        CqiHystIdx:""
+        {
+        };
+        HsRateThrPercentage:""
+        {
+        };
+        CqiDiffThrIdx:""
+        {
+        };
+     };
+#endif // #if defined (__MTK_UL1_FDD__)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DPD_CTRL_DATA_HIGHBAND1_LID
+* DESCRIPTION
+*   WCDMA DPD control dat
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CTRL_DATA_HIGHBAND1_LID)
+        U_sDPD_COMMON_CTRL *NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL{
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DPD_CTRL_DATA_HIGHBAND2_LID
+* DESCRIPTION
+*   WCDMA DPD control data
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/  
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CTRL_DATA_HIGHBAND2_LID)
+     U_sDPD_COMMON_CTRL *NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DPD_CTRL_DATA_HIGHBAND3_LID
+* DESCRIPTION
+*   WCDMA DPD control data
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CTRL_DATA_HIGHBAND3_LID)
+     U_sDPD_COMMON_CTRL *NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DPD_CTRL_DATA_LOWBAND1_LID
+* DESCRIPTION
+*   WCDMA DPD control data
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CTRL_DATA_LOWBAND1_LID)
+     U_sDPD_COMMON_CTRL *NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DPD_CTRL_DATA_LOWBAND2_LID
+* DESCRIPTION
+*   WCDMA DPD control data
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CTRL_DATA_LOWBAND2_LID)
+     U_sDPD_COMMON_CTRL *NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_DPD_CAL_DATA_HIGHBAND1_LID
+*DESCRIPTION
+*      WCDMA DPD calibration data.
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/    
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CAL_DATA_HIGHBAND1_LID)
+     U_sDPD_GROUP_CAL *NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_DPD_CAL_DATA_HIGHBAND2_LID
+*DESCRIPTION
+*      WCDMA DPD calibration data.
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/    
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CAL_DATA_HIGHBAND2_LID)
+     U_sDPD_GROUP_CAL *NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_DPD_CAL_DATA_HIGHBAND3_LID
+*DESCRIPTION
+*      WCDMA DPD calibration data.
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/    
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CAL_DATA_HIGHBAND3_LID)
+     U_sDPD_GROUP_CAL *NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_DPD_CAL_DATA_LOWBAND1_LID
+*DESCRIPTION
+*      WCDMA DPD calibration data.
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/    
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CAL_DATA_LOWBAND1_LID)
+     U_sDPD_GROUP_CAL *NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL
+     {
+
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_DPD_CAL_DATA_LOWBAND2_LID
+*DESCRIPTION
+*      WCDMA DPD calibration data.
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/    
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CAL_DATA_LOWBAND2_LID)
+     U_sDPD_GROUP_CAL *NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_DPD_PARAMETER_LID
+* DESCRIPTION
+*      WCDMA DPD parameters setting and debug usage.
+* INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario: 1.This LID will update during task init.
+*                       2.Must do calibration again after modifying this setting.
+*                       3.Not recommend modifying.
+*********************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_PARAMETER_LID)
+     U_sUl1dDpdCustomInputData *NVRAM_EF_UL1_DPD_PARAMETER_TOTAL
+     {
+
+   };
+#if (IS_3G_MIPI_SUPPORT)
+/********************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_DPD_TPC_HIGHBAND1_LID
+* DESCRIPTION
+*      shows the DPD MIPI PA TPC actual setting by band
+* INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario: 1.This LID will update during task init.
+*                       2.Must do calibration again after modifying this setting.
+*                       3.Not recommend modifying.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_DPD_TPC_HIGHBAND1_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_DPD_TPC_HIGHBAND2_LID
+* DESCRIPTION
+*      shows the DPD MIPI PA TPC actual setting by band
+* INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario: 1.This LID will update during task init.
+*                       2.Must do calibration again after modifying this setting.
+*                       3.Not recommend modifying.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_DPD_TPC_HIGHBAND2_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_DPD_TPC_HIGHBAND3_LID
+* DESCRIPTION
+*      shows the DPD MIPI PA TPC actual setting by band
+* INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario: 1.This LID will update during task init.
+*                       2.Must do calibration again after modifying this setting.
+*                       3.Not recommend modifying.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_DPD_TPC_HIGHBAND3_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_DPD_TPC_LOWBAND1_LID
+* DESCRIPTION
+*      shows the DPD MIPI PA TPC actual setting by band
+* INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario: 1.This LID will update during task init.
+*                       2.Must do calibration again after modifying this setting.
+*                       3.Not recommend modifying.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_DPD_TPC_LOWBAND1_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_DPD_TPC_LOWBAND2_LID
+* DESCRIPTION
+*      shows the DPD MIPI PA TPC actual setting by band
+* INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario: 1.This LID will update during task init.
+*                       2.Must do calibration again after modifying this setting.
+*                       3.Not recommend modifying.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_DPD_TPC_LOWBAND2_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL
+     {
+     
+     };
+
+#if __IS_UL1D_ETM_SUPPORT__
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_HIGHBAND1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_HIGHBAND1_LID)
+     ul1mipiEtm_txEvent_T *NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_HIGHBAND2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_HIGHBAND2_LID)
+     ul1mipiEtm_txEvent_T *NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_HIGHBAND3_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_HIGHBAND3_LID)
+     ul1mipiEtm_txEvent_T *NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_LOWBAND1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_LOWBAND1_LID)
+     ul1mipiEtm_txEvent_T *NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_LOWBAND2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_LOWBAND2_LID)
+     ul1mipiEtm_txEvent_T *NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_DATA_HIGHBAND1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_HIGHBAND1_LID)
+     ul1mipiEtm_txData_T *NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_DATA_HIGHBAND2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_HIGHBAND2_LID)
+     ul1mipiEtm_txData_T *NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_DATA_HIGHBAND3_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_HIGHBAND3_LID)
+     ul1mipiEtm_txData_T *NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_DATA_LOWBAND1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_LOWBAND1_LID)
+     ul1mipiEtm_txData_T *NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_DATA_LOWBAND2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_LOWBAND2_LID)
+     ul1mipiEtm_txData_T *NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_HIGHBAND1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_HIGHBAND1_LID)
+     ul1mipiEtm_tpcEvent_T *NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_HIGHBAND2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_HIGHBAND2_LID)
+     ul1mipiEtm_tpcEvent_T *NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_HIGHBAND3_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_HIGHBAND3_LID)
+     ul1mipiEtm_tpcEvent_T *NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_LOWBAND1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_LOWBAND1_LID)
+     ul1mipiEtm_tpcEvent_T *NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_LOWBAND2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_LOWBAND2_LID)
+     ul1mipiEtm_tpcEvent_T *NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_HIGHBAND1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_HIGHBAND1_LID)
+     ul1mipiEtm_tpcData_T *NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_HIGHBAND2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_HIGHBAND2_LID)
+     ul1mipiEtm_tpcData_T *NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_HIGHBAND3_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_HIGHBAND3_LID)
+     ul1mipiEtm_tpcData_T *NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_LOWBAND1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_LOWBAND1_LID)
+     ul1mipiEtm_tpcData_T *NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_LOWBAND2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_LOWBAND2_LID)
+     ul1mipiEtm_tpcData_T *NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL
+     {
+     
+     };
+#endif   // #if __IS_UL1D_ETM_SUPPORT__
+
+#endif
+
+END_NVRAM_DATA
+
+#endif  /* GEN_FOR_PC */
+
+#ifdef __cplusplus
+}
+#endif 
+
+#endif  /* __MTK_UL1_FDD__ */
+#endif  /* !NVRAM_NOT_PRESENT */
+#endif  /* __UL1_NVRAM_EDITOR_H__ */
diff --git a/mcu/custom/protocol/common/ps/ul1_nvram_editor_md95.h b/mcu/custom/protocol/common/ps/ul1_nvram_editor_md95.h
new file mode 100644
index 0000000..ff2c0da
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/ul1_nvram_editor_md95.h
@@ -0,0 +1,4710 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * ul1_nvram_editor.h
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *    This file contains `vendor' defined logical data items stored in NVRAM.
+ *    These logical data items are used in object code of Protocol Stack software.
+ *
+ *    As for customizable logical data items, they are defined in nvram_user_config.c
+ *
+ * Author:
+ * -------
+ * 
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef __UL1_NVRAM_EDITOR_H__
+#define __UL1_NVRAM_EDITOR_H__
+#ifndef NVRAM_NOT_PRESENT
+
+/* In case of that not to build this file in 2G projects or 3G TDD projects */
+#if defined (__MTK_UL1_FDD__)
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */ 
+
+/*
+ *   Include Headers
+ */
+ 
+/*
+ *   NVRAM Basic Headers
+ */
+#include "nvram_data_items.h"
+
+/*
+ *   User Headers
+ */
+#include "ul1_nvram_def.h"
+
+
+#ifdef GEN_FOR_PC
+BEGIN_NVRAM_DATA 
+ 
+#if (defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)) 
+ 
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_3G_RF_PARAMETER_LID
+* DESCRIPTION
+*   This LID is used to store the BPI and LNA port data settings in ul1d_custom_rf.h, ul1d_custom_rf.c.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_3G_RF_PARAMETER_LID)
+     U_sUl1dRfCustomInputData * NVRAM_EF_UL1_3G_RF_PARAMETER_TOTAL
+     {
+        startPattern:"#U_0x1234ABCD_L_0x1234ABCD"
+        {
+        };
+        structVersion:""
+        {
+        };
+        rfType:""
+        {
+        };
+        isDataUpdate:"#U_1_L_1"
+        {
+        };
+        umtsRfPaControlTimingOffset:""
+        {
+        };
+        umtsRfPaControlTimingOffset.maxOffset:"#U_65535"
+        {
+        };
+        umtsRfPaControlTimingOffset.vmOffset:"#U_65535"
+        {
+        };
+        umtsRfPaControlTimingOffset.vbiasOffset:"#U_65535"
+        {
+        };
+        umtsRfPaControlTimingOffset.dc2dcOffset:"#U_65535"
+        {
+        };
+        umtsRfPaControlTimingOffset.vgaOffset:"#U_65535"
+        {
+        };
+        umtsBsiBpiTiming:""
+        {
+        };
+        umtsBsiBpiTiming.xTC_PR1:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PR2:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PR2B:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PR3:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PR3A:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PT1:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PT2:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PT2B:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PT3:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PT3A:"#U_32767"
+        {
+        };
+        umtsPdata:""
+        {
+        };
+        umtsBandIndicator:""
+        {
+        };
+        umtsRxLnaPortSel:""
+        {
+        };
+        umtsTxPathSel:""
+        {
+        };
+        xPMU_PA_CONTROL:""
+        {
+        };
+        endPattern:"#U_0xABCD1234_L_0xABCD1234"
+        {
+        };
+     };
+
+#endif /* #if (defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)) */
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_IOT_CUSTOMIZATION_LID
+*DESCRIPTION
+*      This LID is used for IOT customization.
+*      
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+#if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__) 
+LID_BIT VER_LID(NVRAM_EF_UL1_IOT_CUSTOMIZATION_LID)
+     U_sUl1IotCustomSupportStruct *NVRAM_EF_UL1_IOT_CUSTOMIZATION_TOTAL
+     {
+         ADAPT_Customized:"[INTERNAL]phase out"
+         {
+         };
+         reserved1:"[INTERNAL]phase out"
+         {
+         };
+         reserved2:"[INTERNAL]phase out"
+         {
+         };
+         reserved3:"[INTERNAL]phase out"
+         {
+         };
+     };
+#endif /* #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__) */
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_HSPA_CATEGORY_LID
+*DESCRIPTION
+*      This LID is used to store maximum support HSDPA & HSUPA category in WCDMA.
+*      
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+#if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__) 
+LID_BIT VER_LID(NVRAM_EF_UL1_HSPA_CATEGORY_LID)
+   nvram_ef_ul1_hspa_category_struct * NVRAM_EF_UL1_HSPA_CATEGORY_TOTAL
+   {
+      dpa_cat:"WCDMA Max Supptor HSDPA category"
+      {
+      };
+      upa_cat:"WCDMA Max Supptor HSUPA category"
+      {
+      };
+   };
+#endif /* #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__) */
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_LOW_POWER_LID
+*DESCRIPTION
+*      For 3G low power feature on/off
+*      
+*INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+#if defined (__MTK_UL1_FDD__)
+LID_BIT VER_LID(NVRAM_EF_UL1_LOW_POWER_LID)
+   nvram_ef_ul1_low_power_category_struct * NVRAM_EF_UL1_LOW_POWER_TOTAL
+   {
+      arx_enable:"arx feature on/off"
+      {
+      };
+      lorx_enable:"lorx feature on/off"
+      {
+      };
+      lorx_debug_enable:"lorx debug feature on/off"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_HS_PATCH_LID
+*DESCRIPTION
+*      This LID is used to enable or disable the HSDPA data stuck patch.
+*      
+*INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+LID_BIT VER_LID(NVRAM_EF_UL1_HS_PATCH_LID)
+   nvram_ef_ul1_hs_patch_struct * NVRAM_EF_UL1_HS_PATCH_TOTAL
+   {
+      hs_patch_enable:"hsdpa data stuck patch enable/disable"
+      {
+      };
+   };
+#endif
+
+/* TX PRACH TM Comp.  (for MT6572,MT6582) */
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND1_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND1_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND2_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND2_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND3_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND3_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND4_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND4_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND5_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND5_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND6_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND6_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND7_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND7_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND8_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND8_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND9_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND9_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND10_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND10_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND11_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/      
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND11_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND19_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/        
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND19_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_AFCDAC_LID
+*DESCRIPTION
+*      Adjusting the frequency of DCXO finely.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated during calibration.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_AFCDAC_LID)
+     ul1cal_afcDacData_T *NVRAM_EF_UL1_AFCDAC_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_AFCCAP_LID
+*DESCRIPTION
+*      Adjusting the frequency of DCXO coarsly.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated during calibration and task init.
+****************************************************************************************************/
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_AFCCAP_LID)
+     ul1cal_afcCapData_T *NVRAM_EF_UL1_AFCCAP_TOTAL
+     {
+     
+     };
+
+#if (IS_3G_MIPI_SUPPORT)
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TPC_HIGHBAND1_LID
+*DESCRIPTION
+*      WCDMA MIPI TPC event and data  are stored in this LID.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:This LID will update once during task init.
+****************************************************************************************************/
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TPC_ROUTE1_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TPC_ROUTE2_LID
+*DESCRIPTION
+*      WCDMA MIPI TPC event and data  are stored in this LID.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:This LID will update once during task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TPC_ROUTE2_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TPC_ROUTE3_LID
+*DESCRIPTION
+*      WCDMA MIPI TPC event and data  are stored in this LID.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:This LID will update once during task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TPC_ROUTE3_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TPC_ROUTE4_LID
+*DESCRIPTION
+*      WCDMA MIPI TPC event and data  are stored in this LID.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:This LID will update once during task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TPC_ROUTE4_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TPC_ROUTE5_LID
+*DESCRIPTION
+*      WCDMA MIPI TPC event and data  are stored in this LID.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:This LID will update once during task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TPC_ROUTE5_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL
+     {
+     
+     };
+
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TPC_ROUTE6_LID
+*DESCRIPTION
+*      WCDMA MIPI TPC event and data  are stored in this LID.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:This LID will update once during task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TPC_ROUTE6_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TPC_ROUTE7_LID
+*DESCRIPTION
+*      WCDMA MIPI TPC event and data  are stored in this LID.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:This LID will update once during task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TPC_ROUTE7_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TPC_ROUTE8_LID
+*DESCRIPTION
+*      WCDMA MIPI TPC event and data  are stored in this LID.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:This LID will update once during task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TPC_ROUTE8_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_TPC_BAND_TOTAL
+     {
+     
+     };
+
+#endif /*IS_3G_SUPPORT_8_BANDINDICATOR*/
+#endif
+
+#if (IS_3G_MIPI_NVRAM_FULL_SUPPORT)
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE1_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE1_LID)
+     ul1mipi_rxEvent_T *NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE2_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE2_LID)
+     ul1mipi_rxEvent_T *NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE3_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE3_LID)
+     ul1mipi_rxEvent_T *NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE4_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE4_LID)
+     ul1mipi_rxEvent_T *NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE5_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE5_LID)
+     ul1mipi_rxEvent_T *NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL
+     {
+     
+     };
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE6_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE6_LID)
+     ul1mipi_rxEvent_T *NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE7_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE7_LID)
+     ul1mipi_rxEvent_T *NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE8_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_EVENT_ROUTE8_LID)
+     ul1mipi_rxEvent_T *NVRAM_EF_UL1_MIPI_RX_EVT_BAND_TOTAL
+     {
+     
+     };
+#endif /*IS_3G_SUPPORT_8_BANDINDICATOR*/
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE1_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE1_LID)
+     ul1mipi_rxData_T *NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE2_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE2_LID)
+     ul1mipi_rxData_T *NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE3_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE3_LID)
+     ul1mipi_rxData_T *NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE4_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE4_LID)
+     ul1mipi_rxData_T *NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE5_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE5_LID)
+     ul1mipi_rxData_T *NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE6_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE6_LID)
+     ul1mipi_rxData_T *NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE7_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE7_LID)
+     ul1mipi_rxData_T *NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE8_LID
+*DESCRIPTION
+*      WCDMA RX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_RX_DATA_ROUTE8_LID)
+     ul1mipi_rxData_T *NVRAM_EF_UL1_MIPI_RX_DATA_BAND_TOTAL
+     {
+     
+     };
+#endif /*IS_3G_SUPPORT_8_BANDINDICATOR*/
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE1_LID)
+     ul1mipi_txEvent_T *NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE2_LID)
+     ul1mipi_txEvent_T *NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE3_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE3_LID)
+     ul1mipi_txEvent_T *NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE4_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE4_LID)
+     ul1mipi_txEvent_T *NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE5_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE5_LID)
+     ul1mipi_txEvent_T *NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE6_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE6_LID)
+     ul1mipi_txEvent_T *NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE7_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE7_LID)
+     ul1mipi_txEvent_T *NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE8_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Event , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_EVENT_ROUTE8_LID)
+     ul1mipi_txEvent_T *NVRAM_EF_UL1_MIPI_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+#endif /*IS_3G_SUPPORT_8_BANDINDICATOR*/
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE1_LID)
+     ul1mipi_txData_T *NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE2_LID)
+     ul1mipi_txData_T *NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE3_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE3_LID)
+     ul1mipi_txData_T *NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE4_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE4_LID)
+     ul1mipi_txData_T *NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE5_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE5_LID)
+     ul1mipi_txData_T *NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+#if IS_3G_SUPPORT_8_BANDINDICATOR 
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE6_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE6_LID)
+     ul1mipi_txData_T *NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE7_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE7_LID)
+     ul1mipi_txData_T *NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE8_LID
+*DESCRIPTION
+*      WCDMA TX MIPI Data , can be customized.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_TX_DATA_ROUTE8_LID)
+     ul1mipi_txData_T *NVRAM_EF_UL1_MIPI_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+ 
+#endif /*IS_3G_SUPPORT_8_BANDINDICATOR*/
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE1_LID)
+     ul1mipi_asmIsoData_T *NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL
+     {
+     
+     };
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE2_LID)
+     ul1mipi_asmIsoData_T *NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL
+     {
+     
+     };
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE3_LID)
+     ul1mipi_asmIsoData_T *NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL
+     {
+     
+     };
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE4_LID)
+     ul1mipi_asmIsoData_T *NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL
+     {
+     
+     };
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE5_LID)
+     ul1mipi_asmIsoData_T *NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL
+     {
+     
+     };
+
+#if IS_3G_SUPPORT_8_BANDINDICATOR 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE6_LID)
+     ul1mipi_asmIsoData_T *NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL
+     {
+     
+     };
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE7_LID)
+     ul1mipi_asmIsoData_T *NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL
+     {
+     
+     };
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ASM_ISOLATION_ROUTE8_LID)
+     ul1mipi_asmIsoData_T *NVRAM_EF_UL1_MIPI_ASM_ISOLATION_BAND_TOTAL
+     {
+     
+     };
+#endif /*IS_3G_SUPPORT_8_BANDINDICATOR*/
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_INIT_CW_LID)
+     ul1mipi_initCwData_T *NVRAM_EF_UL1_MIPI_INIT_CW_TOTAL
+     {
+     
+     };
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_SLEEP_CW_LID)
+     ul1mipi_sleepCwData_T *NVRAM_EF_UL1_MIPI_SLEEP_CW_TOTAL
+     {
+     
+     };
+#endif/*IS_3G_MIPI_NVRAM_FULL_SUPPORT*/
+
+#if (IS_3G_VPA_SEL_BY_BAND_SUPPORT)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE1_LID
+* DESCRIPTION
+*   This LID is used to store the relevant data on controling the components to support envelope tracking.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE1_LID)
+     ul1vpa_sel_T *NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE2_LID
+* DESCRIPTION
+*   This LID is used to store the relevant data on controling the components to support envelope tracking.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE2_LID)
+     ul1vpa_sel_T *NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE3_LID
+* DESCRIPTION
+*   This LID is used to store the relevant data on controling the components to support envelope tracking.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE3_LID)
+     ul1vpa_sel_T *NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE4_LID
+* DESCRIPTION
+*   This LID is used to store the relevant data on controling the components to support envelope tracking.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE4_LID)
+     ul1vpa_sel_T *NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE5_LID
+* DESCRIPTION
+*   This LID is used to store the relevant data on controling the components to support envelope tracking.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE5_LID)
+     ul1vpa_sel_T *NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL
+     {
+     
+     };
+
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE6_LID
+* DESCRIPTION
+*   This LID is used to store the relevant data on controling the components to support envelope tracking.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE6_LID)
+     ul1vpa_sel_T *NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL
+     {
+     
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE7_LID
+* DESCRIPTION
+*   This LID is used to store the relevant data on controling the components to support envelope tracking.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE7_LID)
+     ul1vpa_sel_T *NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL
+     {
+     
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE8_LID
+* DESCRIPTION
+*   This LID is used to store the relevant data on controling the components to support envelope tracking.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_VPA_SRC_SEL_ROUTE8_LID)
+     ul1vpa_sel_T *NVRAM_EF_UL1_VPA_SRC_SEL_BAND_TOTAL
+     {
+     
+     };
+
+#endif/*IS_3G_SUPPORT_8_BANDINDICATOR*/
+#endif/*IS_3G_VPA_SEL_BY_BAND_SUPPORT*/
+
+#if IS_3G_TAS_UL1_CUSTOM_SUPPORT
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_LID
+* DESCRIPTION
+*   This LID is used to store the relevant data on switching the antenna to transmit the signal due to the different scenario of the cell phone.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_LID)
+     UMTS_CUSTOM_TAS_FEATURE_BY_RAT_T *NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_LID
+* DESCRIPTION
+*   TAS detailed settings for each band, including RealSim/TestSim enable flag, antenna state setting, and the mapping to databaseA(B)(C) route index in each antenna state.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_LID)
+     UMTS_CUSTOM_TAS_FE_ROUTE_DATABASE_T *NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_TOTAL
+     {
+
+     };
+#if !IS_3G_UTAS_SUPPORT
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_FE_DATABASE_LID
+* DESCRIPTION
+*   Database reference for antenna tuner control, with BPI setting or MIPI setting via LUT table index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_FE_DATABASE_LID)
+     UMTS_CUSTOM_TAS_FE_DATABASE_T *NVRAM_EF_UL1_TAS_FE_DATABASE_TOTAL
+     {
+
+     };
+#if (IS_3G_MIPI_NVRAM_FULL_SUPPORT)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_A_MIPI_EVENT_LID
+* DESCRIPTION
+*   MIPI control event used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_A_MIPI_EVENT_LID)
+     ul1mipi_tasEvent_CatA_T *NVRAM_EF_UL1_CAT_A_TAS_MIPI_EVT_ROUTE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_A_MIPI_DATA_LID
+* DESCRIPTION
+*   MIPI control data used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_A_MIPI_DATA_LID)
+     ul1mipi_tasData_CatA_T *NVRAM_EF_UL1_CAT_A_TAS_MIPI_DATA_ROUTE_TOTAL
+     {
+
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_B_MIPI_EVENT_LID
+* DESCRIPTION
+*   MIPI control event used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_B_MIPI_EVENT_LID)
+     ul1mipi_tasEvent_CatB_T *NVRAM_EF_UL1_CAT_B_TAS_MIPI_EVT_ROUTE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_B_MIPI_DATA_LID
+* DESCRIPTION
+*   MIPI control data used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_B_MIPI_DATA_LID)
+     ul1mipi_tasData_CatB_T *NVRAM_EF_UL1_CAT_B_TAS_MIPI_DATA_ROUTE_TOTAL
+     {
+
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_C_MIPI_EVENT_LID
+* DESCRIPTION
+*   MIPI control event used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_C_MIPI_EVENT_LID)
+     ul1mipi_tasEvent_CatC_T *NVRAM_EF_UL1_CAT_C_TAS_MIPI_EVT_ROUTE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_C_MIPI_DATA_LID
+* DESCRIPTION
+*   MIPI control data used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_C_MIPI_DATA_LID)
+     ul1mipi_tasData_CatC_T *NVRAM_EF_UL1_CAT_C_TAS_MIPI_DATA_ROUTE_TOTAL
+     {
+
+     };
+#endif
+#endif
+#if IS_3G_TAS_INHERIT_4G_ANT
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_LID
+* DESCRIPTION
+*   This LID is used to set what LTE band's TAS states can be inherited by WCDMA band when SRVCC cenario.
+*   
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_LID)
+     UMTS_CUSTOM_TAS_INHERIT_LTE_BAND_BITMAP_TABLE_T *NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_TOTAL
+     {
+
+     };
+#endif
+#endif
+#if IS_3G_DAT_UL1_CUSTOM_SUPPORT
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_LID
+* DESCRIPTION
+*   This LID is switch to turn on/off the DAT feature.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_LID)
+     UMTS_CUSTOM_DAT_FEATURE_BY_RAT_T *NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DAT_FE_ROUTE_DATABASE_LID
+* DESCRIPTION
+*   This LID is mainly for route configure index setting for DAT feature.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DAT_FE_ROUTE_DATABASE_LID)
+     UMTS_CUSTOM_DAT_FE_ROUTE_DATABASE_T *NVRAM_EF_UL1_DAT_FE_ROUTE_DATABASE_TOTAL
+     {
+
+     };
+#if !IS_3G_UDAT_SUPPORT
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DAT_FE_DATABASE_LID
+* DESCRIPTION
+*   This LID is mainly for BPI Settings for DAT feature.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DAT_FE_DATABASE_LID)
+     UMTS_CUSTOM_DAT_FE_DATABASE_T *NVRAM_EF_UL1_DAT_FE_DATABASE_TOTAL
+     {
+
+     };
+#if (IS_3G_MIPI_NVRAM_FULL_SUPPORT)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DAT_CAT_A_MIPI_EVENT_LID
+* DESCRIPTION
+*   This LID is mainly for MIPI codeword event of DAT feature.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DAT_CAT_A_MIPI_EVENT_LID)
+     ul1mipi_datEvent_CatA_T *NVRAM_EF_UL1_CAT_A_DAT_MIPI_EVT_ROUTE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DAT_CAT_A_MIPI_DATA_LID
+* DESCRIPTION
+*   This LID is mainly for MIPI codeword data of DAT feature.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DAT_CAT_A_MIPI_DATA_LID)
+     ul1mipi_datData_CatA_T *NVRAM_EF_UL1_CAT_A_DAT_MIPI_DATA_ROUTE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DAT_CAT_B_MIPI_EVENT_LID
+* DESCRIPTION
+*   This LID is mainly for MIPI codeword event of DAT feature.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DAT_CAT_B_MIPI_EVENT_LID)
+     ul1mipi_datEvent_CatB_T *NVRAM_EF_UL1_CAT_B_DAT_MIPI_EVT_ROUTE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DAT_CAT_B_MIPI_DATA_LID
+* DESCRIPTION
+*   This LID is mainly for MIPI codeword data of DAT feature.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DAT_CAT_B_MIPI_DATA_LID)
+     ul1mipi_datData_CatB_T *NVRAM_EF_UL1_CAT_B_DAT_MIPI_DATA_ROUTE_TOTAL
+     {
+
+     };
+
+#endif
+#endif /*!IS_3G_UDAT_SUPPORT*/
+#endif
+#if (IS_3G_TX_POWER_OFFSET_SUPPORT || IS_3G_SAR_TX_POWER_BACKOFF_SUPPORT)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE1_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE1_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE2_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE2_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE3_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE3_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE4_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE4_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE5_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE5_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE6_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE6_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE7_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE7_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE8_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE8_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+#endif /*IS_3G_SUPPORT_8_BANDINDICATOR*/
+#endif   /* IS_3G_TX_POWER_OFFSET_SUPPORT */
+#if IS_3G_TX_NSFT_POWER_OFFSET_SUPPORT
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXNSFTPOWEROFFSET_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased during NSFT by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXNSFTPOWEROFFSET_LID)
+     U_sTXNSFTPOWEROFFSETDATA_ALLBAND *NVRAM_EF_UL1_TXNSFTPOWEROFFSET_TOTAL
+     {
+     
+     };
+#endif   /* IS_3G_TX_POWER_OFFSET_SUPPORT */
+#if (IS_3G_RX_POWER_OFFSET_SUPPORT )
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE1_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE1_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE2_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE2_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE3_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE3_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE4_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE4_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE5_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE5_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE6_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE6_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE7_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE7_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE8_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE8_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+     
+     };
+#endif /*IS_3G_SUPPORT_8_BANDINDICATOR*/
+#endif   /* IS_3G_RX_POWER_OFFSET_SUPPORT */
+
+#if (IS_3G_RFEQ_COEF_SUBBAND_SUPPORT)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_ROUTE1_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_ROUTE1_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_ROUTE2_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_ROUTE2_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_ROUTE3_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_ROUTE3_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_ROUTE4_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_ROUTE4_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_ROUTE5_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_ROUTE5_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_ROUTE6_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_ROUTE6_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_ROUTE7_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_ROUTE7_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_ROUTE8_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_ROUTE8_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+     
+     };
+#endif   /* IS_3G_RFEQ_COEF_SUBBAND_SUPPORT */
+
+#if (IS_3G_RFEQ_REAL_COEF_TEST)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE1_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE1_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE2_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE2_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE3_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE3_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE4_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE4_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE5_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE5_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE6_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE6_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE7_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE7_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE8_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE8_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+     
+     };
+#endif   /* IS_3G_RFEQ_REAL_COEF_TEST */
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND1_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND1_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND2_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND2_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND3_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND3_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND4_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND4_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND5_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND5_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND6_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND6_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND7_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND7_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND8_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND8_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND9_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND9_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND10_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND10_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND11_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND11_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND19_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND19_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+
+   };
+
+#if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TEMP_DAC_LID
+*DESCRIPTION
+*      The value of temperature DAC value ranged from 0 to 1023.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TEMP_DAC_LID)
+     ul1cal_tempdacData_T *NVRAM_EF_UL1_TEMP_DAC_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND1_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND1_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND2_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND2_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND3_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND3_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND4_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND4_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND5_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND5_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND6_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND6_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND7_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND7_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND8_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND8_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND9_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND9_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND10_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND10_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND11_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND11_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND19_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND19_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND1_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND1_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND2_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND2_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND3_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND3_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND4_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND4_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND5_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND5_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND6_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND6_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND7_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND7_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND8_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND8_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND9_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND9_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND10_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND10_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND11_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND11_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND19_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND19_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+
+     };
+#endif /* __UMTS_RAT__ && __MTK_UL1_FDD__ */
+
+#if defined (__MTK_UL1_FDD__)
+   #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+/* PA 8-level control (for MT6276, MT6573) */
+
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND1_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND1_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND2_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND2_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND3_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND3_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND4_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND4_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND5_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND5_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND6_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND6_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND7_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND7_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND8_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND8_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND9_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND9_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND10_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND10_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND11_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND11_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND19_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND19_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+
+     };
+   #endif // #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+
+   #if defined(__UMTS_R8__)
+   
+ /***************************************************************************************************
+   * LID_NAME
+   *	  NVRAM_EF_UL1_PATHLOSS2_BAND1_LID
+   *DESCRIPTION
+   *	  WCDMA calibration data for RX diversity path pahtloss.
+   *	  Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+   *INFORMATION
+   *	 Can OTA Reset: No
+   *	 Update Scenario:The data in this LID will be updated task init and calibration.
+   ****************************************************************************************************/
+   LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND1_LID)
+        ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+        {
+
+      };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND2_LID
+*DESCRIPTION
+*	WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+   LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND2_LID)
+        ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+        {
+
+      };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND3_LID
+*DESCRIPTION
+*       WCDMA calibration data for RX diversity path pahtloss.
+*       Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+
+   LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND3_LID)
+        ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+        {
+
+      };
+ 
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND4_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND4_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND5_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND5_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND6_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND6_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND7_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND7_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND8_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND8_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND9_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND9_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND10_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND10_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND11_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND11_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND19_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND19_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+
+   };
+
+// add by Wilson
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND1_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND1_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND2_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND2_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND3_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND3_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND4_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND4_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND5_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND5_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND6_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND6_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND7_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND7_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND8_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND8_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND9_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND9_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND10_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now. 
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND10_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND11_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND11_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND19_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND19_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+
+   };
+#endif
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TAS_THRESHOLD_LID
+*DESCRIPTION
+*      For 3G TAS Parameters and threshold settings
+*      
+*INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+LID_BIT VER_LID(NVRAM_EF_UL1_TAS_THRESHOLD_LID)
+     nvram_ef_umts_tas_thr_struct * NVRAM_EF_UL1_TAS_THRESHOLD_TOTAL
+     {
+        rscp_diff_thd_rp:"RSCP difference threshold div to main rscp diff for SAR type 1"
+        {
+        };
+        rscp_diff_thd_po:"RSCP difference threshold"
+        {
+        };
+        rscp_diff_thd_txp:"Diversity to main RSCP difference threshold for txp"
+        {
+        };
+        rscp_diff_thd_cb:"Diversity to main RSCP difference threshold for rscp"
+        {
+        };
+        tas_type2_blind_switch_init_thd1:"Blind switch initial threshold for TAS Type2 in sec"
+        {
+        };
+        tas_type2_blind_switch_step_size:"Blind swithc step size for TAS Type2 in sec"
+        {
+        };
+        tas_type2_blind_switch_uppBound:"Blind switch upper bound for TAS Type2 in sec"
+        {
+        };
+        tas_type2_rscp_switch_back_thd:"RSCP threshold for switch back condition"
+        {
+        };
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_RAS_PARAMETER_LID
+*DESCRIPTION
+*      For 3G RAS Parameters and threshold settings
+*      
+*INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+LID_BIT VER_LID(NVRAM_EF_UL1_RAS_PARAMETER_LID)
+     nvram_ef_umts_ul1_ras_struct * NVRAM_EF_UL1_RAS_PARAMETER_TOTAL
+     {
+        umtsRASFeatureOn:"RAS feature is enabled or not for UMTS"
+        {
+        };
+        RssiS2WThrdBm:"RSSI Threshold to switch from MAIN to BOTH antenna"
+        {
+        };
+        RssiW2SThrdBm:"RSSI Threshold to switch from BOTH to MAIN antenna"
+        {
+        };
+        EcnoS2WThrdB:"Ecno Threshold to switch from MAIN to BOTH antenna"
+        {
+        };
+        EcnoW2SThrdB:"Ecno Threshold to switch from BOTH to MAIN antenna"
+        {
+        };
+        RscpS2WThrdB:"RSCP Threshold to switch from MAIN to BOTH antenna"
+        {
+        };
+        RscpW2SThrdB:"RSCP Threshold to switch from BOTH to MAIN antenna"
+        {
+        };
+        BothAntforTestSimPS:"RAS switch disable for PS only call"
+        {
+        };
+        HsRateHystPercentage:"Hysteresis for HsRateThrPercentage"
+        {
+        };
+        CqiHystIdx:"Hysteresis for CqiDiffThrIdx"
+        {
+        };
+        HsRateThrPercentage:"Threshold for HS scheduled Rate (No of subframes HS is allocated / No of subframes in MeasS) "
+        {
+        };
+        CqiDiffThrIdx:"Threshold for CQI Diff (Diff between CQI report and CQI TrBlkSize)"
+        {
+        };
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_UTAS_THRESHOLD_LID
+*DESCRIPTION
+*      For 3G UTAS Parameters and threshold settings
+*      
+*INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+LID_BIT VER_LID(NVRAM_EF_UL1_UTAS_PARAMETER_LID)
+     nvram_ef_umts_ul1_utas_struct * NVRAM_EF_UL1_UTAS_PARAMETER_TOTAL
+     {
+        meas_slot:"Measurement slot duration (200ms)"
+        {
+        };
+
+        utas_two_rx_param:"2RX switch parameters"
+        {
+        };
+           utas_two_rx_param.stx_n_so_hys:"Hysteresis duration for STx SO (3)"
+           {
+           };
+           utas_two_rx_param.stx_phr_abs_thd:"A threshold indicating almost no power headroom  (1)"
+           {
+           };
+           utas_two_rx_param.stx_ptxp_gain_thd:"TxP gain threshold"
+           {
+           };
+           utas_two_rx_param.stx_phr_gain_thd:"PHr gain threshold"
+           {
+           };
+           utas_two_rx_param.stx_n_preswt:"Pre-switching state duration"
+           {
+           };
+           utas_two_rx_param.stx_txp_cb_preswt_thd:"Increased-TxP threshold in pre-switching state"
+           {
+           };
+           utas_two_rx_param.stx_txp_sigpwr_cb_preswt_thd:"Threshold for sum of TxP- and Sigpower-CB in the pre-switching state"
+           {
+           };
+           utas_two_rx_param.db_pwr_enabled:"Flag of Dynamic Barrier for Pwr"
+           {
+           };
+           utas_two_rx_param.db_pwr_low_bound:"Lower bound of DB, it is also the initial value"
+           {
+           };
+           utas_two_rx_param.db_pwr_upper_bound:"Upper bound of DB"
+           {
+           };
+           utas_two_rx_param.db_pwr_fail_step:"Increased amount of barrier"
+           {
+           };
+           utas_two_rx_param.db_pwr_to_step:"Decreased amount of barrier"
+           {
+           };
+           utas_two_rx_param.db_pwr_relax_period:"Time duration to relax barrier"
+           {
+           };
+           utas_two_rx_param.db_hr_enabled:"Flag of Dynamic barrier for Headroom"
+           {
+           };
+           utas_two_rx_param.db_hr_low_bound:"Lower bound of DB, it is also the initial value"
+           {
+           };
+           utas_two_rx_param.db_hr_upper_bound:"Upper bound of DB"
+           {
+           };
+           utas_two_rx_param.db_hr_fail_step:"Increased amount of barrier"
+           {
+           };
+           utas_two_rx_param.db_hr_to_step:"Decreased amount of barrier"
+           {
+           };
+           utas_two_rx_param.db_hr_relax_period:"Time duration to relax barrier"
+           {
+           };
+           utas_two_rx_param.btx_n_so_hys:"Hysteresis duration for BTx Event-SO"
+           {
+           };
+           utas_two_rx_param.btx_n_cb:"Number of MeasS for sigpower CB"
+           {
+           };
+           utas_two_rx_param.btx_sigpwr_cb_thd:"Sigpower CB threshold"
+           {
+           };
+           utas_two_rx_param.btx_phr_abs_thd:"A threshold indicating almost no power headroom"
+           {
+           };
+           utas_two_rx_param.btx_sigpwr_period_thd:"Sigpower threhsold for starting the timer"
+           {
+           };
+           utas_two_rx_param.btx_tow_period:"Duration for periodic SO"
+           {
+           };
+           utas_two_rx_param.btx_tow_upper_bound:"Upper bound of btx_tow_period"
+           {
+           };
+           utas_two_rx_param.btx_tow_step:"Increased amount of btx_tow_period for a failed pre-switching"
+           {
+           };
+           utas_two_rx_param.btx_n_preswt:"Pre-switching state duration"
+           {
+           };
+           utas_two_rx_param.btx_txp_cb_preswt_thd:"Increased-TxP threshold in pre-switching state"
+           {
+           };
+           utas_two_rx_param.btx_txp_sigpwr_cb_preswt_thd:"Threshold for sum of TxP- and Sigpower-CB in the pre-switching state"
+           {
+           };
+           utas_two_rx_param.brx_n_so_hys:"Hysteresis duration for BRx Event-SO"
+           {
+           };
+           utas_two_rx_param.brx_low_qual_thd:"Low quality threshold"
+           {
+           };
+           utas_two_rx_param.brx_sigpwr_cb_thd:"Sigpower CB threshold"
+           {
+           };
+           utas_two_rx_param.brx_snr_thd:"Low-SNR threshold"
+           {
+           };
+           utas_two_rx_param.brx_sigpwr_period_thd:"Sigpower threshold for starting the timer"
+           {
+           };
+           utas_two_rx_param.brx_tow_period:"Duration for periodic SO"
+           {
+           };
+           utas_two_rx_param.brx_tow_upper_bound:"Upper bound of brx_tow_period"
+           {
+           };
+           utas_two_rx_param.brx_tow_step:"Increased amount of brx_tow_period for a failed pre-switching"
+           {
+           };
+           utas_two_rx_param.brx_n_pre_swt:"Pre-switching state duration"
+           {
+           };
+           utas_two_rx_param.brx_sigpwr_cb_preswt_thd:"Sigpower CB threshold in pre-switching state"
+           {
+           };
+
+        utas_one_rx_param:"1RX switch parameters"
+        {
+        };
+           utas_one_rx_param.timeout_timer_high_qual_thd:"High-quality threshold"
+           {
+           };
+           utas_one_rx_param.timeout_timer_low_qual_thd:"Low quality threshold"
+           {
+           };
+           utas_one_rx_param.timeout_timer_long_count_thd:"Default long-term threshold"
+           {
+           };
+           utas_one_rx_param.timeout_timer_short_count_thd:"Default short-term threshold"
+           {
+           };
+           utas_one_rx_param.timeout_timer_tow_step:"Increasing step of pre-switching is failed"
+           {
+           };
+           utas_one_rx_param.timeout_timer_tow_bound:"Upper-bound of increment"
+           {
+           };
+           utas_one_rx_param.eventso_n_hys:"Hysteresis duration for event triggered SO"
+           {
+           };
+           utas_one_rx_param.eventso_low_qual_thd:"Low quality threshold"
+           {
+           };
+           utas_one_rx_param.eventso_n_cb:"CB interval"
+           {
+           };
+           utas_one_rx_param.eventso_sigpwr_cb_thd:"Threshold of Rx signal power CB"
+           {
+           };
+           utas_one_rx_param.eventso_hr_abs_thd:"The threshold below max-TxP limitation"
+           {
+           };
+           utas_one_rx_param.db_pwr_enabled:"Flag of Dynamic Barrier for Pwr"
+           {
+           };
+           utas_one_rx_param.db_pwr_low_bound:"Lower bound of DB, it is also the initial value"
+           {
+           };
+           utas_one_rx_param.db_pwr_upper_bound:"Upper bound of DB"
+           {
+           };
+           utas_one_rx_param.db_pwr_fail_step:"Increased amount of barrier"
+           {
+           };
+           utas_one_rx_param.db_pwr_to_step:"Decreased amount of barrier"
+           {
+           };
+           utas_one_rx_param.db_pwr_relax_period:"Time duration to relax barrier"
+           {
+           };
+           utas_one_rx_param.db_hr_enabled:"Flag of Dynamic Barrier for Hr"
+           {
+           };
+           utas_one_rx_param.db_hr_low_bound:"Lower bound of DB, it is also the initial value"
+           {
+           };
+           utas_one_rx_param.db_hr_upper_bound:"Upper bound of DB"
+           {
+           };
+           utas_one_rx_param.db_hr_fail_step:"Increased amount of barrier"
+           {
+           };
+           utas_one_rx_param.db_hr_to_step:"Decreased amount of barrier"
+           {
+           };
+           utas_one_rx_param.db_hr_relax_period:"Time duration to relax barrier"
+           {
+           };
+           utas_one_rx_param.sb_n_preswt:"Duration of pre-switching state"
+           {
+           };
+           utas_one_rx_param.sb_hr_abs_thd:"The threshold below max-TxP limitation"
+           {
+           };
+           utas_one_rx_param.sb_txp_cb_preswt_thd:"Threshold of TxP difference before and after pre-switching"
+           {
+           };
+           utas_one_rx_param.sb_txp_sigpwr_cb_preswt_thd:"Threshold for sum of TxP AND Sigpower-CB in the pre-switching state"
+           {
+           };
+           utas_one_rx_param.sb_sigpwr_cb_preswt_thd:"Threshold of sigpower difference before and after pre-switching"
+           {
+           };
+    }; 
+
+#endif // #if defined (__MTK_UL1_FDD__)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE1_LID
+* DESCRIPTION
+*   WCDMA DPD control dat
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE1_LID)
+        U_sDPD_COMMON_CTRL *NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL{
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE2_LID
+* DESCRIPTION
+*   WCDMA DPD control data
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/  
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE2_LID)
+     U_sDPD_COMMON_CTRL *NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE3_LID
+* DESCRIPTION
+*   WCDMA DPD control data
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE3_LID)
+     U_sDPD_COMMON_CTRL *NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE4_LID
+* DESCRIPTION
+*   WCDMA DPD control data
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE4_LID)
+     U_sDPD_COMMON_CTRL *NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE5_LID
+* DESCRIPTION
+*   WCDMA DPD control data
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE5_LID)
+     U_sDPD_COMMON_CTRL *NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE6_LID
+* DESCRIPTION
+*   WCDMA DPD control data
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE6_LID)
+     U_sDPD_COMMON_CTRL *NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE7_LID
+* DESCRIPTION
+*   WCDMA DPD control data
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE7_LID)
+     U_sDPD_COMMON_CTRL *NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE8_LID
+* DESCRIPTION
+*   WCDMA DPD control data
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CTRL_DATA_ROUTE8_LID)
+     U_sDPD_COMMON_CTRL *NVRAM_EF_UL1_DPD_CTRL_DATA_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE1_LID
+*DESCRIPTION
+*      WCDMA DPD calibration data.
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/    
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE1_LID)
+     U_sDPD_GROUP_CAL *NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE2_LID
+*DESCRIPTION
+*      WCDMA DPD calibration data.
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/    
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE2_LID)
+     U_sDPD_GROUP_CAL *NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE3_LID
+*DESCRIPTION
+*      WCDMA DPD calibration data.
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/    
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE3_LID)
+     U_sDPD_GROUP_CAL *NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE4_LID
+*DESCRIPTION
+*      WCDMA DPD calibration data.
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/    
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE4_LID)
+     U_sDPD_GROUP_CAL *NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL
+     {
+
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE5_LID
+*DESCRIPTION
+*      WCDMA DPD calibration data.
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/    
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE5_LID)
+     U_sDPD_GROUP_CAL *NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE6_LID
+*DESCRIPTION
+*      WCDMA DPD calibration data.
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/    
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE6_LID)
+     U_sDPD_GROUP_CAL *NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE7_LID
+*DESCRIPTION
+*      WCDMA DPD calibration data.
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/    
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE7_LID)
+     U_sDPD_GROUP_CAL *NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL
+     {
+
+   };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE8_LID
+*DESCRIPTION
+*      WCDMA DPD calibration data.
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/    
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_CAL_DATA_ROUTE8_LID)
+     U_sDPD_GROUP_CAL *NVRAM_EF_UL1_DPD_CAL_DATA_TOTAL
+     {
+
+   };
+/********************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_DPD_PARAMETER_LID
+* DESCRIPTION
+*      WCDMA DPD parameters setting and debug usage.
+* INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario: 1.This LID will update during task init.
+*                       2.Must do calibration again after modifying this setting.
+*                       3.Not recommend modifying.
+*********************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DPD_PARAMETER_LID)
+     U_sUl1dDpdCustomInputData *NVRAM_EF_UL1_DPD_PARAMETER_TOTAL
+     {
+
+   };
+#if (IS_3G_MIPI_SUPPORT)
+/********************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE1_LID
+* DESCRIPTION
+*      shows the DPD MIPI PA TPC actual setting by band
+* INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario: 1.This LID will update during task init.
+*                       2.Must do calibration again after modifying this setting.
+*                       3.Not recommend modifying.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE1_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE2_LID
+* DESCRIPTION
+*      shows the DPD MIPI PA TPC actual setting by band
+* INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario: 1.This LID will update during task init.
+*                       2.Must do calibration again after modifying this setting.
+*                       3.Not recommend modifying.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE2_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE3_LID
+* DESCRIPTION
+*      shows the DPD MIPI PA TPC actual setting by band
+* INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario: 1.This LID will update during task init.
+*                       2.Must do calibration again after modifying this setting.
+*                       3.Not recommend modifying.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE3_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE4_LID
+* DESCRIPTION
+*      shows the DPD MIPI PA TPC actual setting by band
+* INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario: 1.This LID will update during task init.
+*                       2.Must do calibration again after modifying this setting.
+*                       3.Not recommend modifying.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE4_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE5_LID
+* DESCRIPTION
+*      shows the DPD MIPI PA TPC actual setting by band
+* INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario: 1.This LID will update during task init.
+*                       2.Must do calibration again after modifying this setting.
+*                       3.Not recommend modifying.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE5_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE6_LID
+* DESCRIPTION
+*      shows the DPD MIPI PA TPC actual setting by band
+* INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario: 1.This LID will update during task init.
+*                       2.Must do calibration again after modifying this setting.
+*                       3.Not recommend modifying.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE6_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE7_LID
+* DESCRIPTION
+*      shows the DPD MIPI PA TPC actual setting by band
+* INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario: 1.This LID will update during task init.
+*                       2.Must do calibration again after modifying this setting.
+*                       3.Not recommend modifying.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE7_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL
+     {
+     
+     };
+/********************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE8_LID
+* DESCRIPTION
+*      shows the DPD MIPI PA TPC actual setting by band
+* INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario: 1.This LID will update during task init.
+*                       2.Must do calibration again after modifying this setting.
+*                       3.Not recommend modifying.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_DPD_TPC_ROUTE8_LID)
+     ul1mipi_tpcData_T *NVRAM_EF_UL1_MIPI_DPD_TPC_BAND_TOTAL
+     {
+     
+     };
+
+#if __IS_UL1D_ETM_SUPPORT__
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE1_LID)
+     ul1mipiEtm_txEvent_T *NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE2_LID)
+     ul1mipiEtm_txEvent_T *NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE3_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE3_LID)
+     ul1mipiEtm_txEvent_T *NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE4_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE4_LID)
+     ul1mipiEtm_txEvent_T *NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE5_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE5_LID)
+     ul1mipiEtm_txEvent_T *NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE6_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE6_LID)
+     ul1mipiEtm_txEvent_T *NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE7_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE7_LID)
+     ul1mipiEtm_txEvent_T *NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE8_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_EVENT_ROUTE8_LID)
+     ul1mipiEtm_txEvent_T *NVRAM_EF_UL1_MIPI_ETM_TX_EVT_BAND_TOTAL
+     {
+     
+     };
+
+#endif   // IS_3G_SUPPORT_8_BANDINDICATOR
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE1_LID)
+     ul1mipiEtm_txData_T *NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE2_LID)
+     ul1mipiEtm_txData_T *NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE3_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE3_LID)
+     ul1mipiEtm_txData_T *NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE4_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE4_LID)
+     ul1mipiEtm_txData_T *NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE5_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE5_LID)
+     ul1mipiEtm_txData_T *NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE6_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE6_LID)
+     ul1mipiEtm_txData_T *NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE7_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE7_LID)
+     ul1mipiEtm_txData_T *NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE8_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TX_DATA_ROUTE8_LID)
+     ul1mipiEtm_txData_T *NVRAM_EF_UL1_MIPI_ETM_TX_DATA_BAND_TOTAL
+     {
+     
+     };
+
+#endif   // IS_3G_SUPPORT_8_BANDINDICATOR
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE1_LID)
+     ul1mipiEtm_tpcEvent_T *NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE2_LID)
+     ul1mipiEtm_tpcEvent_T *NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE3_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE3_LID)
+     ul1mipiEtm_tpcEvent_T *NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE4_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE4_LID)
+     ul1mipiEtm_tpcEvent_T *NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE5_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE5_LID)
+     ul1mipiEtm_tpcEvent_T *NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL
+     {
+     
+     };
+
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE6_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE6_LID)
+     ul1mipiEtm_tpcEvent_T *NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE7_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE7_LID)
+     ul1mipiEtm_tpcEvent_T *NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE8_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Event , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_EVENT_ROUTE8_LID)
+     ul1mipiEtm_tpcEvent_T *NVRAM_EF_UL1_MIPI_ETM_TPC_EVT_BAND_TOTAL
+     {
+     
+     };
+
+#endif   // IS_3G_SUPPORT_8_BANDINDICATOR
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE1_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE1_LID)
+     ul1mipiEtm_tpcData_T *NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE2_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE2_LID)
+     ul1mipiEtm_tpcData_T *NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE3_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE3_LID)
+     ul1mipiEtm_tpcData_T *NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE4_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE4_LID)
+     ul1mipiEtm_tpcData_T *NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE5_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE5_LID)
+     ul1mipiEtm_tpcData_T *NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL
+     {
+     
+     };
+
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE6_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE6_LID)
+     ul1mipiEtm_tpcData_T *NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE7_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE7_LID)
+     ul1mipiEtm_tpcData_T *NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL
+     {
+     
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE8_LID
+*DESCRIPTION
+*      WCDMA TX MIPI ETM Data , can be customized.
+*INFORMATION
+*     Can OTA Reset: Yes
+*     Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_ROUTE8_LID)
+     ul1mipiEtm_tpcData_T *NVRAM_EF_UL1_MIPI_ETM_TPC_DATA_BAND_TOTAL
+     {
+     
+     };
+
+#endif   // IS_3G_SUPPORT_8_BANDINDICATOR
+
+#endif   // #if __IS_UL1D_ETM_SUPPORT__
+
+#endif
+
+END_NVRAM_DATA
+
+#endif  /* GEN_FOR_PC */
+
+#ifdef __cplusplus
+}
+#endif 
+
+#endif  /* __MTK_UL1_FDD__ */
+#endif  /* !NVRAM_NOT_PRESENT */
+#endif  /* __UL1_NVRAM_EDITOR_H__ */
diff --git a/mcu/custom/protocol/common/ps/ul1_nvram_editor_md97.h b/mcu/custom/protocol/common/ps/ul1_nvram_editor_md97.h
new file mode 100644
index 0000000..1457580
--- /dev/null
+++ b/mcu/custom/protocol/common/ps/ul1_nvram_editor_md97.h
@@ -0,0 +1,3753 @@
+/*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * ul1_nvram_editor.h
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *    This file contains `vendor' defined logical data items stored in NVRAM.
+ *    These logical data items are used in object code of Protocol Stack software.
+ *
+ *    As for customizable logical data items, they are defined in nvram_user_config.c
+ *
+ * Author:
+ * -------
+ * 
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef __UL1_NVRAM_EDITOR_H__
+#define __UL1_NVRAM_EDITOR_H__
+#ifndef NVRAM_NOT_PRESENT
+
+/* In case of that not to build this file in 2G projects or 3G TDD projects */
+#if defined (__MTK_UL1_FDD__)
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */ 
+
+/*
+ *   Include Headers
+ */
+ 
+/*
+ *   NVRAM Basic Headers
+ */
+#include "nvram_data_items.h"
+
+/*
+ *   User Headers
+ */
+#include "ul1_nvram_def.h"
+
+
+#ifdef GEN_FOR_PC
+BEGIN_NVRAM_DATA 
+ 
+#if (defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)) 
+ 
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_3G_RF_PARAMETER_LID
+* DESCRIPTION
+*   This LID is used to store the BPI and LNA port data settings in ul1d_custom_rf.h, ul1d_custom_rf.c.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_3G_RF_PARAMETER_LID)
+     U_sUl1dRfCustomInputData * NVRAM_EF_UL1_3G_RF_PARAMETER_TOTAL
+     {
+        startPattern:"[MCF,DOC]#U_0x1234ABCD_L_0x1234ABCD"
+        {
+        };
+        structVersion:"[MCF,DOC]"
+        {
+        };
+        rfType:"[MCF,DOC]"
+        {
+        };
+        isDataUpdate:"[MCF,DOC]#U_1_L_1"
+        {
+        };
+#if defined (__UL1_HS_PLUS_PLATFORM__)
+        umtsRfSettingByNVRAM:"[MCF,DOC]"
+        {
+        };
+#endif
+        umtsRfPaControlTimingOffset:"[MCF,DOC]"
+        {
+        };
+        umtsRfPaControlTimingOffset.maxOffset:"#U_65535"
+        {
+        };
+        umtsRfPaControlTimingOffset.vmOffset:"#U_65535"
+        {
+        };
+        umtsRfPaControlTimingOffset.vbiasOffset:"#U_65535"
+        {
+        };
+        umtsRfPaControlTimingOffset.dc2dcOffset:"#U_65535"
+        {
+        };
+        umtsRfPaControlTimingOffset.vgaOffset:"#U_65535"
+        {
+        };
+        umtsBsiBpiTiming:"[MCF,DOC]"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PR1:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PR2:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PR2B:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PR3:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PR3A:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PT1:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PT2:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PT2B:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PT3:"#U_32767"
+        {
+        };
+        umtsBsiBpiTiming.xTC_PT3A:"#U_32767"
+        {
+        };
+        umtsBandIndicator:"[MCF,DOC]"
+        {
+        };
+        xPMU_PA_CONTROL:"[MCF,DOC]"
+        {
+        };
+#if defined (__UL1_HS_PLUS_PLATFORM__)
+        umtsMprBackOff:"[MCF,DOC]"
+        {
+        };
+#endif
+        umtsRxDAlwaysOn:"[MCF,DOC]"
+        {
+        };
+        umtsPADriftCompensation:"[MCF,DOC]"
+        {
+        };
+        ultra_low_cost_solution:"[MCF,DOC]"
+        {
+        };
+        customer_TM_enable:"[MCF,DOC]"
+        {
+        };
+        umtsIdleModeRxDOn:"[MCF,DOC]"
+        {
+        };
+        vpa_fpwm_mode:"[MCF,DOC]"
+        {
+        };
+        pa_section:"[MCF,DOC]"
+        {
+        };
+        umtsCaBandIndicator:"[MCF,DOC]"
+        {
+        };
+#if IS_3G_FDD_RX_PATH_SELECTION_SUPPORT
+        umtsRxPathSelection:"[MCF,DOC]"
+        {
+        };
+#endif
+        band5_and_band6_indicator:"[MCF,DOC]"
+        {
+        };
+#if  IS_3G_B5_AND_B19_INDICATOR_SUPPORT     
+        band5_and_band19_indicator:"[MCF,DOC]"
+        {
+        };
+        disable_band5_indicator:"[MCF,DOC]"
+        {
+        };
+#endif
+#if IS_3G_RX_POWER_OFFSET_SUPPORT
+        umtsRxPowerOffsetSetting:"[MCF,DOC]"
+        {
+        };
+#endif
+        endPattern:"[MCF,DOC]#U_0xABCD1234_L_0xABCD1234"
+        {
+        };
+     };
+
+#endif /* #if (defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)) */
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_IOT_CUSTOMIZATION_LID
+*DESCRIPTION
+*      This LID is used for IOT customization.
+*      
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+#if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__) 
+LID_BIT VER_LID(NVRAM_EF_UL1_IOT_CUSTOMIZATION_LID)
+     U_sUl1IotCustomSupportStruct *NVRAM_EF_UL1_IOT_CUSTOMIZATION_TOTAL
+     {
+         ADAPT_Customized:"[INTERNAL]phase out"
+         {
+         };
+         reserved1:"[INTERNAL]phase out"
+         {
+         };
+         reserved2:"[INTERNAL]phase out"
+         {
+         };
+         reserved3:"[INTERNAL]phase out"
+         {
+         };
+     };
+#endif /* #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__) */
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_HSPA_CATEGORY_LID
+*DESCRIPTION
+*      This LID is used to store maximum support HSDPA & HSUPA category in WCDMA.
+*      
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+#if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__) 
+LID_BIT VER_LID(NVRAM_EF_UL1_HSPA_CATEGORY_LID)
+   nvram_ef_ul1_hspa_category_struct * NVRAM_EF_UL1_HSPA_CATEGORY_TOTAL
+   {
+      dpa_cat:"WCDMA Max Supptor HSDPA category"
+      {
+      };
+      upa_cat:"WCDMA Max Supptor HSUPA category"
+      {
+      };
+   };
+#endif /* #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__) */
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_LOW_POWER_LID
+*DESCRIPTION
+*      For 3G low power feature on/off
+*      
+*INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+#if defined (__MTK_UL1_FDD__)
+LID_BIT VER_LID(NVRAM_EF_UL1_LOW_POWER_LID)
+   nvram_ef_ul1_low_power_category_struct * NVRAM_EF_UL1_LOW_POWER_TOTAL
+   {
+      arx_enable:"arx feature on/off"
+      {
+      };
+      lorx_enable:"lorx feature on/off"
+      {
+      };
+      lorx_debug_enable:"lorx debug feature on/off"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_HS_PATCH_LID
+*DESCRIPTION
+*      This LID is used to enable or disable the HSDPA data stuck patch.
+*      
+*INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+LID_BIT VER_LID(NVRAM_EF_UL1_HS_PATCH_LID)
+   nvram_ef_ul1_hs_patch_struct * NVRAM_EF_UL1_HS_PATCH_TOTAL
+   {
+      hs_patch_enable:"hsdpa data stuck patch enable/disable"
+      {
+      };
+   };
+
+/********************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_MAXTXPWR_LID
+* DESCRIPTION
+*      Max Tx Power
+* INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario: This LID will update during task init. (?)
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_MAXTXPWR_LID)
+ nvram_ef_ul1_max_tx_pwr_table_struct *NVRAM_EF_UL1_MAXTXPWR_TOTAL
+ {
+    max_pwr_by_band:"max tx power;index 0 means band0 max power , index 1 means band1 max power and etc"
+    {
+    };
+ };
+#endif
+
+/* TX PRACH TM Comp.  (for MT6572,MT6582) */
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND1_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND1_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+      txPrachTmCompData:"[MCF,DOC]"
+      {
+      };
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND2_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND2_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+      txPrachTmCompData:"[MCF,DOC]"
+      {
+      };
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND3_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND3_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+      txPrachTmCompData:"[MCF,DOC]"
+      {
+      };
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND4_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND4_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+      txPrachTmCompData:"[MCF,DOC]"
+      {
+      };
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND5_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND5_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+      txPrachTmCompData:"[MCF,DOC]"
+      {
+      };
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND6_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND6_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+      txPrachTmCompData:"[MCF,DOC]"
+      {
+      };
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND7_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND7_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+      txPrachTmCompData:"[MCF,DOC]"
+      {
+      };
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND8_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND8_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+      txPrachTmCompData:"[MCF,DOC]"
+      {
+      };
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND9_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND9_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+      txPrachTmCompData:"[MCF,DOC]"
+      {
+      };
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND10_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND10_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+      txPrachTmCompData:"[MCF,DOC]"
+      {
+      };
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND11_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/      
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND11_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+      txPrachTmCompData:"[MCF,DOC]"
+      {
+      };
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPRACHTMCOMP_BAND19_LID
+*DESCRIPTION
+*      WCDMA calibration data of temperature compensation for TX Prach .It is usually not used now.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/        
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPRACHTMCOMP_BAND19_LID)
+     ul1cal_txPrachTmCompData_T *NVRAM_EF_UL1_TXPRACHTMCOMP_BAND_TOTAL
+     {
+      txPrachTmCompData:"[MCF,DOC]"
+      {
+      };
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_AFCDAC_LID
+*DESCRIPTION
+*      Adjusting the frequency of DCXO finely.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated during calibration.
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_AFCDAC_LID)
+     ul1cal_afcDacData_T *NVRAM_EF_UL1_AFCDAC_TOTAL
+     {
+      afcDacData:"[DOC]"
+      {
+      };
+     };
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_AFCCAP_LID
+*DESCRIPTION
+*      Adjusting the frequency of DCXO coarsly.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated during calibration and task init.
+****************************************************************************************************/
+
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_AFCCAP_LID)
+     ul1cal_afcCapData_T *NVRAM_EF_UL1_AFCCAP_TOTAL
+     {
+      afcCapData:"[DOC]"
+      {
+      };
+     };
+
+#if IS_3G_TAS_UL1_CUSTOM_SUPPORT
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_LID
+* DESCRIPTION
+*   This LID is used to store the relevant data on switching the antenna to transmit the signal due to the different scenario of the cell phone.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_LID)
+     UMTS_CUSTOM_TAS_FEATURE_BY_RAT_T *NVRAM_EF_UL1_TAS_FEATURE_BY_RAT_TOTAL
+     {
+      force_mode_tas_feature:"[MCF,DOC]"
+      {
+      };
+      tas_ics_init_ant_state:"[MCF,DOC]"
+      {
+      };
+      tas_enable_on_real_sim:"[MCF,DOC]"
+      {
+      };
+      tas_enable_on_test_sim:"[MCF,DOC]"
+      {
+      };
+   };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_LID
+* DESCRIPTION
+*   TAS detailed settings for each band, including RealSim/TestSim enable flag, antenna state setting, and the mapping to databaseA(B)(C) route index in each antenna state.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_LID)
+     UMTS_CUSTOM_TAS_FE_ROUTE_DATA_T *NVRAM_EF_UL1_TAS_FE_ROUTE_DATABASE_TOTAL
+     {
+      UMTS_tas_fe_route_db:"[MCF,DOC]"
+      {
+      };
+   };
+
+#if !IS_3G_UTAS_SUPPORT
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_FE_DATABASE_LID
+* DESCRIPTION
+*   Database reference for antenna tuner control, with BPI setting or MIPI setting via LUT table index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_FE_DATABASE_LID)
+     UMTS_CUSTOM_TAS_FE_DATABASE_T *NVRAM_EF_UL1_TAS_FE_DATABASE_TOTAL
+     {
+
+     };
+#if (IS_3G_MIPI_NVRAM_FULL_SUPPORT)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_A_MIPI_EVENT_LID
+* DESCRIPTION
+*   MIPI control event used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_A_MIPI_EVENT_LID)
+     ul1mipi_tasEvent_CatA_T *NVRAM_EF_UL1_CAT_A_TAS_MIPI_EVT_ROUTE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_A_MIPI_DATA_LID
+* DESCRIPTION
+*   MIPI control data used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_A_MIPI_DATA_LID)
+     ul1mipi_tasData_CatA_T *NVRAM_EF_UL1_CAT_A_TAS_MIPI_DATA_ROUTE_TOTAL
+     {
+
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_B_MIPI_EVENT_LID
+* DESCRIPTION
+*   MIPI control event used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_B_MIPI_EVENT_LID)
+     ul1mipi_tasEvent_CatB_T *NVRAM_EF_UL1_CAT_B_TAS_MIPI_EVT_ROUTE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_B_MIPI_DATA_LID
+* DESCRIPTION
+*   MIPI control data used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_B_MIPI_DATA_LID)
+     ul1mipi_tasData_CatB_T *NVRAM_EF_UL1_CAT_B_TAS_MIPI_DATA_ROUTE_TOTAL
+     {
+
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_C_MIPI_EVENT_LID
+* DESCRIPTION
+*   MIPI control event used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_C_MIPI_EVENT_LID)
+     ul1mipi_tasEvent_CatC_T *NVRAM_EF_UL1_CAT_C_TAS_MIPI_EVT_ROUTE_TOTAL
+     {
+
+     };
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_CAT_C_MIPI_DATA_LID
+* DESCRIPTION
+*   MIPI control data used for antenna tuner. Chosen by database table MIPI config index.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_CAT_C_MIPI_DATA_LID)
+     ul1mipi_tasData_CatC_T *NVRAM_EF_UL1_CAT_C_TAS_MIPI_DATA_ROUTE_TOTAL
+     {
+
+     };
+#endif
+#endif
+#if IS_3G_TAS_INHERIT_4G_ANT
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_LID
+* DESCRIPTION
+*   This LID is used to set what LTE band's TAS states can be inherited by WCDMA band when SRVCC cenario.
+*   
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_LID)
+     UMTS_CUSTOM_TAS_INHERIT_LTE_BAND_BITMAP_TABLE_T *NVRAM_EF_UL1_TAS_INHERIT_LTE_ANT_TOTAL
+     {
+      inherit_lte_band_bitmap_route:"[MCF,DOC]"
+      {
+      };
+   };
+
+#endif
+#endif
+
+#if IS_3G_DAT_UL1_CUSTOM_SUPPORT
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_LID
+* DESCRIPTION
+*   This LID is switch to turn on/off the DAT feature.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_LID)
+     UMTS_CUSTOM_DAT_FEATURE_BY_RAT_T *NVRAM_EF_UL1_DAT_FEATURE_BY_RAT_TOTAL
+     {
+      feature_enable:"[MCF,DOC]"
+      {
+      };
+      ap_scenario:"[MCF,DOC]"
+      {
+      };
+   };
+
+#endif
+
+#if IS_3G_SAR_TX_POWER_BACKOFF_SUPPORT
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_SARBACKOFF_ROUTE1_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_SARBACKOFF_ROUTE1_LID)
+     U_sSARBackoffDATA *NVRAM_EF_UL1_SARBACKOFF_BAND_TOTAL
+     {
+      table:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_SARBACKOFF_ROUTE2_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_SARBACKOFF_ROUTE2_LID)
+     U_sSARBackoffDATA *NVRAM_EF_UL1_SARBACKOFF_BAND_TOTAL
+     {
+      table:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_SARBACKOFF_ROUTE3_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_SARBACKOFF_ROUTE3_LID)
+     U_sSARBackoffDATA *NVRAM_EF_UL1_SARBACKOFF_BAND_TOTAL
+     {
+      table:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_SARBACKOFF_ROUTE4_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_SARBACKOFF_ROUTE4_LID)
+     U_sSARBackoffDATA *NVRAM_EF_UL1_SARBACKOFF_BAND_TOTAL
+     {
+      table:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_SARBACKOFF_ROUTE5_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_SARBACKOFF_ROUTE5_LID)
+     U_sSARBackoffDATA *NVRAM_EF_UL1_SARBACKOFF_BAND_TOTAL
+     {
+      table:"[MCF,DOC]"
+      {
+      };
+     };
+
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_SARBACKOFF_ROUTE6_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_SARBACKOFF_ROUTE6_LID)
+     U_sSARBackoffDATA *NVRAM_EF_UL1_SARBACKOFF_BAND_TOTAL
+     {
+      table:"[MCF,DOC]"
+      {
+      };
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_SARBACKOFF_ROUTE7_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_SARBACKOFF_ROUTE7_LID)
+     U_sSARBackoffDATA *NVRAM_EF_UL1_SARBACKOFF_BAND_TOTAL
+     {
+      table:"[MCF,DOC]"
+      {
+      };
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_SARBACKOFF_ROUTE8_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_SARBACKOFF_ROUTE8_LID)
+     U_sSARBackoffDATA *NVRAM_EF_UL1_SARBACKOFF_BAND_TOTAL
+     {
+      table:"[MCF,DOC]"
+      {
+      };
+   };
+     
+#endif /*IS_3G_SUPPORT_8_BANDINDICATOR*/
+#endif   /* IS_3G_SAR_TX_POWER_BACKOFF_SUPPORT */
+
+
+#if IS_3G_TX_POWER_OFFSET_SUPPORT 
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE1_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE1_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+      table:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE2_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE2_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+      table:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE3_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE3_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+      table:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE4_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE4_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+      table:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE5_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE5_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+      table:"[MCF,DOC]"
+      {
+      };
+     };
+
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE6_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE6_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+      table:"[MCF,DOC]"
+      {
+      };
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE7_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE7_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+      table:"[MCF,DOC]"
+      {
+      };
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE8_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPOWEROFFSET_ROUTE8_LID)
+     U_sTXPOWEROFFSETDATA *NVRAM_EF_UL1_TXPOWEROFFSET_BAND_TOTAL
+     {
+      table:"[MCF,DOC]"
+      {
+      };
+   };
+     
+#endif /*IS_3G_SUPPORT_8_BANDINDICATOR*/
+#endif   /* IS_3G_TX_POWER_OFFSET_SUPPORT */
+
+#if IS_3G_TX_NSFT_POWER_OFFSET_SUPPORT
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_TXNSFTPOWEROFFSET_LID
+* DESCRIPTION
+*   The maximum of Tx power can be increased or decreased during NSFT by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXNSFTPOWEROFFSET_LID)
+     U_sTXNSFTPOWEROFFSETDATA_ALLBAND *NVRAM_EF_UL1_TXNSFTPOWEROFFSET_TOTAL
+     {
+      nsftTpoTable:"[DOC]"
+      {
+      };     
+   };
+     
+#endif   /* IS_3G_TX_POWER_OFFSET_SUPPORT */
+
+#if (IS_3G_RX_POWER_OFFSET_SUPPORT )
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE1_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE1_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+      subband_power_offset:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE2_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE2_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+      subband_power_offset:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE3_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE3_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+      subband_power_offset:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE4_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE4_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+      subband_power_offset:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE5_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE5_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+      subband_power_offset:"[MCF,DOC]"
+      {
+      };
+     };
+
+#if IS_3G_SUPPORT_8_BANDINDICATOR
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE6_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE6_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+      subband_power_offset:"[MCF,DOC]"
+      {
+      };
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE7_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE7_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+      subband_power_offset:"[MCF,DOC]"
+      {
+      };
+     };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE8_LID
+* DESCRIPTION
+*   The RSSI of received signal can be increased or decreased by modifying the value in this LID.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RXPOWEROFFSET_ROUTE8_LID)
+     U_sRXPOWEROFFSETDATA *NVRAM_EF_UL1_RXPOWEROFFSET_BAND_TOTAL
+     {
+      subband_power_offset:"[MCF,DOC]"
+      {
+      };
+   };
+     
+#endif /*IS_3G_SUPPORT_8_BANDINDICATOR*/
+#endif   /* IS_3G_RX_POWER_OFFSET_SUPPORT */
+
+#if (IS_3G_RFEQ_COEF_SUBBAND_SUPPORT)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_ROUTE1_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_ROUTE1_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+      rfeq_coef_subband:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_ROUTE2_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_ROUTE2_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+      rfeq_coef_subband:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_ROUTE3_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_ROUTE3_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+      rfeq_coef_subband:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_ROUTE4_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_ROUTE4_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+      rfeq_coef_subband:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_ROUTE5_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_ROUTE5_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+      rfeq_coef_subband:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_ROUTE6_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_ROUTE6_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+      rfeq_coef_subband:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_ROUTE7_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_ROUTE7_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+      rfeq_coef_subband:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_COEF_ROUTE8_LID
+* DESCRIPTION
+*   Finetune Complex RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_COEF_ROUTE8_LID)
+     hs_dsch_rfeq_info_band_T *NVRAM_EF_UL1_RFEQ_COEF_BAND_TOTAL
+     {
+      rfeq_coef_subband:"[MCF,DOC]"
+      {
+      };
+   };
+     
+#endif   /* IS_3G_RFEQ_COEF_SUBBAND_SUPPORT */
+
+#if (IS_3G_RFEQ_REAL_COEF_TEST)
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE1_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE1_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+      real_rfeq_band:"[MCF,DOC]"
+      {
+      };
+	  complex_rfeq_band:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE2_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE2_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+      real_rfeq_band:"[MCF,DOC]"
+      {
+      };
+	  complex_rfeq_band:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE3_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE3_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+      real_rfeq_band:"[MCF,DOC]"
+      {
+      };
+	  complex_rfeq_band:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE4_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE4_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+      real_rfeq_band:"[MCF,DOC]"
+      {
+      };
+	  complex_rfeq_band:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE5_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE5_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+      real_rfeq_band:"[MCF,DOC]"
+      {
+      };
+	  complex_rfeq_band:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE6_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE6_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+      real_rfeq_band:"[MCF,DOC]"
+      {
+      };
+	  complex_rfeq_band:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE7_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE7_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+      real_rfeq_band:"[MCF,DOC]"
+      {
+      };
+	  complex_rfeq_band:"[MCF,DOC]"
+      {
+      };
+   };
+     
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE8_LID
+* DESCRIPTION
+*   Finetune Real RFEQ for HSDPA max throughput.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: Yes
+*   Update Scenario: This LID will be updated in initial task.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_RFEQ_REAL_COEF_ROUTE8_LID)
+     URXDFE_REAL_RFEQ_CUSTOM_BAND_T *NVRAM_EF_UL1_RFEQ_REAL_COEF_BAND_TOTAL
+     {
+      real_rfeq_band:"[MCF,DOC]"
+      {
+      };
+	  complex_rfeq_band:"[MCF,DOC]"
+      {
+      };
+   };
+     
+#endif   /* IS_3G_RFEQ_REAL_COEF_TEST */
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND1_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND1_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+      verno:"[DOC]"
+      {
+      };
+      band:"[DOC]"
+      {
+      };
+      umts_rx_comp:"[DOC]"
+      {
+      };
+      umts_det_comp:"[DOC]"
+      {
+      };
+      umts_tx_comp:"[DOC]"
+      {
+      };
+   };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND2_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND2_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+      verno:"[DOC]"
+      {
+      };
+      band:"[DOC]"
+      {
+      };
+      umts_rx_comp:"[DOC]"
+      {
+      };
+      umts_det_comp:"[DOC]"
+      {
+      };
+      umts_tx_comp:"[DOC]"
+      {
+      };
+   };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND3_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND3_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+      verno:"[DOC]"
+      {
+      };
+      band:"[DOC]"
+      {
+      };
+      umts_rx_comp:"[DOC]"
+      {
+      };
+      umts_det_comp:"[DOC]"
+      {
+      };
+      umts_tx_comp:"[DOC]"
+      {
+      };
+   };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND4_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND4_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+      verno:"[DOC]"
+      {
+      };
+      band:"[DOC]"
+      {
+      };
+      umts_rx_comp:"[DOC]"
+      {
+      };
+      umts_det_comp:"[DOC]"
+      {
+      };
+      umts_tx_comp:"[DOC]"
+      {
+      };
+   };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND5_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND5_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+      verno:"[DOC]"
+      {
+      };
+      band:"[DOC]"
+      {
+      };
+      umts_rx_comp:"[DOC]"
+      {
+      };
+      umts_det_comp:"[DOC]"
+      {
+      };
+      umts_tx_comp:"[DOC]"
+      {
+      };
+   };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND6_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND6_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+      verno:"[DOC]"
+      {
+      };
+      band:"[DOC]"
+      {
+      };
+      umts_rx_comp:"[DOC]"
+      {
+      };
+      umts_det_comp:"[DOC]"
+      {
+      };
+      umts_tx_comp:"[DOC]"
+      {
+      };
+   };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND7_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND7_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+      verno:"[DOC]"
+      {
+      };
+      band:"[DOC]"
+      {
+      };
+      umts_rx_comp:"[DOC]"
+      {
+      };
+      umts_det_comp:"[DOC]"
+      {
+      };
+      umts_tx_comp:"[DOC]"
+      {
+      };
+   };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND8_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND8_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+      verno:"[DOC]"
+      {
+      };
+      band:"[DOC]"
+      {
+      };
+      umts_rx_comp:"[DOC]"
+      {
+      };
+      umts_det_comp:"[DOC]"
+      {
+      };
+      umts_tx_comp:"[DOC]"
+      {
+      };
+   };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND9_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND9_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+      verno:"[DOC]"
+      {
+      };
+      band:"[DOC]"
+      {
+      };
+      umts_rx_comp:"[DOC]"
+      {
+      };
+      umts_det_comp:"[DOC]"
+      {
+      };
+      umts_tx_comp:"[DOC]"
+      {
+      };
+   };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND10_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND10_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+      verno:"[DOC]"
+      {
+      };
+      band:"[DOC]"
+      {
+      };
+      umts_rx_comp:"[DOC]"
+      {
+      };
+      umts_det_comp:"[DOC]"
+      {
+      };
+      umts_tx_comp:"[DOC]"
+      {
+      };
+   };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND11_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND11_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+      verno:"[DOC]"
+      {
+      };
+      band:"[DOC]"
+      {
+      };
+      umts_rx_comp:"[DOC]"
+      {
+      };
+      umts_det_comp:"[DOC]"
+      {
+      };
+      umts_tx_comp:"[DOC]"
+      {
+      };
+   };
+
+/********************************************************************************************
+* LID_NAME
+*   NVRAM_EF_UL1_PWRONCAL_BAND19_LID
+* DESCRIPTION
+*   WCDMA calibration data for Power On.
+*   Refer to CS0021-GAK1C-AND-v1.0EN_Platform_System_RF_RF_NVRAM_LID_Introduction_Application_Note.docx for more details.
+* INFOMATION
+*   Can OTA Reset: No
+*   Update Scenario: This LID will be updated in initial task and calibration.
+*********************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PWRONCAL_BAND19_LID)
+     UMTS_RF_POWER_ON_CAL_DATA_PER_BAND_T *NVRAM_EF_UL1_PWRONCAL_TOTAL
+     {
+      verno:"[DOC]"
+      {
+      };
+      band:"[DOC]"
+      {
+      };
+      umts_rx_comp:"[DOC]"
+      {
+      };
+      umts_det_comp:"[DOC]"
+      {
+      };
+      umts_tx_comp:"[DOC]"
+      {
+      };
+   };
+
+#if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TEMP_DAC_LID
+*DESCRIPTION
+*      The value of temperature DAC value ranged from 0 to 1023.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TEMP_DAC_LID)
+     ul1cal_tempdacData_T *NVRAM_EF_UL1_TEMP_DAC_TOTAL
+     {
+      tempdacData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND1_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND1_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND2_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND2_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND3_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND3_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND4_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND4_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND5_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND5_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND6_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND6_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND7_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND7_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND8_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND8_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND9_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND9_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND10_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND10_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND11_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND11_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_PATHLOSS_BAND19_LID
+*DESCRIPTION
+*      WCDMA calibration data for RX main path pahtloss.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS_BAND19_LID)
+     ul1cal_pathlossData_T *NVRAM_EF_UL1_PATHLOSS_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND1_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND1_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+      txdacData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND2_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND2_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+      txdacData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND3_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND3_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+      txdacData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND4_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND4_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+      txdacData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND5_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND5_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+      txdacData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND6_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND6_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+      txdacData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND7_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND7_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+      txdacData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND8_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND8_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+      txdacData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND9_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND9_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+      txdacData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND10_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND10_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+      txdacData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND11_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND11_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+      txdacData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*      NVRAM_EF_UL1_TXDAC_BAND19_LID
+*DESCRIPTION
+*      WCDMA calibration data for TX and detector.
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*     Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration..
+****************************************************************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXDAC_BAND19_LID)
+     ul1cal_txdacData_T *NVRAM_EF_UL1_TXDAC_BAND_TOTAL
+     {
+      txdacData:"[DOC]"
+      {
+      };
+   };
+
+#endif /* __UMTS_RAT__ && __MTK_UL1_FDD__ */
+
+#if defined (__MTK_UL1_FDD__)
+   #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+/* PA 8-level control (for MT6276, MT6573) */
+
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND1_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND1_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+      txPaOctLevData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND2_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND2_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+      txPaOctLevData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND3_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND3_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+      txPaOctLevData:"[DOC]"
+      {
+      };
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND4_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND4_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+      txPaOctLevData:"[DOC]"
+      {
+      };
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND5_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND5_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+      txPaOctLevData:"[DOC]"
+      {
+      };
+     };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND6_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND6_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+      txPaOctLevData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND7_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND7_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+      txPaOctLevData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND8_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND8_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+      txPaOctLevData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND9_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND9_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+      txPaOctLevData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND10_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND10_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+      txPaOctLevData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND11_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND11_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+      txPaOctLevData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TXPAOCTLEV_BAND19_LID
+*DESCRIPTION
+*      WCDMA calibration data for PA 8 level .
+*      Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*      Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPAOCTLEV_BAND19_LID)
+     ul1cal_txPaOctLevData_T *NVRAM_EF_UL1_TXPAOCTLEV_BAND_TOTAL
+     {
+      txPaOctLevData:"[DOC]"
+      {
+      };
+   };
+
+   #endif // #if defined (__UL1_HS_PLATFORM__) || defined (__UL1_HS_PLUS_PLATFORM__)
+
+   #if defined(__UMTS_R8__)
+   
+ /***************************************************************************************************
+   * LID_NAME
+   *	  NVRAM_EF_UL1_PATHLOSS2_BAND1_LID
+   *DESCRIPTION
+   *	  WCDMA calibration data for RX diversity path pahtloss.
+   *	  Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+   *INFORMATION
+   *	 Can OTA Reset: No
+   *	 Update Scenario:The data in this LID will be updated task init and calibration.
+   ****************************************************************************************************/
+   LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND1_LID)
+        ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+        {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND2_LID
+*DESCRIPTION
+*	WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/   
+   LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND2_LID)
+        ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+        {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND3_LID
+*DESCRIPTION
+*       WCDMA calibration data for RX diversity path pahtloss.
+*       Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*      Can OTA Reset: No
+*     Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+   LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND3_LID)
+        ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+        {
+      pathlossData:"[DOC]"
+      {
+      };
+      };
+ 
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND4_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND4_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND5_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND5_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND6_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND6_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND7_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND7_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND8_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND8_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND9_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND9_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND10_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND10_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND11_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND11_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_PATHLOSS2_BAND19_LID
+*DESCRIPTION
+*        WCDMA calibration data for RX diversity path pahtloss.
+*	Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_PATHLOSS2_BAND19_LID)
+     ul1cal_pathlossRxdData_T *NVRAM_EF_UL1_PATHLOSS2_BAND_TOTAL
+     {
+      pathlossData:"[DOC]"
+      {
+      };
+   };
+
+// add by Wilson
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND1_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND1_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+      txPaDriftCompData:"[MCF,DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND2_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND2_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+      txPaDriftCompData:"[MCF,DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND3_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND3_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+      txPaDriftCompData:"[MCF,DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND4_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND4_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+      txPaDriftCompData:"[MCF,DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND5_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND5_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+      txPaDriftCompData:"[MCF,DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND6_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND6_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+      txPaDriftCompData:"[MCF,DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND7_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND7_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+      txPaDriftCompData:"[MCF,DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND8_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND8_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+      txPaDriftCompData:"[MCF,DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND9_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND9_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+      txPaDriftCompData:"[MCF,DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND10_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now. 
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND10_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+      txPaDriftCompData:"[MCF,DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND11_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND11_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+      txPaDriftCompData:"[MCF,DOC]"
+      {
+      };
+   };
+
+/***************************************************************************************************
+* LID_NAME
+*        NVRAM_EF_UL1_TXPADRIFTCOMP_BAND19_LID
+*DESCRIPTION
+*        WCDMA calibration data of compensation for PA output power in the hysterisis region.It is usually not used now.
+*        Reference:Platform_System_RF_MT6763_RF_NVRAM_LID_Introduction_Application_Note.docx
+*INFORMATION
+*        Can OTA Reset: No
+*        Update Scenario:The data in this LID will be updated task init and calibration.
+****************************************************************************************************/ 
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_UL1_TXPADRIFTCOMP_BAND19_LID)
+     ul1cal_txPaDriftCompData_T *NVRAM_EF_UL1_TXPADRIFTCOMP_BAND_TOTAL
+     {
+      txPaDriftCompData:"[MCF,DOC]"
+      {
+      };
+   };
+
+#endif
+#if !defined(__L1_STANDALONE__)
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_TAS_THRESHOLD_LID
+*DESCRIPTION
+*      For 3G TAS Parameters and threshold settings
+*      
+*INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+LID_BIT VER_LID(NVRAM_EF_UL1_TAS_THRESHOLD_LID)
+     nvram_ef_umts_tas_thr_struct * NVRAM_EF_UL1_TAS_THRESHOLD_TOTAL
+     {
+        rscp_diff_thd_rp:"RSCP difference threshold div to main rscp diff for SAR type 1"
+        {
+        };
+        rscp_diff_thd_po:"RSCP difference threshold"
+        {
+        };
+        rscp_diff_thd_txp:"Diversity to main RSCP difference threshold for txp"
+        {
+        };
+        rscp_diff_thd_cb:"Diversity to main RSCP difference threshold for rscp"
+        {
+        };
+        tas_type2_blind_switch_init_thd1:"Blind switch initial threshold for TAS Type2 in sec"
+        {
+        };
+        tas_type2_blind_switch_step_size:"Blind swithc step size for TAS Type2 in sec"
+        {
+        };
+        tas_type2_blind_switch_uppBound:"Blind switch upper bound for TAS Type2 in sec"
+        {
+        };
+        tas_type2_rscp_switch_back_thd:"RSCP threshold for switch back condition"
+        {
+        };
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_RAS_PARAMETER_LID
+*DESCRIPTION
+*      For 3G RAS Parameters and threshold settings
+*      
+*INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+LID_BIT VER_LID(NVRAM_EF_UL1_RAS_PARAMETER_LID)
+     nvram_ef_umts_ul1_ras_struct * NVRAM_EF_UL1_RAS_PARAMETER_TOTAL
+     {
+        umtsRASFeatureOn:"RAS feature is enabled or not for UMTS"
+        {
+        };
+        RssiS2WThrdBm:"RSSI Threshold to switch from MAIN to BOTH antenna"
+        {
+        };
+        RssiW2SThrdBm:"RSSI Threshold to switch from BOTH to MAIN antenna"
+        {
+        };
+        EcnoS2WThrdB:"Ecno Threshold to switch from MAIN to BOTH antenna"
+        {
+        };
+        EcnoW2SThrdB:"Ecno Threshold to switch from BOTH to MAIN antenna"
+        {
+        };
+        RscpS2WThrdB:"RSCP Threshold to switch from MAIN to BOTH antenna"
+        {
+        };
+        RscpW2SThrdB:"RSCP Threshold to switch from BOTH to MAIN antenna"
+        {
+        };
+        BothAntforTestSimPS:"RAS switch disable for PS only call"
+        {
+        };
+        HsRateHystPercentage:"Hysteresis for HsRateThrPercentage"
+        {
+        };
+        CqiHystIdx:"Hysteresis for CqiDiffThrIdx"
+        {
+        };
+        HsRateThrPercentage:"Threshold for HS scheduled Rate (No of subframes HS is allocated / No of subframes in MeasS) "
+        {
+        };
+        CqiDiffThrIdx:"Threshold for CQI Diff (Diff between CQI report and CQI TrBlkSize)"
+        {
+        };
+     };
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_VCR_PARAMETER_LID
+*DESCRIPTION
+*      For 3G Early RLF solution settings
+*      
+*INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+LID_BIT VER_LID(NVRAM_EF_UL1_VCR_PARAMETER_LID)
+     nvram_ef_umts_ul1_vcr_struct * NVRAM_EF_UL1_VCR_PARAMETER_TOTAL
+     {
+        tx_monitor_time:"TX power monitor time to change RLF state"
+        {
+        };
+        sir_threshold_value:"SIR Threshold to change RLF stage"
+        {
+        };
+        qin_threshold_value:"Qin Threshold to change RLF stage"
+        {
+        };
+        n313_limit:"Reduced N313 value to go outofsync"
+        {
+        };
+        t313_limit:"Reduced T313 value to go outofsync"
+        {
+        };
+		t312_limit:"Reduced T312 value to go outofsync"
+        {
+        };
+        crc_pass_threshold:"Number of CRC pass to change RLF state"
+        {
+        };
+        max_tx_pwr:"Maximum TX power threshold to start monitor time"
+        {
+        };
+        tx_pwr_threshold:"Threshold to track immediate increase in TX power"
+        {
+        };
+        tx_monitor_frame:"To Track increase in TX power"
+        {
+        };
+     };
+
+#endif//#if !defined(__L1_STANDALONE__)
+/***************************************************************************************************
+* LID_NAME
+*       NVRAM_EF_UL1_UTAS_THRESHOLD_LID
+*DESCRIPTION
+*      For 3G UTAS Parameters and threshold settings
+*      
+*INFORMATION
+*      Can OTA Reset: Yes
+*      Update Scenario:The data in this LID will be updated task init.
+****************************************************************************************************/ 
+LID_BIT VER_LID(NVRAM_EF_UL1_UTAS_PARAMETER_LID)
+     nvram_ef_umts_ul1_utas_struct * NVRAM_EF_UL1_UTAS_PARAMETER_TOTAL
+     {
+        meas_slot:"Measurement slot duration (200ms)"
+        {
+        };
+
+        utas_two_rx_param:"2RX switch parameters"
+        {
+        };
+           utas_two_rx_param.stx_n_so_hys:"Hysteresis duration for STx SO (3)"
+           {
+           };
+           utas_two_rx_param.stx_phr_abs_thd:"A threshold indicating almost no power headroom  (1)"
+           {
+           };
+           utas_two_rx_param.stx_ptxp_gain_thd:"TxP gain threshold"
+           {
+           };
+           utas_two_rx_param.stx_phr_gain_thd:"PHr gain threshold"
+           {
+           };
+           utas_two_rx_param.stx_n_preswt:"Pre-switching state duration"
+           {
+           };
+           utas_two_rx_param.stx_txp_cb_preswt_thd:"Increased-TxP threshold in pre-switching state"
+           {
+           };
+           utas_two_rx_param.stx_txp_sigpwr_cb_preswt_thd:"Threshold for sum of TxP- and Sigpower-CB in the pre-switching state"
+           {
+           };
+           utas_two_rx_param.db_pwr_enabled:"Flag of Dynamic Barrier for Pwr"
+           {
+           };
+           utas_two_rx_param.db_pwr_low_bound:"Lower bound of DB, it is also the initial value"
+           {
+           };
+           utas_two_rx_param.db_pwr_upper_bound:"Upper bound of DB"
+           {
+           };
+           utas_two_rx_param.db_pwr_fail_step:"Increased amount of barrier"
+           {
+           };
+           utas_two_rx_param.db_pwr_to_step:"Decreased amount of barrier"
+           {
+           };
+           utas_two_rx_param.db_pwr_relax_period:"Time duration to relax barrier"
+           {
+           };
+           utas_two_rx_param.db_hr_enabled:"Flag of Dynamic barrier for Headroom"
+           {
+           };
+           utas_two_rx_param.db_hr_low_bound:"Lower bound of DB, it is also the initial value"
+           {
+           };
+           utas_two_rx_param.db_hr_upper_bound:"Upper bound of DB"
+           {
+           };
+           utas_two_rx_param.db_hr_fail_step:"Increased amount of barrier"
+           {
+           };
+           utas_two_rx_param.db_hr_to_step:"Decreased amount of barrier"
+           {
+           };
+           utas_two_rx_param.db_hr_relax_period:"Time duration to relax barrier"
+           {
+           };
+           utas_two_rx_param.btx_n_so_hys:"Hysteresis duration for BTx Event-SO"
+           {
+           };
+           utas_two_rx_param.btx_n_cb:"Number of MeasS for sigpower CB"
+           {
+           };
+           utas_two_rx_param.btx_sigpwr_cb_thd:"Sigpower CB threshold"
+           {
+           };
+           utas_two_rx_param.btx_phr_abs_thd:"A threshold indicating almost no power headroom"
+           {
+           };
+           utas_two_rx_param.btx_sigpwr_period_thd:"Sigpower threhsold for starting the timer"
+           {
+           };
+           utas_two_rx_param.btx_tow_period:"Duration for periodic SO"
+           {
+           };
+           utas_two_rx_param.btx_tow_upper_bound:"Upper bound of btx_tow_period"
+           {
+           };
+           utas_two_rx_param.btx_tow_step:"Increased amount of btx_tow_period for a failed pre-switching"
+           {
+           };
+           utas_two_rx_param.btx_n_preswt:"Pre-switching state duration"
+           {
+           };
+           utas_two_rx_param.btx_txp_cb_preswt_thd:"Increased-TxP threshold in pre-switching state"
+           {
+           };
+           utas_two_rx_param.btx_txp_sigpwr_cb_preswt_thd:"Threshold for sum of TxP- and Sigpower-CB in the pre-switching state"
+           {
+           };
+           utas_two_rx_param.brx_n_so_hys:"Hysteresis duration for BRx Event-SO"
+           {
+           };
+           utas_two_rx_param.brx_low_qual_thd:"Low quality threshold"
+           {
+           };
+           utas_two_rx_param.brx_sigpwr_cb_thd:"Sigpower CB threshold"
+           {
+           };
+           utas_two_rx_param.brx_snr_thd:"Low-SNR threshold"
+           {
+           };
+           utas_two_rx_param.brx_sigpwr_period_thd:"Sigpower threshold for starting the timer"
+           {
+           };
+           utas_two_rx_param.brx_tow_period:"Duration for periodic SO"
+           {
+           };
+           utas_two_rx_param.brx_tow_upper_bound:"Upper bound of brx_tow_period"
+           {
+           };
+           utas_two_rx_param.brx_tow_step:"Increased amount of brx_tow_period for a failed pre-switching"
+           {
+           };
+           utas_two_rx_param.brx_n_pre_swt:"Pre-switching state duration"
+           {
+           };
+           utas_two_rx_param.brx_sigpwr_cb_preswt_thd:"Sigpower CB threshold in pre-switching state"
+           {
+           };
+
+        utas_one_rx_param:"1RX switch parameters"
+        {
+        };
+           utas_one_rx_param.timeout_timer_high_qual_thd:"High-quality threshold"
+           {
+           };
+           utas_one_rx_param.timeout_timer_low_qual_thd:"Low quality threshold"
+           {
+           };
+           utas_one_rx_param.timeout_timer_long_count_thd:"Default long-term threshold"
+           {
+           };
+           utas_one_rx_param.timeout_timer_short_count_thd:"Default short-term threshold"
+           {
+           };
+           utas_one_rx_param.timeout_timer_tow_step:"Increasing step of pre-switching is failed"
+           {
+           };
+           utas_one_rx_param.timeout_timer_tow_bound:"Upper-bound of increment"
+           {
+           };
+           utas_one_rx_param.eventso_n_hys:"Hysteresis duration for event triggered SO"
+           {
+           };
+           utas_one_rx_param.eventso_low_qual_thd:"Low quality threshold"
+           {
+           };
+           utas_one_rx_param.eventso_n_cb:"CB interval"
+           {
+           };
+           utas_one_rx_param.eventso_sigpwr_cb_thd:"Threshold of Rx signal power CB"
+           {
+           };
+           utas_one_rx_param.eventso_hr_abs_thd:"The threshold below max-TxP limitation"
+           {
+           };
+           utas_one_rx_param.db_pwr_enabled:"Flag of Dynamic Barrier for Pwr"
+           {
+           };
+           utas_one_rx_param.db_pwr_low_bound:"Lower bound of DB, it is also the initial value"
+           {
+           };
+           utas_one_rx_param.db_pwr_upper_bound:"Upper bound of DB"
+           {
+           };
+           utas_one_rx_param.db_pwr_fail_step:"Increased amount of barrier"
+           {
+           };
+           utas_one_rx_param.db_pwr_to_step:"Decreased amount of barrier"
+           {
+           };
+           utas_one_rx_param.db_pwr_relax_period:"Time duration to relax barrier"
+           {
+           };
+           utas_one_rx_param.db_hr_enabled:"Flag of Dynamic Barrier for Hr"
+           {
+           };
+           utas_one_rx_param.db_hr_low_bound:"Lower bound of DB, it is also the initial value"
+           {
+           };
+           utas_one_rx_param.db_hr_upper_bound:"Upper bound of DB"
+           {
+           };
+           utas_one_rx_param.db_hr_fail_step:"Increased amount of barrier"
+           {
+           };
+           utas_one_rx_param.db_hr_to_step:"Decreased amount of barrier"
+           {
+           };
+           utas_one_rx_param.db_hr_relax_period:"Time duration to relax barrier"
+           {
+           };
+           utas_one_rx_param.sb_n_preswt:"Duration of pre-switching state"
+           {
+           };
+           utas_one_rx_param.sb_hr_abs_thd:"The threshold below max-TxP limitation"
+           {
+           };
+           utas_one_rx_param.sb_txp_cb_preswt_thd:"Threshold of TxP difference before and after pre-switching"
+           {
+           };
+           utas_one_rx_param.sb_txp_sigpwr_cb_preswt_thd:"Threshold for sum of TxP AND Sigpower-CB in the pre-switching state"
+           {
+           };
+           utas_one_rx_param.sb_sigpwr_cb_preswt_thd:"Threshold of sigpower difference before and after pre-switching"
+           {
+           };
+    }; 
+
+#endif // #if defined (__MTK_UL1_FDD__)
+END_NVRAM_DATA
+
+#endif  /* GEN_FOR_PC */
+
+#ifdef __cplusplus
+}
+#endif 
+
+#endif  /* __MTK_UL1_FDD__ */
+#endif  /* !NVRAM_NOT_PRESENT */
+#endif  /* __UL1_NVRAM_EDITOR_H__ */